본문 바로가기

전체 글508

Chapter4. 리포지터리와 모델 구현 모듈 위치 // 인터페이스는 도메인 하위에 위치 domain/ └── repository/ └── UserRepository.java // 구현체는 인프라스트럭처 하위에 위치 infrastructure/ ├── repository/ └── JpaUserRepository.java JPA 를 사용하면 수정한 결과를 반영하는 메서드를 따로 추가하지 않아도 자동으로 DB 에 반영한다 ( 변경 감지 ) 스프링 데이터 JPA 예제 @Entity public class User { @Id @GeneratedValue private Long id; private String name; private int age; } public interface UserRepository extends JpaRepository {.. 2024. 4. 8.
Chapter3. 애그리거트 애그리거트 : 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만드려면 상위 수준에서 모델을 조망할 수 있는 방법 애그리거트는 도메인 주도 설계(DDD)에서 사용되는 중요한 개념 애그리거트는 함께 변경되는 일관성 있는 엔터티들의 집합 애그리거트 내 엔터티들은 서로 밀접하게 연관되어 있으며, 외부 엔터티는 애그리거트 루트를 통해서만 애그리거트 내 엔터티에 접근 가능 애그리거트 루트 : 애그리거트를 식별하고 외부 엔터티와 상호 작용하는 엔터티 모든 객체가 일관된 상태를 유지하려면 애그리거트 전체를 관리할 주체가 애그리거트 루트의 역할 식별: 애그리거트를 식별하는 고유한 ID를 가진다. 접근 제어: 외부 엔터티가 애그리거트 내 엔터티에 접근하도록 허용하는 역할을 한다. 변경 관리: 애그리거트 내 엔터티의 변경을.. 2024. 4. 7.
Chapter2. 아키텍처 개요 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층은 상위 계층에 의존하지 않는다. 1. 표현 영역 (Presentation Layer) 사용자 인터페이스(UI)를 담당 사용자와 직접 상호 작용하며, 시각적 요소와 기능을 제공 예시: JSP, Thymeleaf, React, Vue.js 등 2. 응용 영역 (Application Layer) 비즈니스 규칙을 구현 도메인 모델과 상호 작용하여 사용자 요청을 처리 예시: 서비스 클래스, 유틸리티 클래스 등 @Transactional public void cancel(OrderNo orderNo, Canceller canceller) { Order order = orderRepository.findById(orderNo) .orElseThrow(() ->.. 2024. 4. 5.
Chapter1. 도메인 모델 시작하기 도메인 : 소프트웨어로 해결하고자 하는 문제 영역 도메인은 여러 하위 도메인으로 구성된다. 소프트웨어가 도메인의 모든 기능을 제공하지는 않는다. 도메인 모델 : 특정 도메인을 개념적으로 표현한 것 기본적으로 도메인 자체를 이해하기 위한 개념 모델 도메인 모델 패턴 사용자 인터페이스 또는 표현 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 외부 시스템일 수도 있다. 응용 사용자가 요청한 기능을 실행 도메인 시스템이 제공할 도메인 규칙을 구현 인프라스트럭처 DB 나 메시징 시스템과 같은 외부 시스템과의 연동 처리 도메인 모델 도출 모델을 구성하는 핵심 구성요소, 규칙, 기능을 찾는 것 요구사항 확인하기 엔티티와 밸류 엔티티 엔티티 객체마다 고유해서 각 엔티티는 서로 다른 식별자를 갖는다. 특정 규칙에.. 2024. 4. 5.
3장. 모든 객체의 공통 메서드 아이템10. equals는 일반 규약을 지켜 재정의하라. 언제 사용할까 ? 논리적 동치성을 확인해야 할 때 값 클래스(String, Integer 등) 등 객체가 같은지가 아니라 값이 같은지 알고 싶을 때 다음 상황 중 하나에 해당하면 재정의 하지 않는 것이 최선. 각 인스턴스가 본질적으로 고유하다. 인스턴스의 ‘논리적 동치성’ 을 검사할 일이 없다. 상위 클래스에서 재정의한 equals 가 하위 클래스에도 딱 들어맞는다. 클래스가 private 이거나 package-private 이고 equals 메서드를 호출할 일이 없다. 오버라이딩 시 고려 사항: 비교 대상 필드 모두 비교 null 체크 반사성(reflexivity): 자신과 자신을 비교했을 때 true 반환 대칭성(symmetry): a.equa.. 2024. 4. 3.
2장. 객체 생성과 파괴 아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라. 장점 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. 단점 상속을 하려면 public 이나 protected 생성자가 필요하니 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다. 정적 팩터리 메서드는 프로그래머가 찾기 어렵다. 핵심정리 정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋다. 그렇다고 하더라도 정적 팩터리를 사용하는 게 유리한 경.. 2024. 3. 30.
현재 열려있는 포트 조회 및 닫기 (macOs) iterms (터미널, 쉘) 을 이용해서 현재 사용하고 있는 PORT 를 조회할 수 있다. lsof -PiTCP -sTCP:LISTEN sudo lsof -PiTCP -sTCP:LISTEN 종료하는 방법은 PID 의 번호와 kill 명령어를 사용한다. kill -9 (PID번호) sudo kill -9 (PID번호) 2024. 3. 24.
Spring Cloud Gateway Config Error 아래와 같은 에러 발생 org.springframework.cloud.gateway.server.mvc.config.GatewayMvcPropertiesBeanDefinitionRegistrar$RouterFunctionHolder pom.xml 설정파일 org.springframework.cloud spring-cloud-starter-gateway-mvc application.yml 파일 server: port: 8000 eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://localhost:8761/eureka spring: application: name: apigatewa.. 2024. 3. 24.
Service Discovery ( + Netflix Eureka ) 해당 게시글은 아래 MSA 강의를 참고하였다. ( 섹션 1 , Service Discovery ) https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 - 인프런 Spring framework의 Spring Cloud 제품군을 이용하여 마이크로서비스 애플리케이션을 개발해 보는 과정입니다. Cloud Native Application으로써의 Spring Cloud를 어떻게 사용하는지,.. 2024. 3. 24.