전체 글 242

무선 LAN(IEEE802.11) Wi-Fi - 물리 계층

본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다.이번엔 무선 랜 프로토콜인, IEEE802.11에 대해 알아보자.IEEE802.11 과 Wi-Fi의 관계Wi-Fi는 이더넷처럼 하나의 프로토콜로 착각하기 쉽지만, 엄밀히 말하자면 둘은 서로 다르다.IEEE802.11IEEE802의 11번째 working group에서 개발된 표준 기술을 의미한다.무선 LAN의 표준 프로토콜 기술을 정의한다.Wi-FiWi-Fi Alliance: 무선 LAN을 보급하기 위한 목적으로 설립된 미국 단체해당 단체가 수행하는 상호 연결 설정을 의미한다.주파수 대역무선 랜은 크게 두가지 주파수 대역 중 하나를 사용한다.2.4GHz 대역5GHz 대역해당 대역폭을, "채널"이라는 형태로 나누어 사용한다.2.4GHz ..

유선 LAN(IEEE802.3) 이더넷 - 물리 계층 관점

본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다. 같이 보기: 이더넷 - 데이터링크 계층 관점IEEE802.3이란?유선 LAN의 물리 계층과 데이터 링크 계층(Data Link Layer)에서의 매체 접근 제어(MAC, Media Access Control) 방식을 규정하고 있다.IEEE802.3 과 이더넷의 관계하와이 대학에서 구축된 ALOHAnet으로 시작하였다.이더넷은 알로하넷을 참고해 DEC, Intel, Xerox PARC가 함께 개발한 기술로, 초기의 네트워크 환경에서 사용되었다.IEEE 802.3은 이더넷 기술을 보다 체계적이고 상호 운용 가능하게 만들기 위해 정립된 표준이다.실제 네트워크 환경에서는 IEEE 802.3 표준을 따르는 유선 연결 기술을 이더넷이라고 부른다..

Java I/O vs Java NIO - 왜 NIO는 단일 버퍼 모델을 채택했을까?

글의 목적JAVA I/O 와 Java NIO는 목적 자체가 다르고, 상황에 맞게 써야 한다는데, “그럼 대체 뭐가 달라서, 어떤 기준으로 사용해야 하는가?”에 대한 탐구를 수행한 과정을 기록한다.Java NIO 버퍼 입출력 메소드 - flip, clear, compact기본 개념 - ByteBuffer 동작 방식쓰기 모드 (Writing mode)데이터를 버퍼에 쓸 때 사용한다.position: 현재 쓸 위치limit: 쓰기 가능한 최대 범위(일반적으로 버퍼의 capacity)로 설정된다.읽기 모드 (Reading mode)버퍼에 쓰여진 데이터를 읽어올 때 사용한다.position: 현재 읽을 위치limit: 읽기 가능한 최대 범위(일반적으로 write 모드때의 마지막 position)로 설정된다.쓰기→..

네트워크의 형태 - LAN, WAN, DMZ

본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다.표준 네트워크 형태크게 다음과 같이 세가지로 구분된다.LAN에서 WAN으로 이어져, DMZ 의 공개 서버에 접속하는 형태이다.LAN정의Local Area Network가정이나 기업 등, 한정된 범위의 네트워크를 의미한다.가정의 LAN 환경과 기업의 LAN 환경은, 규모와 설비 면에서 어느정도 차이가 있다.가정의 LAN 환경스마트폰, 태블릿, TV 등등이 LAN으로 연결된다.그 다음 인터넷으로 연결된다.구조인터넷브로드밴드 라우터단말기업의 LAN 환경가정용 LAN보다 좋은 성능으로 구성된다.기업의 LAN 환경에 붙는 추가 기능Redunduncy(이중화)어딘가 하나가 고장나도, 반대쪽에서 처리가 가능하도록 장치를 구성한다.L2 루프 방지프레..

네트워크 장비/기기의 종류와 역할 총정리

본 게시글은 그림으로 공부하는 TCP/IP 구조 도서를 참고하였습니다.네트워크 구성 기기네트워크 구성 기기는 각각 자신이 속한 계층까지만 처리할 수 있다.지금부터 각 계층에 속하는 기기들을 알아보자.물리 계층역할물리적인 사양에 관하여 모두 정의되어 있는 것들을 담당한다.케이블/커넥터 형태핀 할당(핀 배열)패킷의 컨버팅광 신호(케이블)/전기 신호(LAN)으로 변환전파로 변조다루는 PDU: 비트종류NIC, 리피터, 리피터 허브, 미디어 컨버터, 액세스 포인트각각 어떠한 장치들인지 알아보자.NICNetwork Interface Card기본 기능모든 네트워크 단말(스마트폰/PC/태블릿 등)은 애플리케이션이나 운영체제가 처리한 패킷을 NIC를 이용해 LAN 케이블이나 전파로 보내게 된다.네트워크 인터페이스/네트워..

PDU, PCI, SDU란?

통신 프로토콜은 일반적으로 여러 계층으로 나뉘며, 각 계층은 상위 계층에서 전달받은 데이터를 포장해 하위 계층으로 전달한다.이때 등장하는 SDU, PCI, PDU의 의미에 대해 알아보자.SDU (Service Data Unit)상위 계층이 하위 계층에 전달하는 서비스 단위를 의미한다.특징상위 계층의 사용자 데이터를 그대로 포함하며, 아직 하위 계층의 제어 정보(header, trailer 등)가 첨가되지 않은 상태이다.하위 계층에서는 이 SDU에 자신의 프로토콜 제어 정보(PCI 등)를 덧붙여 PDU를 생성한다.PCI (Protocol Control Information)각 계층의 하위 계층이 부가하는 제어 정보로, 데이터의 처리 및 전달, 오류 검출·수정, 흐름 제어, 순서 보장 등의 역할을 수행한다...

네트워크와 프로토콜

네트워크의 역사와 발전과정, 네트워크의 기본 구조를 살펴보도록 하자.네트워크란?네트워크의 역사1960년대시분할 시스템(Time Sharing System)과 네트워크과거 1960년대에는, 한대의 대형 컴퓨터의 처리를 짧은 시간으로 나누어 여러 사람이 사용하도록 만들었다.따라서, TSS 단말에서 대형 컴퓨터에 전화를 걸어 접속한 뒤, 마치 이를 전용 컴퓨터처럼 취급하였다.이것이 네트워크의 시초이다.1970년대ARPANET데이터를 패킷이라 부르는 작은 단위로 잘라서 취급하는 패킷 교환 방식이 도입되었다.네트워크의 데이터 전송 방식네트워크의 데이터 전송 방식에는 크게 두가지가 있다.회선 교환 방식(Circuit Exchange Method)일대일 전송로를 먼저 만들고, 교환을 마칠때까지 전송로를 계속 사용하는..

캐싱 전략의 선택 방법

캐싱 전략은 읽기/쓰기 위주 정책과 캐시 인프라 구조에 따라 달라진다. 각 전략은 상황에 맞게 선택되어야 하며, 읽기/쓰기 정책 관점, 캐시 인프라 구조 관점으로 구분할 수 있다.1. 읽기/쓰기 정책 관점Cache Aside 특징 주로 읽기 작업에 적합하다. 개발자가 직접 캐시 히트/미스 로직을 구현한다. 캐시 장애에 대비한 구성이 가능하다. 데이터 업데이트 시 정합성 문제가 발생할 수 있다. 동일 쿼리를 반복 수행하는 서비스에 유리하다. Write Back 특징 쓰기 작업에 적합하다. Cache Store가 Data Store에 Write 부하를 줄이기 위해 Throttling Queue 역할을 수행한다. 캐시 장애 시 데이터 유실 위험이..

웹 캐시

본 내용은 "HTTP 완벽 가이드" 와 모든 개발자를 위한 HTTP 웹 기본 지식 내용을 참고하여 기록한 정리본입니다.정말 중요한 챕터이다.반드시 이해하고 넘어가야 한다.캐시의 장점불필요한 데이터 전송을 제거같은 데이터가 반복해서 요청될 경우, 네트워크 대역폭이 낭비되는 공간이 생길 수 있다.데이터 저장을 계층화하여, 중복된 트래픽을 제거할 수 있다.네트워크 병목을 제거클라이언트가 서버에 접근할 때의 속도 = 그 경로에 있는 가장 느린 네트워크의 속도이다.일반적으로 원격 서버보다 로컬 네트워크가 더 넓은 대역폭을 제공하기 때문에,빠른 LAN에 있는 캐시로부터 사본을 가져오면, 성능 개선이 가능하다.오프로딩(Offloading)원서버에 대한 요청 수를 완화할 수 있다.갑작스런 요청 쇄도에 의한 원 서버의 ..

프록시

본 내용은 "HTTP 완벽 가이드" 내용을 참고하여 기록한 정리본입니다.프록시 - 웹 중개자프록시란?트랜잭션을 수행하는 중개자이다.프록시 서버에 추가적인 서비스를 삽입할 수 있다.웹 서버이자 웹 클라이언트의 역할을 동시에 수행한다.따라서, HTTP 클라이언트와 HTTP 서버 양쪽의 규칙을 모두 준수해야 한다.프록시의 분류개인 프록시와 공유 프록시공용 프록시여러 클라이언트가 함께 사용하는 프록시이다.캐시 프록시로 동작할 수 있다.개인 프록시단일 클라이언트를 위해 사용되는 프록시이다.SSH 터널링을 지원할 때 사용하거나,섀도삭스와 같은 프로그램에서 사용한다.프록시 vs 게이트웨이프록시동일한 프로토콜을 사용하는 두 개 이상의 애플리케이션을 연결한다.단순 중개자의 역할을 수행한다.게이트웨이서로 다른 프로토콜을 ..

도메인 이벤트와 State Machine 시스템 설계 - 강아지 키우기

의인화(Anthropomorphism)란?소프트웨어 객체를 능동적이고 자율적인 존재로 설계하는 원칙.객체를 마치 사람처럼 직접 행동하는 “자아를 가진 존재”로 다루는 것을 의미한다.- Rebecca Wirfs-Brock - 도메인 이벤트, 상태 머신, 이벤트 소싱, CQRS, 그리고 DDD(도메인 주도 설계)는 서로 유기적으로 결합되어 응집도 높은 설계를 만든다. 본 글에서는 강아지 키우기 예제를 통해 이러한 개념들을 이해해보고, 실제 구현 시 고려해야 할 디테일과 도전 과제들을 이야기하도록 하겠다. 먼저 해당 링크를 통해, 도메인 이벤트의 정의에 대해 이해하길 바란다.예제 - 강아지 키우기우리가 설계해야 할 소프트웨어 모델은, 단순 CRUD 를 넘어 좀 더 능동적으로 스스로 행동하는 객체를 만들어야 할..

Div.2 #915 D - Cyclic MEX

실제 contest중에는 풀지 못한, 난이도 높은 문제였다.Upsolving 을 진행하며, 정리한 내용을 공유하고자 한다.문제https://codeforces.com/contest/1905/problem/Dnn^2 으로는 절대 풀 수 없는 문제이다.핵심 아이디어1. 반드시 맨 앞 원소가, 맨 뒤로 간다.중요한 통찰을 얻을 수 있는 단서 중 하나는, a[0]이 맨 뒤로 간다는 것이다.이 사실을 응용해보자2. MEX값은, 범위가 넓어지면 넓어질수록 무조건 증가하는, 단조증가 형태를 띈다.단조증가 성질 또한, 무궁무진한 활용 가능성을 갖추고 있다.그리디한 접근 혹은, 파라매트릭 서치에도 응용이 가능하니, 기억하고 있도록 하자.3. 값이 순열로 주어진다.중요한 통찰을 얻을 수 있는 마지막 단서는, 값이 순열로 ..

PS/Codeforces 2025.04.04

웹 서버

본 내용은 "HTTP 완벽 가이드" 내용을 참고하여 기록한 정리본입니다.웹 서버일반적으로 웹 서버는 HTML, CSS, JS, 이미지 등 정적 파일을 제공하는 역할로 많이 알려져 있지만, 동적 콘텐츠와 애플리케이션 로직을 제공하기 위해 다른 프로세스나 내부 모듈과 연동하기도 한다.또한 SSL/TLS 암호화 같은 보안 계층을 고려하거나, 가상 호스팅을 통해 여러 사이트를 한 서버에서 운영하는 등 부가적인 기능을 수행한다.주요 키워드커넥션 아키텍처docroot응답 메시지 생성 방식리다이렉션 방식웹 서버의 종류다목적 소프트웨어 웹 서버아파치Nginx임베디드 웹 서버MongooseGoAhead WebServer진짜 웹 서버가 하는 일웹 서버는 기본적으로, 다음과 같은 7단계의 뼈대를 기반으로 동작한다.클라이언트..

도메인 서비스 - DDD의 적용, JPA 엔티티와의 비교

도메인 서비스란?서로 다른 애그리거트간, 협력을 중재하는 객체이다.보통 싱글톤으로, Pure Fabrication 형태를 띄며 정의된다.도메인 서비스의 개념 자체는 매우 단순하다.우리가 쉽게 만들어 쓰는, 애플리케이션 서비스와 별 차이가 없어 보인다도메인 서비스, 그럼 스프링 빈으로 사용해도 되나?가능하다.스프링의 빈(Bean) 관리 메커니즘을 활용하여 싱글톤 객체로 등록해두면 편리하게 재사용할 수 있다.다만 애플리케이션 레이어(서비스 레이어)와 명확히 구분할 필요가 있다.단순히 스프링 빈으로 등록했다고 해서 인프라 계층 로직을 무조건 포함해야 하는 것은 아니다.그럼 도메인 서비스가 스프링 컨테이너에 의해 생성되는데, 인프라 로직에 종속된거 아닌가?실제 인프라 로직은, 선언한 빈을 통해 바이트 코드로 구..

HTTP 커넥션 관리 최적화 기법

본 내용은 "HTTP 완벽 가이드" 내용을 참고하여 기록한 정리본입니다.사전지식: 커넥션 헤더의 오해커넥션 헤더의 내용두 개의 인접한 HTTP 애플리케이션 사이에서, “현재 맺고 있는 커넥션”에만 적용할 옵션을 지정하고자 할 때 사용하는 헤더.예를 들어, 특정한 임시 헤더(meter)나 비표준 옵션(bill-my-credit-card), 연결 종료(close) 등에 대한 정보를 전달한다.meter 같은 헤더는 다른 커넥션으로 전달되면 안 된다.bill-my-credit-card와 같은 옵션을 선택할 수 있다.트랜잭션이 끝나면 커넥션을 끊겠다는 의사를 close로 밝힐 수 있다.커넥션 헤더의 동작 방식HTTP 헤더 필드 명“이 커넥션에만” 해당되는 헤더 이름을 지정한다. 예: Connection: mete..

DDD 트릴레마 - 도메인 모델 완전성 vs 도메인 모델 순수성

다음 글은 블라디미르 코리코프의 DDD 트릴레마를 번역하고, 부족한 내용을 보충하여 작성한 글입니다. 이전에 보면 좋은 글: 도메인 주도 설계 도메인 주도 설계(DDD)사전 지식 - GRASP 패턴도메인 주도 설계(Domain-Driven Design) 란?도메인 주도 설계(Domain-Driven Design)는 소프트웨어의 핵심 비즈니스 도메인에 집중하여 복잡한 도메인 지식을 코드의 도메인 모델로 표dev.go-gradually.me 기초 지식 - 기능 요구사항 vs 비기능 요구사항기능 요구사항비즈니스 로직비기능 요구사항인프라 특성인프라 수준의 구현으로 해결해야 하는 요구사항성능, 품질, etc.DDD를 왜 쓰는가? → 소프트웨어 핵심에서 복잡성을 해결하는 것 DDD에는 흥미로운 트릴레마가 하나 존재..