본문 바로가기

반응형

programming

(93)
[DDD] chapter 4 Chapter 4 4.1 JPA를 이용한 리포지터리 구현 4.1.1 모듈 위치 위의 그림처럼 Repository interface는 도메인 영역에 속한다. 이를 구현하는 구현체는 인프라영역에서 구현한다. 가능하면 리포지터리 구현 클래스를 인프라스트럭쳐 영역에 위치 시켜서 인프라스트럭처에 대한 의존을 낮춰야한다. 4.2.1 리포지터리 기본 기능 구현 인터페이스는 애그리거트 루트를 기준으로 작성한다. 주문 애그리거트는 Order 루트 엔티티를 비롯해 OrderLine, Orderer, ShippingInfo 등 다양한 객체를 포함하는데, 이 구성요소 중에서 루트 엔티티인 Order를 기준으로 리포지터리 인터페이스를 작성한다. 애그리거트의 널리 사용되는 규칙은 'findBy프로퍼티 이름(프로퍼티 값)' 형식을..
[DDD] chapter 3 3. 애그리거트 3.1 애그리거트 애그리거트의 필요성 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고, 그렇게 되면 도메인 간의 관계를 파악하기 어려워진다. 복잡한 도메인을 이해하고 쉽게 관리하려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요하다. 애그리거트는 복잡한 도메인을 상위 수준에서 조망할 수 있도록 해준다. 애그리거트의 장점 애그리거트는 도메인의 일관성을 유지하는데 도움을 준다. 복잡한 도메인을 단순한 구조로 표현할 수 있다. 도메인을 변경하는데 필요한 노력이 줄어든다. 애그리거트에 속한 객체는 동일한 라이프 사이클을 갖는다. 애그리거트의 규칙 애그리거트는 자신에게 속한 객체만을 관리할 뿐 다른 애그리거트는 관리하지 않는다. 도메인 규칙에 따라 함께 생성되는 구성 ..
[DDD] chapter2 Chapter 2 2.1 네 개의 영역 표현 영역 HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환하여 응용 영역에 전달. 응용 영역의 응답을 HTTP로 변환하여 전달. 응용 영역 사용자에게 제공해야할 기능을 구현. public class CancelOrderService { @Transactional public void cancelOrder(String orderId){ Order order = findOrderById(orderId); if(order == null) throw new OrderNotFoundException(orderId); order.cancel(); } } 위의 예시처럼 응용 서비스는 로직을 직접 수행하는 것이 아니라 도메인 모델에 로직 수행을 위임한다. 도메인 영역 도메..
[DDD] chapter 1 chapter 1 1.1 도메인이란? 도메인: 소프트웨어로 해결하고자 하는 문제 영역 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 하나의 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공한다. 특정한 도메인을 위한 소프트웨어라고 해서 모든 기능을 직접 구현하지는 않는다. 하위 도메인을 어떻게 구성할지 여부는 상황에 따라 달라진다. 도메인마다 고정된 하위 도메인이 존재하는 것은 아니다. 1.2 도메인 전문가와 개발자 간 지식 공유 요구사항의 중요성 개발자는 요구사항을 분석하고 설계하여 코드를 작성하고 테스트하고 배포한다. 요구사항을 처음부터 제대로 설계하지 않으면 코드를 수정해야한다. 잘못 개발한 코드를 수정하는 것은 많은 비용이 소모된다. 요구사항을 올바르게 이해하고 설계하는 방법 개발..
[programmers] 250136번 - PCCP 기출문제 2번(BFS, PCCP 기출문제) 1. 문제 및 예제 Level 2 문제들을 쭉 풀어가던 도중 PCCP 기출문제 두 문제가 공개되어 바로 풀어보았다. BFS 알고리즘이 핵심이지만, 더 빠른 알고리즘을 위해 범위를 저장하는 부분이 필요하였다. https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이과정 시간 복잡도 때문에 BFS로는 풀 수 없다. O(N^3)이기 때문에 다른 방법을 생각해야 했다. 내가 생각한 방법은 다음과 같다. 아래와 같은 입력이 주어졌다고 가정하자. 이렇..
[programmers] 1835번 - 단체사진 찍기(Brute force, 2017 카카오코드 본선) 1. 문제 및 예제 주어진 조건을 보면 아무리 계산을 많이 해도 시간 제한에 걸리지 않을 것이라는 확신을 가졌다. 그리고 문제 풀이를 세울 때도 Brute force밖에 생각나지 않았다. 이 문제가 정답률이 낮은 이유는 문제 자체의 난이도가 아니라 전역 변수에 관한 처리 방법인 것 같다는 생각이 들었다. https://school.programmers.co.kr/learn/courses/30/lessons/1835 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이과정 문제를 나누면 다음과 같다. 1. 구할 수 있는 모든 순서를 구한다. (재귀함수 ..
[programmers] 92342번 - 양궁대회 (BFS, 2022 KAKAO BLIND RECRUITMENT) 1. 문제 및 예제 DP인줄 알고 삽질만 두시간 했다가 도저희 감히 안잡혀서, 공식 문서 한 줄에서 힌트를 얻었다. 이런 간단한 방법도 생각하지 못하다니... 난 아직 멀었나보다.. https://school.programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이과정 문제에서는 경우의 수를 return하는 것이 아니라 어떤 과녁에 몇발의 화살을 맞췄는지를 반환해야하기 때문에 queue에 몇발을 맞췄는지에 대한 정보를 저장하는 배열을 추가하였다. queue에는 해당 과..
[programmers] 150368번 - 이모티콘 할인행사 (brute force, 2023 KAKAO BLIND RECRUITMENT) 1. 문제 및 예제 완전탐색 조합문제이다. 카카오는 이제 구현이 베이스로 깔리는 것 같다. 문제를 나누는 카테고리는 따로 있어도 뭔가 복잡한 구현을 해야하는 느낌이다. 이런 구현은 많은 문제를 풀어보는 방법밖에 없나 싶다.. 약 20분에서 30분 정도 걸렸다. 실제로는 정해진 5시간 안에 여러 문제를 풀어야한다는데... 집중력 떨어지는 입장으로서 걱정이 많이 된다. https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이과정 사실 풀이 과정..