분류 전체보기 129

도메인 이벤트와 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 트릴레마를 번역하고, 부족한 내용을 보충하여 작성한 글입니다.기초 지식 - 기능 요구사항 vs 비기능 요구사항기능 요구사항비즈니스 로직비기능 요구사항인프라 특성인프라 수준의 구현으로 해결해야 하는 요구사항성능, 품질, etc.DDD를 왜 쓰는가? → 소프트웨어 핵심에서 복잡성을 해결하는 것 DDD에는 흥미로운 트릴레마가 하나 존재한다.지금부터 예시를 통해 알아보도록 하자.예시: 사용자 관리 시스템사용자 도메인사용자 도메인의 컨트롤러이메일 검증 기능 구현 - 이메일 중복 체크지금부터 새로운 비즈니스 로직을 추가해보겠다. 이메일은 유일해야 하며, 사용자 이메일을 변경하기 전에 시스템은 새 이메일이 이미 사용 중인지 확인해야 한다고 해보자.도메인 모델의 순수성 챙기기위 ..

개인 프로젝트로 학습하는 방법

도메인 지식 학습과, 기술 학습을 동시에 하지 마라.학습은 항상 최소 단위로욕심부리면, 흐지부지된다.명확한 목표 설정의 난이도가 매우 올라간다.진도를 잡기 어려워진다.도메인 학습도메인 학습이란?쇼핑몰 도메인을 배워볼까?결제 도메인을 배워볼까?지도 도메인을 배워볼까?무조건 익숙한 기술로런칭하고 보강하고 조금씩 진화시키기무조건 인프라까지 배포하기인스턴스 2대 이상으로소프트웨어 설계정도는 해도 됨모듈링멀티모듈싱글모듈소프트웨어 아키텍처헥사고날클린레이어드코드 작성 규칙JPA 엔티티 도메인으로 사용JPA 엔티티 숨기기무조건 익숙한 기술로 시작하기.차근차근 리팩토링하는 형태로 학습기술 학습하나의 싱글 모듈 안에 다 때려박기웹플럭스카프카레디스NoSQL웹소켓배포는 굳이? git repo에 올려두는 정도만여담굳이 단위테스..

완벽은 없다. - 25년 3월 4주차 회고

완벽한, 최고의 상태는 없다.완벽해보이면, 잘 모르는 것.단점이 없어보이면, 잘 모르는것.뭐든 장단점이 있는 법.현재 상태도 장단점이 있다.장점을 누리자.현재 상태의 장점/단점이 이게 맞나?내 지식에 대한 확신도 필요하다.정확하게, 검증된 내 지식을 믿을 것.적당히 실패하고, 실패로 성장하라.시간 낭비에 대한 두려움을 제거하지 못하면, 절대 행동하지 못한다.성과는 항상, 행동할 때 나왔다.효율보다, 낭비하라.실패하라.하지만, 기존에 알던 것을 활용하기만 한다면, 성장은 없다.양학만 해서는, 성장이 없다.적당히 실패하고, 실패를 통해 성장해라.타인과 다투며, 패배를 통해 성장해라.1일 1글 작성하기작업을, 내가 “오늘 할 수 있는 단위” 로 쪼개는 것도 능력이다.매일, 내가 오늘 할 수 있는 분량이 이게 ..

개인적 공간 2025.03.30

[9376] 탈옥

기본적인 0-1 BFS 문제처럼 보인다.deque를 이용하면, push_front() 및 push_back() 을 이용해 열어야 하는 문의 갯수를 셀 수 있다.근데 단순 최단거리가 아니다.죄수 두명을 탈옥시켜야 한다.탈옥의 정의는, 현재 보여지는 지도 밖으로 죄수가 나간다는 의미이다.우리는 여기서, 지도 밖에 padding 을 한 줄 추가함으로서, 탈옥을 시킬 수 있다.단순히 bfs 하면?다음과 같이, 겹치는 지점을 제외해줘야 한다.근데 두개의 거리를, 중복 없이 어떻게 잴 수 있지?시나리오를 그려보며, 규칙성이 있는지 탐색해보면 반드시 어딘가에서 죄수 2명과 외부지점이 만날 수 있다.문제를 두번에 나눠서 풀면, 해를 구할 수 있지 않을까?다음과 같은 경우, 두 죄수 사이의 최단 거리는 5이고, 이 최단..

PS/Baekjoon OJ 2025.03.29

기본적인 문제 해결 방법

기본적인 문제 해결 접근 방법넘버링 되어있지만, 순서는 없다.순서대로 접근하진 않아도 되지만, 위에서 아래로 접근하는 것이 좋긴 하다.상위 단계가 충분히 되어있지 않다면, 언제든 다시 위로 올라가는 것이 좋다.하지만, 이 다섯가지가 정교하게 되어있어야, 흔들림 없고 견고한 결과물이 완성된다.그렇다고 하더라도, 외부 요구사항이 “견고한 결과물” 보다, “돌아가는 결과물”을 원한다면, 이에 맞출 수 있는 것도 능력이다.모든 것에는 트레이드오프가 있다. 현재 상황에 알아서 잘 판단하자.접근 방법문제 정의문제 분석도구 선택구현평가지금부터, 각각이 무엇을 의미하는지 설명하도록 하겠다.문제 정의현재 주어진 요구사항이 무엇인지 파악하고, 문제에 맞는 종속변수 y, 상수 c, 독립변수 x를 명확히 정의하라!다음과 같은..