2025/04 47

프록시

본 내용은 "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에는 흥미로운 트릴레마가 하나 존재..