전체 글206 DDD의 Repository Pattern은 왜 사용할까 # 서론최근 많은 개발자분들이 Spring Data Jpa에서 제공하는 `JpaRepository`를 사용하면서 자연스럽게 DDD의 리포지토리 패턴을 사용하고있다. 이번글에서는 DDD의 Repository Pattern의 등장 배경과 개념, 그리고 적용시 얻는 이점들에 대해서 소개해보고자 한다. # 본론리포지토리 패턴이란?리포지토리 패턴은 도메인 주도설계에서 중요한 역할을 하는 설계 패턴 중 하나이다. 이 패턴은 도메인 객체를 영속화하는 작업을 추상화하여 도메인 모델과 데이터베이스 접근 로직을 분리하는것을 목표로 한다. 등장 배경은?DDD의 리포지토리 패턴은 복잡한 어플리케이션에서 다음과 같은 문제를 해결하기 위해 등장했다고한다. 1. 도메인 로직과 데이터 접근 로직의 분리도메인 모델은 비지니스 로직을.. Self-Development/Study 2024. 6. 8. 애그리거트(Aggregate) 디자인하기 # 서론일단 제목에서 나온 키워드의 사전적 개념부터 간단히 정리하고 시작한다. 그리고 애그리거트를 왜, 어떻게 그리고 이를 어떻게 활용하는지에 대한 내용을 소개해보려한다. 애그리거트(Aggregate)데이터 변경의 단위로 다루는 연관 객체의 불변 집합체를 말한다. (사전적 개념만 정리했을땐 간단해보이지만, 애그리거트 개념은 굉장히 많은 내용을 내포하고있어 더 깊이 알아볼 필요가있다.) # 본론왜 애그리거트 (Aggregate) 경계 설정이 중요할까?가장 대중적인 주문(Order) 도메인으로 설명을 해보려한다. 필자는 주문 시스템을 만들기 위한 엔터티들을 아래와 같이 설정했다. data class Address( val street: String, val city: String, val state: St.. Self-Development/Study 2024. 6. 7. 도메인과 도메인 모델(Domain Model) # 도메인넓은 의미에서 도메인이란 한 조직이 행하는 일과 그 조직 안의 세계를 일컫는다. 비지니스 담당자는 시장을 파악하고 상품과 서비스를 판매한다. 각기 다른 종류의 조직은 그 나름대로 독특한 노하우를 가진 영역과 업무를 수행하는 방법이 있다. 그 이해의 영역과 조직의 작업을 수행하는 방법이 그 조직의 도메인이다. 다시말해 당신이 한 조직을 위해 소프트웨어를 개발한다면, 그 조직의 도메인 안에서 일하고있는것이다. # 도메인 모델도메인 모델의 아름다운 소리 우리의 모델이 음악이였다면, 그 모델은 실수 없이 완벽한 소리, 순수성, 힘, 우아함과 아름다움을 가졌을 것이다. 도메인 모델이라는 용어에도 `도메인` 이라는 단어가 들어가있으므로, 한 조직의 전체 비지니스 도메인을 위한 하나로 응집력 있게 모든 항목.. Self-Development/Study 2024. 6. 5. 메세지 브로커로 동시성 이슈 트러블 슈팅하기 (feat. AWS SQS) 이번 글에서는 B2B SaaS 제품을 만들면서 발생한 동시성 제어 이슈를 트러블 슈팅한 이야기를 정리해보려한다. Background도메인 서비스들은 MSA 환경으로 이루어져있다.스케줄(schedule), 수납(purchase), 시술권(ticket)이라는 Bounded Context가 존재한다. 각 B.C간 의존 관계는 다음과 같다. 스케줄 -> 수납 스케줄 -> 시술권 시술권 -> 수납 수납을 하면, "수납됨" 이벤트에 속한 구매 항목 기반으로 시술권 그룹이 생성된다. (Purchase B.C.) Purchased Event Publish (Ticket B.C.) Purchased Event Consume -> Handle Event -> Process Event -> Create Ticket 생성된 .. Architecture 2024. 5. 10. 이벤트 소싱을 사용한 이유, 그리고 적용하면서 겪은 문제들 (feat. CQRS) 이번 글에서는 Event Sourcing 사용한 이유와 그 과정에서 겪은 문제에 대해 정리해 볼 생각이고,생각한 목차는 다음과 같다. 목차1. 풀고자 하는 비지니스 문제2. 왜 이벤트 소싱?3. 적용하면서 겪은 문제들4. 마무리 풀고자 하는 비지니스 문제현재 미용 의료 병원의 내원부터 귀가까지 책임지는 올인원 B2B SaaS 제품을 만들고있다. 고객의 내원 ~ 귀가 프로세스에서 큰 틀로보면,내원 -> 접수 -> 시술 받음 -> 귀가 정도일 수 있겠지만, 이 과정을 좀 더 톺아보면정말 많은 과정들이 숨어있다.하나의 예시로는 시술을 받는 과정에서 업셀링을 통해 새로운 시술을 실시간으로 추가하여 받을 수 있고, 받고 나와서 서비스가 불만족스러워 환불 처리를 밟을 수도 있다. 또는 피부 케어 서비스가 들어.. Architecture 2024. 5. 2. 레디스를 이용한 선착순 티켓팅 발급 서비스 개선기 점진적으로 선착순 티켓팅 발급 서비스 성능을 개선하는 설계 방식에 대해 알아본다.(주로 그림을 통해 설명하고자한다.) 비지니스 요구사항간단하게 고객(user)와 티켓(ticket)의 도메인이 존재한다고 가정한다.고객은 동일한 중복 티켓은 발급받을 수 없고, 티켓은 최대 1000개까지만 발급할 수 있도록하는 제한사항이 있다.티켓 발급 이벤트가 시작되면, 매우 많은 트래픽을 받게된다. 고려하지 않은 내용 이번 글에선 레디스로 캐싱과 분산 처리를 통해 성능 개선을 하는 방식을 고민하면서 설계해보았기에 데이터베이스 잠금은 고려하지않는다.첫번째 설계 가장 일반적인 전통적인 방식을 고려해보았다.클라이언트가 티켓 발급 명령을 보내면, api server는 검증로직을 거친 뒤 데이터베이스에 필요한 데이터들을 영속하는 .. Architecture 2024. 4. 30. 실용적이고 안정감있는 테스트 코드 작성하기 서론 개발을 할 때면, 좋은 테스트를 작성하기 위해 매번 많은 고민을 통해 꽤 긴 시간을 허비하게된다. 현 세계에는 E2E Test, Integration Test, Unit Test 등 많은 테스트 기법들이 있지만, 현재 속해있는 조직에선 Unit Test를 위주로 작성 하고있다. 유닛 테스트만 작성하는 이유는 몇 가지가 있겠지만, 그 중 개인적으로 가장 타당하다고 생각드는 부분은 다음과 같다. 우리의 시스템은 주어진 요구사항이 Domain Model Layer에 응집되도록 하고있다. 이 응집된 Domain Model이 보통 단위의 대상이 되도록 하고있다. 따라서, Domain-Model의 테스팅이 성공된다면, 우리의 복잡한 요구사항은 얼추 만족시키게 되는것이다. 이 도메인 논리에 대해 촘촘하게 작성만.. Self-Development/Study 2023. 9. 27. 효율적인 나만의 일상 루틴을 만들어보자 위 이미지처럼 우리는 알게모르게 일상 루틴이 잡혀있는것들이 꽤나 많은 것 같다. 그러나 의식적으로 생각해야지만 만들 수 있는 루틴이 훨씬 많을 것이라 생각하여 포스팅을 작성해보려한다. 그리고 무엇보다 이 포스팅을 통해 효율적인 루틴을 만들어낸다면 앞으로의 삶이 윤택해질 수 있을 것 같다는 생각이 들었다🧖🏻 필자는 어느날부턴가 평소 일이 끝난 후 약속이 없는 날이라면, 운동과 공부를 해야한다는 인식이 박혀있어 이대로 진행이 안되면 하루가 망친것같고 불안한 기분이 든다. 걱정이 많은 타입이라 불안감을 남들보다 더 느끼는건 사실인것같다. 그래서 이 루틴을 조금 더 뾰족하고 디테일하게 설계해보고자 이번 글을 작성하게 되었다. 우선 내 평소 생활을 대략적으로 적어보면 다음과 같다. 기상 - 8:00 출근 - 8:.. Self-Development/생각 정리 - 회고 2023. 1. 15. DockerFile의 개념과 예시 정리 DockerFile이란? DockerFile은 명령이 들어있는 텍스트 파일이라고 보면된다. 물론 이 명령어들은 도커만의 고유한 것으로 도커 공식 문서에 정의되어 있다. 우리가 흔히 아는 자바나 파이썬과 같이 작성 후 컴파일러를 통해 실행되는 프로세스를 도커 파일도 동일하게 거친다. 도커에서도 마찬가지로 도커 클라이언트를 통해 도커파일을 실행하고 빌드 명령을 할 수 있다. build를 통해 DockerFile에 기술된대로 레이어된 파일 시스템을 생성한 다음 Docker 이미지를 사용하여 컨테이너를 만들 수 있다. 이 dockerfile을 이용해서 이미지를 만드는 방법과 예시는 아래를 참고바란다. DockerFile 명령어 종류 FROM 다른 이미지에서 이미지를 만들고 싶을때 사용한다. 아무것도 없는 상태에.. Infra 2023. 1. 11. "최고의 팀은 무엇이 다른가?" - 북 토크 후기 1월9일~ 10일 회사의 스쿼드 워크샵을 다녀왔다. 워크샵에서 여러가지 행사들을 진행했는데, 그 중 하나인 독서 후기 공유 시간을 가졌었다. 나는 이시간이 너무 의미깊고 팀원들과의 소속감을 더 키우는데 많이 도움이 되어 정리해보려한다. 우리는 7명의 팀원들과 위 책을 읽고 느낀점과 읽어보고 이해가 안가는 부분들에 대해 공유해보는 시간을 가졌다. 정말 오랜만에 책을 읽었는데, 생각보다 자극적이고 재밌는 사례들 덕분인지 잘 읽혔다고 생각한다. 책을 읽고 공감된 부분과 질문사항, 그리고 최종 정리까지 짧게 정리한 부분을 보여주면 다음과 같다. (아래 내용은 실제 팀원분들과 공유한 내용입니다.) 독서 후기 최고의 팀은 무엇인지를 알기위한 질문 세가지를 정리해보자면 아래 세가지로 정리할 수 있을것같습니다. 팀 내.. Self-Development/Book Review 2023. 1. 11. 이전 1 2 3 4 5 ··· 21 다음 💲 많이 본 글