TCP(Transmission Control Protocol)에는 크게 세 가지 제어 기능이 존재한다. 하나는 전송되는 패킷의 양을 조절하는 흐름제어, 하나는 패킷이 잘 도착했는지를 확인하고 오류가 발생했을 때 재전송할 수 있게 해주는 오류제어, 마지막 하나는 네트워크의 혼잡을 피하기 위한 혼잡제어다. 이번 아티클에서는 그 중 흐름제어에 대해 살펴본다. 각각 양이 많아 오류제어와 혼잡제어는 추후 다른 아티클로 작성하겠다. 흐름제어(flow control)통신에서 주로 활용하는 기술이 버퍼다. 이는 여러 요소(장치, 프로그램)등이 처리하는 속도나 크기, 단위가 다르기 때문이다. 따라서 어떠한 완충기 역할을 하는 버퍼를 둬서 통신하게 된다. 우리가 사용하는 PC도 네트워크 통신을 위한 NIC(Network ..
이더넷에서는 충돌이 발생할 수 있다. 특히 과거에 충돌이 발생하는 경우가 많았는데, 주로 다음의 Bus topology와 같이 유선 케이블을 공유하는 과정에서 발생했다고 한다. 위와 같이 하나의 회선을 여러 디바이스가 공유하는 구조라면, 송수신에 대한 제약이 생길 수 밖에 없다. 이런 상황에서 여러 디바이스가 동시에 데이터를 송신하게 되면, 물리적 신호가 겹치게 되고 이를 '충돌이 발생했다' 라고 표현한다. 따라서 위와 같은 충돌을 해결하기 위해 존재하는 이더넷 표준이 CSMA/CD이다. 다만 미리 알아두어야 할 것은, CSMA/CD는 현재보다는 과거에 주로 사용했던 기술이라는 점이다. 최근은 허브와 같은 장비들을 사용하지 않고 스위치를 주로 사용하면서 네트워크의 형태가 bus topology에서 sta..
SDN은 말 그대로 '소프트웨어로 정의된 네트워킹 방식'을 의미한다. 기존의 네트워킹 방식, 우리가 흔히 알고 있는 네트워킹 방식은 물리적인 장비들이 '스스로' 데이터를 전송하는 방식이다. 우리의 PC는 네트워킹이 어떤 방식으로 이루어지고 있는지, 어느 라우터를 거치는지 등을 알지 못하지만 패킷을 송, 수신할 수 있다. 이는 스위치나 라우터 같은 장비들이 스스로 목적지를 판단하고 패킷을 포워딩하기 때문이다. SDN는 반대로 이 데이터의 흐름 자체를 제어하는 데에 목적이 있다. 전통적인 방식과는 다르게 네트워크 장비의 제어부만 분리해서 이를 별도의 컨트롤러로 이전한다. 그러니까, SDN을 적용한 네트워크 장비들은 포워딩만 할 뿐, '어떻게 가지?'등과 같은 내용은 컨트롤러가 담당한다는 것이다. 컨트롤러에서..
현재 AIoT 수업을 듣고 있는데, Broadcast Domain과 Collision Domain이라는 용어가 자주 등장하는 것 같다. 이번 포스팅에서는 이들이 어떤 개념을 갖고 있는지 알아보면서 이더넷 네트워크에 대한 약간의 기초 개념까지 잡아보자. Collision Domain Collision Domain을 직역하면 충돌 도메인이라는 의미이다. 이는 네트워크에서 '패킷이 충돌하여 영향을 받게 되는 영역'을 의미하는데, 이더넷 네트워크는 하나의 회선을 여러 종류의 패킷이 사용할 수 있는 구조이기 때문에 충돌 가능성이 존재하기 때문이다. 전통적인 이더넷은 이러한 충돌에 대한 해결책으로 CSMA/CD 방식을 사용한다. CSMA/CD란 Carrier Sense Multiple Access with Coll..
들어가면서 하루스터디 팀은 Github Actions를 사용해 CI 환경을 구축하고 있습니다. 즉, Pull Request가 발생할 때마다 자동으로 빌드와 테스트를 진행해 코드가 병합되어도 되는지를 판단해줍니다. 이를 통해 코드가 병합되었을 때의 파급효과를 최소화할 수 있습니다. 그런데 이런 기능은 어떻게 동작하는 걸까요? 아직 merge도 하지 않았고, Pull Request만 보냈을 뿐인데 어떻게 통합된 코드를 빌드하고 테스트할 수 있는 것일까요? 그 해답은 Pull Request에 있습니다. Pull Request는 단순한 merge 요청 이라고 생각하기 쉽상이지만, 사실 숨겨진 원리가 존재하기 때문입니다. 그리고 이 숨겨진 원리를 안다면 Pull Request를 활용한 CI 파이프라인을 보다 쉽게..
동기는 무엇이었을까 우테코 수료 이후, 학교로 돌아가게 되면서 '내가 무엇을 할 수 있을지'에 대한 고민이 많았다. 주변 크루들은 대부분 졸업을 하고 온 터라 취업 준비를 하는데, 나는 아직 1년이라는 시간이 남았기 때문이다. 그런 상황에서 포비와의 상담을 통해 '스터디를 직접 만들어보는게 어떻겠느냐' 라는 피드백을 들었고, 바로 실행에 옮기기로 했다. 그렇게 고민하지 않았던 배경에는 5기 주노와 같이 벌써 비슷한 계획을 진행중인 크루도 있었기 때문이다. 늘 학교를 다니면서 프론트엔드나 백엔드에 대해 학습할 기회가 없다는 느낌을 많이 받았었다. 컴퓨터공학과 정규 과정에서는 당연히 포함되어 있지 않고, 결국은 대외동아리 활동으로 배우는 친구들이 많았다. 우테코를 수료한 지금은 어느정도 웹에 대한 지식은 있..
우아한테크코스 과정이 종료되었다! 벌써 시간이 이렇게 빠르게 흐르다니..🥲 약 10개월간의 여정이 처음에는 길게 느껴졌었는데, 지금 와서 돌이켜보니 그렇게 길지만은 않았던 것 같기도 하다. 이 과정에서 많은 것들을 느꼈고, 배웠고, 성장했다. 단순히 기술적인 성장을 넘어서서 인격적인 성장, 그리고 내 삶에 대해 고민을 많이 했던 계기였다. 그리고 부족했던 점들에 대해서도 느끼는 순간이 많았다. 우아한테크코스의 마지막 회고라는 사실이 아쉽기는 하지만, 담백하게 지난 1년을 되돌아보려고 한다! ㅎㅎ기술적 성장우테코에 합류하기 전까지는 백엔드 개발자의 'ㅂ'자도 몰랐다. 정확히 어떤 업무를 담당하는 건지도 잘 몰랐다. 프리코스를 시작할 때에는 자바조차도 알지 못해서 고생했던 기억이 난다. 지금 되돌아보면 어느..
도커를 활용한 서비스 마이그레이션을 진행하고 있습니다. 이번 아티클에서는 도커에서 데이터를 관리하는 방법에 대해 알아봅니다. Writable Layer의 휘발성 & 성능 이슈 도커 컨테이너는 실행 중 저장되는 정보를 Writable Layer (혹은 Container Layer라고도 불립니다)에 저장합니다. 그런데 이런 Writable Layer는 컨테이너가 삭제되면 같이 삭제된다는 특징을 갖고 있습니다. 따라서 어떤 데이터가 영구 저장되어야 한다면 컨테이너 내부에 저장하는 것은 좋지 못한 선택입니다. 또한 데이터가 영구적으로 저장될 필요가 없다고 하더라도 컨테이너 내부의 파일 시스템에 데이터를 저장하는 것은 지양되는 경우가 많습니다. 컨테이너 내부의 파일 시스템은 UFS(Union File System..
레벨 4는 프로젝트로 바빠 미션에 대한 회고는 여태 작성하지 못했었는데, 마지막 미션에서는 얻은게 상당한 것 같아 회고를 작성하게 되었습니다. 레거시 코드 리팩토링 미션은 기존의 절차지향적으로 작성된 코드를 단계적으로 리팩토링 및 보완하는 미션입니다. 비즈니스 요구사항 분석하기 step1 의 요구사항은 비즈니스 요구사항을 분석하고 테스트 코드를 작성하는 것이었습니다. 처음 주어진 코드는 빈약한 도메인 모델을 사용하고 있었을 뿐만 아니라 서비스에 모든 로직이 쏠려 있는 트랜잭션 스크립트 패턴으로 구성되어 있었습니다. 또한 문서라고 할만한 게 전혀 없었기 때문에 오로지 코드로부터 요구사항을 분석해야 했습니다. 얼추 기능목록은 뽑아내긴 했으나 코드만으로 비즈니스를 유추하기에는 모호한 부분도 존재했습니다. 도메..
배경현재 하루스터디라는 서비스를 개발하고 있습니다. 하루스터디는 효율적인 학습 사이클을 제공하는 서비스로, 학습 전 후로 계획 및 회고 작성을 권장함으로써 학습 방법에 대한 빠른 피드백을 가능하게 해 줍니다. 이런 학습 사이클은 여럿이서도 진행할 수도 있고, 혼자서도 진행할 수 있습니다. 그런데 사실 이전까지는 여럿이서 하루스터디를 사용하더라도 진행상황이 동기화되지 않았습니다. 누구는 계획 단계, 누구는 회고 단계일 수 있다는 이야기입니다. 그리고 진행상황을 동기화해 달라는 사용자 피드백에 따라 새로운 버전에서는 동기화된 버전을 제공할 예정이었습니다. 하지만 문제가 여럿 발생했습니다. 스터디 중간에 버전이 바뀐다면?우선 이전 버전에서는 '진행도'라는 개념이 사용자마다 존재했습니다. 따라서 누구는 계획을 ..