티스토리

Go Gradually - Repository
검색하기

블로그 홈

Go Gradually - Repository

dev.go-gradually.me/m

나 자신에게, 나 스스로가 부끄럽지 않도록

구독자
0
방명록 방문하기
공지 GoGradually 의 Reposi⋯ 모두보기

주요 글 목록

  • [개발자를 위한 통계학 찍먹하기] 0편 - 동기 서론나는 그동안 포트폴리오에서 발견되는 성능 테스트에 대한 회의론을 갖고 있었다.정량적 데이터에 의한 동기만으로 성능 테스트가 수행된 경우, 어디서 본 듯한 이유와 어디서 본 듯한 개선, 짜맞춘 의도에 짜맞춘 개선밖에 볼 수 없었고, 정성적 데이터에 의한 동기만으로 성능 테스트를 수행한 경우, 트레이드오프를 고려하지 않은 단순한 오버엔지니어링으로밖에 보이지 않았다.따라서, 해당 성능 테스트에서 작성자들의 문제 해결 능력을 이해하기가 어려웠다.하지만, 아무것도 안하는 것보다는 낫다는 걸 나 스스로도 인정하고 있긴 했다.그래서, “할거면, 논리적으로 하자.” 라는 결론에 도달하게 되었다. 참고: 정량적 데이터 vs 정성적 데이터 정량적 VS 정성적 데이터 차이 파악하고 균형 있는 설문조사 실시하기정량적 데이.. 공감수 1 댓글수 0 2025. 5. 6.
  • [트랜잭션 완전정복] 2편 - 트랜잭션 고립 수준(트랜잭션 격리 수준, Transaction Isolation Level) 우리는 이전 글을 통해, 트랜잭션이 정확히 무엇인지와, 트랜잭션 과정에서 발생할 수 있는 문제들에 대해 이해할 수 있었다.이번 글에선, DB에서 정의하는 추상적인 개념인 Transaction Isolation Level에 대해 구체적으로 알아보도록 하자.이 글은 ACID에 대해 어느정도 개념이 잡혀있는 독자를 기준으로 작성되었다.(다음 편에 ACID에 대해 좀 더 자세히 다룰 예정이다.)주요 용어격리성직렬성스냅샷 격리충돌(Conflict)충돌 동등공유 잠금(Shared Lock)배타 잠금(Exclusive Lock)직렬화 가능(Serializable)반복가능한 읽기(Repeatable Read)커밋된 읽기(Read Committed)커밋되지 않은 읽기(Read Uncommitted)DB 트랜잭션 과정의 .. 공감수 0 댓글수 0 2025. 5. 4.
  • [트랜잭션 완전정복] 1편 - 진정한 의미의 트랜잭션(Transaction)이란? 습관적으로 우리가 사용하는 DB 트랜잭션이라는 용어가 아닌, WAS가 작업하는 단위인 "트랜잭션" 그 자체의 정의와 동작 방식에 집중하여, 다양한 곳에 적용할 수 있는 기준을 가져보자.주요 용어비즈니스 트랜잭션시스템 트랜잭션충돌경쟁 상태락 경합데드락오프라인 트랜잭션트랜잭션(Transaction)이란?트랜잭션이란?클라이언트와 서버 간에, 요청을 주고 응답을 받는 하나의 작업의 단위를 정의한 것.주어진 요청에 대하여, 서버 내부의 상태를 변화시키거나, 적절한 응답을 반환하는 것을 목표로 한다.이를 "비즈니스 트랜잭션" 이라고 부르겠다.DB에서의 트랜잭션작업의 단위를 보장하려고 하니, 하나의 작업처럼 다루고, 이를 영속성 저장소에 저장할 필요가 있었다.하지만, 이 비즈니스 트랜잭션을 위한 인프라 로직을 매번 .. 공감수 0 댓글수 0 2025. 5. 3.
  • 압박은 특권이다. - 25년 5월 1주차 회고 향유하며 살자. 충분히 잘하고 있다.내가 생각하는 개발자에게 가장 중요한 것문제 정의/우선순위 설정 능력 (일)현재 조직이 필요로 하는 일이 정확히 무엇인지 파악하는 능력명확한 의사소통을 이용해, 의미없는 일을 하지 않도록 집중하는 능력나/우리에게 지금 부족한 부분이 무엇인지 파악하는 능력문제 해결 능력주어진 문제를 해결할 수 있는 능력현재 문제의 원인을 파악하고, 현재 선택할 수 있는 가장 효율적인 해결방안을 선택하는 능력CS 지식 - 기술에 대한 이해도각 기술에 대한 트레이드오프가 고려된 기준과 예제현재 문제의 근본적인 원인을 탐색할 수 있는 능력문제의 해결책을 확신을 갖고 선택할 수 있는 능력알고리즘/기술(라이브러리/프레임워크)/프로그래밍 문법/API 숙련도실제 문제의 해결책으로 사용할 기술의 사용.. 공감수 5 댓글수 1 2025. 5. 2.
  • SQL 쿼리의 동작 순서와 기본적인 동작 원리 SQL 문법의 동작 순서 외우는 법게토레이랮혼애ㅣfowghsdol각 문법의 첫글자를 딴 형태로 만든 암기 방식이다.실제 동작 순서는 다음과 같다.fromon(join)wheregroup byhavingselectdistinctorder bylimit/offsetFrom쿼리의 작업 대상이 되는 기본 테이블을 결정한다.최초 쿼리가 동작할 테이블/뷰/파티션/서브쿼리가 정확히 어딘지를 결정한다.On(Join)조인 순서 최적화조인 알고리즘 선택별도의 글로 작성해야 함. 깊이가 깊음. (작성예정)WhereFROM/Join 절로 생성된 모든 행에 대해 필터링을 수행한다.인덱스를 사용 가능한 (sargable) 조건들에 대하여, 인덱스를 사용하여 탐색한다.집계함수를 사용할 수 없다.select 절에서 정의한 alias.. 공감수 0 댓글수 0 2025. 5. 1.
  • 봉쇄/비봉쇄(Blocking/Non-Blocking), 동기/비동기(Sync/Async), 그리고 이벤트 드리븐 아키텍처 통신(파일 I/O, 네트워크I/O) 개념에서 비동기와 논블로킹 개념은 매우 혼동하기 쉬운 주제이다.네트워크를 정확히 모른다는 것은 장님이 코끼리 만지는 격이니, 이번기회에 제대로 정리하고 넘어가보자. 전제이 방식은 모두, 이 패턴을 따를 때 적용된다.호출자가 어떤 작업을 요청하고,처리자가 그 결과를 돌려준다.코드의 흐름이 동기/비동기인것은 문제에서 제외하고, 통신 개념에서의 동기/비동기에 집중해주길 바란다.코드의 흐름이 동기/비동기인 것과, 외부 서버와의 통신이 동기/비동기인 것은 문제가 발생하는 상황이 다르다.이 과정에서, 호출자의 대응 전략에 집중해보자.참고) 좌측 코드의 흐름은, 블로킹/논블로킹이 결정되지 않은 상태이다. get() 시 데이터가 준비되어 있다면 논블로킹처럼 동작할 것이고, 준비되지 .. 공감수 1 댓글수 0 2025. 4. 30.
  • [Spring JdbcTemplate] JdbcTemplate을 이용한 게시글-댓글 게시판 기능 구현기 회원 정보 기능은 가장 간단하게, 랜덤 쿠키값을 부여해서 구분하면 할 수 있겠지만, 현재 프로젝트의 목적이 서비스는 아니므로 건너뛰겠다.학습을 목적으로, Comment를 독자적인 애그리거트가 아닌, Post의 Child Entity로 두었다.Child Entity vs. Value Object vs. DTO의 비교링크 참고JDBC를 사용하면서, child Entity를 생성/수정/삭제하는 방법링크 참고이벤트의 설계 방법링크 참고JPA도 아닌데, @Transactional을 굳이 필수로 붙여야 할까?단순 조회 로직에 대해선 @Transactional 없이 사용해보자.리포지토리 vs DAODAODB 접근만을 위한 객체저수준 DB API를 구현한 객체.단순 DB 접근에 초점Repository애그리거트 전체를 .. 공감수 2 댓글수 0 2025. 4. 29.
  • 도메인 이벤트 vs. 애플리케이션 이벤트. 그리고 이벤트의 설계 방법 도메인 이벤트와 애플리케이션 이벤트의 차이점에 대해 알아보자.주의) 이벤트의 정의는 발행자가 결정하는 것이고, 아래 설명은 모두 "발행자" 기준으로 된 설명이다.도메인 이벤트도메인 이벤트(Domain Event)란 비즈니스 관점의 이벤트를 의미한다.도메인 모델 내에서 “무엇이 실제로 발생했는지”를 표현하는데 집중하며, 도메인 언어를 사용하여 표현한다.주로 “주문이 생성되었다”, “새로운 손님이 입장했다”와 같은 방식으로, 비즈니스적 상황의 변화를 알리는데 집중한다.목적도메인 모델 간 결합도를 최소화하는데 사용한다.Event Sourcing 구현 시 상태를 복원할 수 있는 근거를 제공하는데 사용한다.비즈니스 규칙 변경에 따른 확장성 확보가 가능하다.애플리케이션 이벤트애플리케이션 이벤트(Application.. 공감수 0 댓글수 0 2025. 4. 28.
  • 자바 패키지 네이밍 컨벤션 일반적으로 패키지 네이밍 시 사용되는 용어들의 종류와 그 의미이다.토큰보통 포함되는 위치의미/용도(관례)config최상위 또는 layer스프링 설정 클래스들 (Java Config, 빈 정의, 프로퍼티 등)domainBounded Context 안도메인 모델: 엔티티, 밸류, 애그리거트, 도메인 서비스entitydomain 하위 또는 별도JPA @ Entity 전용 클래스dto / modeldomain 옆계층 간 데이터 전달용 객체 (DTO/VO)repositoryinfrastructure 또는 domain영속성 인터페이스, Spring Data 리포지토리persistence / infra(structure)root layerDB·메시징·외부 API 등 인프라 어댑터serviceapplication la.. 공감수 1 댓글수 0 2025. 4. 28.
  • 패키지 구조 선택 방법 여태까지 수많은 강의와 책을 봤지만, 이런 내용은 기본적이라고 취급하는지 뚜렷한 기준을 찾기 어려웠다.따라서 직접 정리해보았다.패키지의 구성요소 분류설명하기 전에, 다음 세가지 요소를 설명하도록 하겠다.모듈비즈니스 도메인 내에서 정의하는 하나의 기능 단위를 의미한다.예시ordermemberproduct레이어아키텍쳐에서 추구하는 계층 구조를 의미한다.예시domain: 비즈니스 로직을 담당하는 레이어. 도메인 모델과 도메인 서비스, 도메인 이벤트가 여기 속한다.application: 비즈니스 로직을 이용한 UseCase 를 담당하는 레이어. 대표적으로 application service, QueryRepository 계열이 있다.interface: Use Case를 직접 호출하는 레이어. 대표적으로 job .. 공감수 0 댓글수 0 2025. 4. 27.
  • DDD - JDBC에서 Child Entity를 생성/수정/삭제하는 방법 사전 지식Child Entity란 무엇인가?도메인 모델 완전성과 도메인 모델 순수성JDBC로 Aggregate Root의 Repository를 설계하면서 도메인 모델 순수성을 지키려고 하다 보면, JDBC로는 도메인 모델 생성/수정/삭제 로직으로 영속성 데이터를 변경할 수 없다.우리가 JPA의 Dirty Checking 에 익숙해져있기에 눈치채지 못하지만, 일반적으로 도메인 모델이 수정되었다고 해당 사항이 즉시 반영되진 않는다.JPA는 (양방향+CascadeType.PERSIST+orphanRemoval = true의 경우) 리스트에 추가/삭제하는 것만으로 객체의 생성/삭제 로직을 자동으로 SQL 문으로 만들어 쿼리해준다.하지만, JDBC의 생성/삭제는 Dirty Checking을 통한 자동 쿼리 생성이.. 공감수 1 댓글수 0 2025. 4. 27.
  • Child Entity와 Value Object, DTO 간의 차이점 분석 DDD에서 객체는 id, state, operation 이 세가지를 가지고 있어야 Entity로 승격된다.사전 지식 - Entity로 인정받기 위한 3가지 요소ID다른 객체와 구분할 식별자가 필요하다.State객체가 스스로 자신의 상태를 가져야 한다.Operation객체가 스스로 행동하기 위해 정의된 규칙이 있어야 한다.지금부터 위 기초 지식을 바탕으로, Child Entity와 Value Object, DTO 세가지를 분류/분석해보자.Child Entity애그리거트 루트의 하위 엔티티 중, VO가 아닌 것.ID, State, Operation을 모두 가져야 한다.Child Entity의 경우, 외부와 직접 상호작용하는 로직 없이, 자신의 영역 내에서만 관리되는 비즈니스 로직을 가져야 한다.모든 로직이 .. 공감수 0 댓글수 0 2025. 4. 27.
  • [Spring JdbcTemplate] JdbcTemplate을 이용한 상품 관리 기능 구현기 상품 관리 기능을 구현하며, 기술적으로 고민했던 사항들과 배웠던 것들이다.h2 접속 시 주의할 점기본적으로 파일 db로 동작한다.파일로 바로 연결하는게 아닌 tcp 연결로 변경 해주자.단순하게 db를 확인할때는 상관 없지만, 결국 외부 프로그램에서 동시에 접속해야 하기 때문에 TCP 접속이 가능해야 한다.또한 파일에 직접 접근할 경우에는 lock이 걸려버리니, tcp로 연결하는게 좋다.코드 작성 방식, 아키텍처 설계 관점id에 대한 관리 관점id 값은 일반적으로 외부 시스템에 의해서 주입받는 것이 분산 환경을 위하여 선택하는 적절한 선택이다.그렇기 때문에, 인프라적 특성을 띄는 해당 id 값을 도메인 레이어 내에서는 알지 못하게 하고 싶은데,테스트 시에는 해당 id값이 필요한 경우가 많다.이럴 때, 어떤.. 공감수 1 댓글수 0 2025. 4. 26.
  • 천천히 - 25년 4월 4주차 회고 휴식/명상 시 해야하는 것: 힘들다는 생각이 아님. 한시간 뒤에 뭘 할지 생각해야 함.내가 알고 싶은 내용을 내가 구조화할 것.스스로 구조화하는 책임감으로 몰입하기.내가 지금 알고싶은게 뭔지, 정확히 정리하고 학습을 시작하라.냉정함을 잃지 마라.요구사항이 있어야 필요한 기술이 나온다.해당 기능을 학습하기 위한, 적절한 요구사항을 탐색해보기.GPT한테 알려달라고 하면 잘 알려준다.AI가 문제를 대신 해결해주니, 문제 해결에 대한 열의가 좀 사라졌나?전체적인 큰 그림에서 정확한 디버깅을 하는 훈련 수행하기.- 모순 찾기, 귀납적 접근 + 연역적 접근블로그 안쓰면 안된다.적어도 현재는 내 삶의 이유이다.누군가가 내 지식 정리를 보고 깨우침을 얻는 것,그게 내 행복이다. 공감수 1 댓글수 0 2025. 4. 26.
  • [Spring JdbcTemplate] Spring JdbcTemplate 연습기 Spring Data JDBC 를 사용해보기 전에, 기본적인 JDBC 문법이 기억이 잘 나지 않아, 가볍게 토이프로젝트로 몇가지 구현을 해보며 JDBC 문법에 적응해보려고 한다.해당 게시글은 주기적으로 수정될 예정이며, 해당 프로젝트의 방향을 관리하기 위해 작성되었다.목표는 다음과 같다.Spring Data JDBC 를 사용해보기 전에, 기본적인 JDBC 문법을 복습하기 위한 토이 프로젝트이다.1. 단일 테이블 상품 재고 관리 - 구현 완료README.mdCRUDJdbcTemplate 기본 문법 학습학습, 고민 내용2. 게시글-댓글 게시판 - 현재 구현 중README.md조인페이징기본적인 트랜잭션 처리애그리거트 루트에서 모든 연관 엔티티를 한꺼번에 가져오기 위한 방식 구현Coarse-Grained Loc.. 공감수 1 댓글수 0 2025. 4. 25.
  • HTTP/2.0 Stream Blocking & 흐름제어 HTTP/2.0의 흐름제어는 뭘까?흐름 제어는 전송계층(TCP)에서 수행하는 것 아닌가?한 스트림이 커넥션을 독차지하지 않도록, 연결에 대한 전체 스트림의 리소스 배분을 수행해야 한다.이것이 HTTP/2.0의 흐름제어이다. HTTP/2.0 흐름제어와 TCP 흐름제어의 차이점항목TCP 흐름 제어HTTP/2.0 흐름 제어보호 대상- 연결 전체 (TCP 수신 버퍼)- 스트림 별- 연결 전체제어 단위- 바이트 (시퀀스 번호)- 프레임 페이로드 (바이트)주요 목적- 수신 측의 소켓 버퍼가 넘치지 않도록 전송 속도 억제- 연결 안정성 유지- 멀티플렉싱되는 여러 스트림 간 자원 경쟁 완화- 특정 스트림 일시적 쓰로틀링/우선순위 조절윈도우 크기 표기- 16-bit Window Size 필드- WINDOW_UPDATE .. 공감수 0 댓글수 0 2025. 4. 24.
  • HTTP/2.0 - HTTP 멀티플렉싱, HoL Blocking, 그리고 HTTP/3.0의 등장 배경 HTTP/2.0의 등장 배경HTTP/1.1은 그 구현의 단순성과 명료함, 접근성으로 많은 사랑을 받아왔고, 받고 있다.하지만, 하나의 커넥션으로 여러 요청/응답을 처리하기 어렵고, 응답을 받아야만 그 다음 요청을 보낼 수 있는 것은 분명한 아쉬움으로 남아있었다.그리하여, 다양한 곳에서 속도를 개선하기 위한 다양한 방법의 연구가 진행되었다.최종적으로, 구글의 "SPDY" 가 HTTP/2.0의 표준으로 결정되었다.하나의 TCP 커넥션에 여러 요청을 동시에 보내, 레이턴시를 줄이는 것 - HTTP 멀티플렉싱RTT가 20ms인 경우, 12.34% 성능 개선 효과를 보았다.RTT가 80ms인 경우, 23.85% 성능 개선 효과를 보았다.RTT가 200ms인 경우, 26.79% 성능 개선 효과를 보았다.HTTP/2.. 공감수 0 댓글수 0 2025. 4. 23.
  • Spring Web MVC가 요청을 처리하는 과정 - DispatcherServlet의 동작구조 DispatcherServlet의 doDispatch() 동작구조DispatcherServlet 구조라이브러리 : org.springframework.web.servlet.DispatcherServletDispatcherServlet도 부모 클래스에서 HttpServlet을 상속받아서 사용하고, 서블릿으로 동작한다.DispatcherServlet → FrameworkServlet → HttpServletBean → HttpServlet스프링 부트는 DispatcherServlet 을 서블릿으로 자동으로 등록하면서 모든 경로( urlPatterns="/" )에 대해서 매핑한다.참고: 더 자세한 경로가 우선순위가 높다. 그래서 기존에 등록한 서블릿도 함께 동작한다요청 흐름서블릿이 호출되면 HttpServle.. 공감수 1 댓글수 0 2025. 4. 22.
  • Deep Dive - 25년 4월 3주차 회고 실수의 원인몰랐거나덜 알았거나결국 다 배우면 된다.왜도 좋지만, 어떻게도 생각하기.‘내가 할 수 있을까’ 라는 걱정이 드는 이유해당 도메인을 충분히 이해하지 못함내가 뭘 할 수 있는지 두려운 감정이 핵심이다.결국 해당 도메인을 이해하면, 그 안에서 내가 할 수 있는, 해주고 싶은 일이 보이기 시작한다.쫄지 말고, 이해하자!주변사람들을 믿고, 감사하며, 보답하다보면 할 수 있다.평소에는 쭈굴거리면서 “난 부족해…공부해야해…” 하더라도면접때만큼은 “각성한 나”를 보여주자.이거 재밌네요! 이렇게 하면 이부분은 막을 수 있는데 이부분은 좀 까다롭네요? 실제로 해봤을 때 이런이런 문제가 생길것 같아요! 결국 지금 도메인에선 이 방식이 단점을 가리면서 문제를 해결하기 가장 적절한 방법이라고 생각해요!나의 추상적인 .. 공감수 1 댓글수 0 2025. 4. 20.
  • TCP의 다양한 추가 기능 - TFO, Nagle 알고리즘, 지연 ACK, Early Retransmit, Tail Loss Probe TCP Fast Open(TFO)3-way handshake를 사용해 애플리케이션 데이터를 교환하는 기능이다.처음부터는 불가능하다.그 대신, 첫 handshake 때 옵션 필드로 TCP Fast Open에 필요한 정보(TFO Cookie)를 교환한다.그 이후, 2번째 Handshake부터 TCP Fast Open을 발동한다.클라이언트는 SYN에서 HTTP 요청을 송신하고, 서버는 SYN/ACK로 HTTP 응답을 반환한다.Nagle 알고리즘네이글 알고리즘은 작은 데이터가 자주 전송될 경우, 더 큰 세그먼트로 합쳐 전송함으로써 패킷 낭비를 줄이기 위한 방식이다.구체적으로,버퍼에 모은 데이터가 최대 세그먼트 크기(MSS)에 도달하면 즉시 전송한다.이전에 전송한 세그먼트에 대한 ACK를 모두 받으면 즉시 전송한.. 공감수 0 댓글수 0 2025. 4. 18.
  • TCP의 연결과 종료 과정 - 흐름제어, 혼잡제어, 재전송 제어, 3-way handshake, 4-way handshake 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. TCP 의 주요 동작과 그 성공 시나리오들을 알아보자. TCP의 상태는 크게 다음과 같이 분류할 수 있다.접속 시작 단계액티브 오픈클라이언트가 커넥션을 만들어가는 처리를 의미한다.패시브 오픈서버가 클라이언트의 연결 요청을 받아들이는 처리를 의미한다.접속 확립 단계접속 종료 단계액티브 클로즈FIN/ACK을 먼저 송출해서 커넥션을 종료하려는 처리를 의미한다.패시브 클로즈FIN/ACK을 받고, 커넥션을 종료하는 과정을 받아들이려는 처리를 의미한다.TCP는 컨트롤 비트를 구성하는 8개 플래그를 '0' 또는 '1'로 설정해 다음 그림과 같이 TCP 커넥션 상태를 제어한다.각 단계 별 주요 동작으로는 다음과 같은 것들이 있다.접속 시작 단계3-.. 공감수 1 댓글수 0 2025. 4. 18.
  • TCP란? 그리고 TCP 패킷의 형태, Selective ACK(SACK) 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. 전송 계층의 프로토콜, TCP에 대해 알아보자.TCP란?Transmission Control Protocol데이터 전송의 신뢰성을 요구하는 애플리케이션에서 사용된다.애플리케이션 데이터를 송신하기 전에, TCP 커넥션이라는 논리적인 통신로를 만들어, 통신 환경을 정비한 후 통신을 수행한다.송신 파이프수신 파이프송신 측 단말과 수신 측 단말이 2개의 논리적인 파이프를 전이중으로 사용해 송신과 수신을 확인해가며 데이터를 전송한다.QUIC 때문에 확실하진 않지만, 2020년 기준 현재 인터넷상의 트래픽의 80% 이상이 TCP로 구성되어 있다.IP 헤더의 프로토콜 번호는 '6(0x06)'으로 지정되어 있다.TCP 패킷 포맷신뢰성을 요구하기 때.. 공감수 0 댓글수 0 2025. 4. 18.
  • UDP 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. UDP는 User Datagram Protocl의 약자로, TCP보다 훨씬 가볍고, 커스터마이징이 용이한 프로토콜이다. (하얀 도화지를 상상하면 좋다.) 주로 아래와 같은 즉시성을 요구하는 애플리케이션에서 사용된다.음성 통신 (Voice over IP, VoIP)DNSDHCPNTP(시간 동기화 프로토콜)동작 방식데이터그램을 만들고, 서버나 상대를 신경쓰지 않고 계속 보내기만 한다.데이터를 받아들인 쪽은 UDP 헤더에 포함된 UDP 데이터그램 길이와 체크섬을 이용해 데이터가 손상되지 않았는가를 검증한다.체크섬 검증에 성공하면, 데이터를 받아들인다.UDP의 IP 헤더의 프로토콜 번호는 '17(0x11)' 이다.UDP 패킷 포맷헤더의 길이.. 공감수 2 댓글수 0 2025. 4. 18.
  • 포트 번호 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. 전송계층의 핵심은 포트 번호이다.받은 IP 패킷을, 어느 애플리케이션에 전달해야 할지를 결정하는 것이 포트 번호이다.포트 번호는 0번부터 65535번까지 있으며, 다음과 같이 분류할 수 있다.지금부터 각 포트 번호의 종류와 사용처에 대해 알아보자.포트번호의 종류수신지 포트 번호에 사용System Ports0~1023User Ports1024~49151송신지 포트 번호에 사용Dynamic and/or Private Ports49152~65535참고) 멀티플렉싱&디멀티플렉싱시스템 포트0~1023주로 수신 시 사용하는 포트 번호 대역이다.웰 노운 포트(Well-known Ports) 라고도 불린다.IANA가 관리한다.포트 + 전송 프로토콜.. 공감수 0 댓글수 0 2025. 4. 17.
  • NAT 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. NAT는 Network Address Translation의 약자로, IP 주소를 변환하는 기술을 의미한다.이는 부족한 글로벌 IP 주소의 절약 및 같은 네트워크 주소를 가진 시스템 사이 통신에 기여한다.NAT는 변환 전후의 IP 주소나 포트 번호를 NAT 테이블이라는 메모리상의 테이블로 묶어서 관리하며, NAT는 이 NAT 테이블에 따라 동작한다.주의) 두가지 의미를 가지고 있다.넓은 의미의 NAT주소를 변환하는 기술 전부를 의미한다.좁은 의미의 NAT정적 NAT(1:1 NAT)NAT의 종류 중 정적 NAT와 동적 NAT중 하나인 NAPT, 그리고 NAT를 위한 NAT Traversal에 대해 알아보자.정적 NAT정의내부와 외부의 .. 공감수 0 댓글수 0 2025. 4. 17.
  • IP 주소 할당 방법 - 정적 할당, 동적 할당(DHCP) 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. 그렇다면, IP 주소를 어떻게 단말의 NIC에 할당하는걸까?IP 주소의 할당 방법에는 위와 같은 방법들이 있다.이중에서, 정적 할당과 IPv4를 위한 동적 할당 기법인, DHCPv4에 대해 알아보자.정적 할당IP주소의 정적 할당은 각 단말별로 수동으로 IP주소를 설정하는 방법이다.단말의 사용자가 시스템 관리자에게 부탁해, 남아 있는 IP주소를 받아서 설정하는 방식으로 동작한다.서버나 네트워크 기기는 IP 주소가 자주 변하면 통신에 영향을 미치므로, 대부분 이 할당 방식을 사용한다.10여 명 정도의 작은 사무실 네트워크 환경에서, 시스템 관리자가 어떤 단말에 어떤 IP주소를 설정했는지 완전히 파악해 두어야 하는 경우에도 이 할당 방식을.. 공감수 0 댓글수 0 2025. 4. 17.
  • IP 라우팅 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. 지금부터 라우팅, 라우팅 테이블, 라우팅 프로토콜에 대해서 알아보자.라우팅이란?라우팅 & 라우팅 테이블이란?라우터나 L3 스위치는 IP 패킷의 전송 대상지를 바꿀 수 있다.수신지 IP 주소명확히 주어진 수신지 네트워크 정보IP 패킷을 전송할 근접 기기의 IP 주소를 나타내는 네트워크 홉 정보를 관리함으로써이 전송 대상지를 바꾸는 것을 "라우팅"이라고 한다.수신지 네트워크 정보와 네트워크 홉을 관리하는 테이블을 "라우팅 테이블"이라고 한다.라우터가 IP패킷을 라우팅하는 형태모든 기기가 근접 기기의 MAC 주소를 학습한 상태라고 가정하자.네트워크 계층에서, 주어진 IP를 찾을 수 있는(해당 IP를 포함하는 서브넷) 넥스트 홉의 IP를 라.. 공감수 2 댓글수 0 2025. 4. 17.
  • IPv4 IPv4란?커넥션리스 타입(비연결) 인터넷 프로토콜이다.커넥션리스 타입: 다음 글 참고L2 헤더에는 0x0800으로 정의되어 있다.RFC791 에서 상세 정보를 알 수 있다.IPv4의 패킷 포맷링크 참고IPv4 주소 형태표기법 - 10진수 표기법8비트씩 점(.) 으로 구분해서 10진수로 표기하는 것을 의미한다.127.0.0.1192.168.1.1IPv4 주소는 최적화를 위해 어디서부터, 어떻게, 어디까지 활용해야 하는지에 대한 형태가 프로토콜로 정의되어 있다.아래 내용을 통해 IPv4 주소의 구조를 파악해보자.분류 방식사용 용도사용 장소예외 주소/비 예외 주소사용 용도에 따른 분류클래스풀 어드레싱IPv4 주소를 사용 용도에 따라 클래스 A, B, C, D, E로 나누어 사용하는 것8비트 단위로 클래스를 .. 공감수 0 댓글수 0 2025. 4. 16.
  • IPv4 주소와 서브넷 마스크 본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. IPv4 주소는 숫자는 익숙한데 정확히 어떤 기능인지 모호하게 다가올 때가 있다.IPv4 주소의 의미와 이렇게 정의된 이유에 대해 알아보자.표기법 - 10진수 표기법8비트씩 점(.) 으로 구분해서 10진수로 표기하는 것을 의미한다.127.0.0.1192.168.1.1IP주소의 구성IP주소는 네트워크 부분과 호스트 부분으로 나누어져 있다.라우팅의 최적화를 위해 이렇게 나눠두었다.네트워크 단위로 라우팅을 수행하기 위해서,브로드캐스팅 도메인을 제한하기 위해 이렇게 나누어두었다.네트워크 부분어느 네트워크에 속하는지를 나타낸다.호스트 부분서브넷 부분어느 그룹에 속하는지를 나타낸다.호스트 부분어느 호스트인지를 나타낸다. 서브넷 마스크라우터가 특.. 공감수 1 댓글수 0 2025. 4. 16.
  • IPv4 패킷의 구조 버전IP의 버전을 나타내는 4비트 필드이다.IPv4에서는 "0x4" 가 들어간다.헤더 길이(Internet Header Length, IHL)IPv4의 헤더 길이를 나타내는 4비트 필드이다.헤더의 길이를 4바이트 단위로 환산한 값이 들어간다.1바이트, 1비트 단위가 아님에 유의하자.IPv4 헤더의 길이는 20바이트 이므로 "0x5"가 들어간다.ToS(Type of Service)정의IPv4 패킷의 우선도를 나타내는 1바이트(8비트) 필드이다.우선 제어, 대역 제어, 혼잡 제어 등 QoS(Quality of Service)에서 사용한다.미리 네트워크 기기에서 '이 값이면 최우선으로 전송한다.', '이 값이면 이것만은 보증한다' 등 정책을 설정해 두고송신자가 적절한 헤더를 선택함으로써 QoS를 지원할 수 있.. 공감수 0 댓글수 0 2025. 4. 16.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.