본문 바로가기

Back-end75

도메인 주도 개발 - 도메인서비스 도메인서비스  도메인 서비스 객체를 애그리거트에 주입하지 않기public class Order { @Authwired private DiscountService discountService; ..} Service 필드는 데이터 자체와는 관련이 없다. 저장 대상도 아니다.일부 기능만 필요로 하기 때문에 굳이 의존 주입을 할 이유는 없다. public class Order{ public void calculate(DiscountService discountService, .. ) { .... }} public class OrderService { private DiscountService discountService; private Order crea.. 2024. 5. 15.
도메인 주도 개발 - 이벤트 이벤트과거에 벌어진 어떤 것을 의미   시스템 간 강결합 문제public void 최소() { 주문취소 환불 (외부 환불 처리 서비스 이용)}외부 서비스의 성능에 영향을 받는 문제 도메인 객체에 서로 다른 도메인 로직이 섞이는 문제 강한 결합을 없앨 수 있는 방법은 이벤트를 사용하는 것특히 비동기 이벤트를 사용하면 두 시스템 간의 결합을 크게 낮출 수 있다.  이벤트 구성요소이벤트 생성 주체 -> 이벤트 퍼블리셔 -> 이벤트 핸들러 이벤트 용도1. 트리거: 도메인의 상태가 바뀔 때 다른 후처리가 필요하면 후처리를 실행하기 위한 트리거로 이벤트를 사용할 수 있다.2. 서로 다른 시스템 간의 데이터 동기화  이벤트 장점1. 서로 다른 도메인 로직이 섞이는 것을 방지2. 기능 확장에 용이  .. 2024. 5. 15.
내부망 프로젝트 - SAP HANA DB & Spring Boot DataBase 를 SAP HANA DB로 이관하면서 HANA DB 실습과 스프링 부트 연동을 했던 과정을 전체는 못담았지만 일부 기록을 남기려고 합니다. 1. HANA DB 실습 VMware 설치 VMware 다운로드 및 설치 방법(feat. VMware Workstation 무료 설치) HANA DB 관련 [무료 SAP HANA 설치하기] 01. 설치 파일 다운로드 및 vmware 준비 [무료 SAP HANA 설치하기] 03. HANA Studio 설치하기 HANA 멀티테넌트 DB - 3. 접속포트 이클립스 설치 하나 스튜디오를 사용하기 위해 이클립스를 활용합니다. HANA Studio Plug-in 설치 이클립스 실행 후 상단 메뉴 Help > Install New Software https://t.. 2024. 1. 10.
스프링부트 API JPA 최적화 페치조인, 페이징 default_batch_fetch_size 페치조인, 페이징 1. 페이징 엔티티 조회 * 선호하는 방법 중 하나 @GetMapping("/api/v3-1/orders") public ResponseEntity orderV3_page( @RequestParam(value = "offset", defaultValue = "0") String offset, @RequestParam(value = "limit", defaultValue = "100") String limit ) { // N 만큼 데이터 나옴 List orders = repository.findAllWithMemberDelivery(offset, limit); // ToOne 관계이기 때문에 페이징 가능 List result = orders.stream() .map(o -> new Ord.. 2023. 12. 23.
스프링부트 API JPA 최적화 (N+1) 컬렉션 조회 최적화, DTO 조회 성능 향상 컬렉션 조회 최적화 1. 엔티티 조회 - 페치 조인으로 쿼리 수 최적화 OrderApiController /** * 페치 조인 */ @GetMapping("/api/v3/orders") public ResponseEntity orderV3() { // N 만큼 데이터 나옴 List orders = repository.findAllWithItem(); List result = orders.stream() .map(o -> new OrderDto(o)) .toList(); return ResponseEntity.ok(new Result(result)); } Order 엔티티 객체로 쿼리 결과를 받아서 Dto 로 변환작업을 한다음 반환 OrderRepository findAllWithItem() public .. 2023. 12. 21.
스프링부트 API JPA 최적화 ToOne 관계 (N+1 문제) , 페치 조인 ToOne 관계 (N+1 문제) , 페치 조인 지연 로딩과 조회 성능 최적화 주문(Order) 내의 ToOne 관계인 member, delivery 지연로딩 조회 Entity @Table(name = "orders") @Getter @Setter public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; // = new ProxyMember()를 생성해서(하이버네이트에서) 넣어둔다. // =.. 2023. 12. 19.
내부망 프로젝트 - Offline 에서 Spring Boot 개발 Maven 레포지토리 새로운 프로젝트에 투입하게 되었습니다. 그래서 요구사항 정의부터 시작하게 되어 23년 12월 말까지 진행하는 프로젝트 입니다. 이번 프로젝트는 보안이 중요한 국가(기관)에서 하는 프로젝트이기 때문에 내부망(폐쇄망)에서 접속가능한 웹포털을 개발하는 프로젝트입니다. 내부망 프로젝트는 처음이라 내부망 환경에서 어떻게 웹포털 프로젝트를 진행하게 되는지 기록하려고 합니다. 내부망 포털, 공유 디스크 등을 사용하려면 해당 담당자 분이 PC에 각종 보안 프로그램을 설치하여 외부망을 쓰지 못하도록 설정하게 됩니다. 그래서 내부망 PC로 전환전에 기존 다른 프로젝트를 실행시켜 메이븐/Gradle repository 파일들을 받아 오거나 프로젝트에 필요한 의존성 파일들을 최대한 받아옵니다. 뿐만 아니라 office, 한글.. 2023. 10. 15.
Spring Cloud (MSA) - 모니터링 (Actuator, Prometheus, Grafana) 개요 배포를 한 뒤에 내가 내가 배포한 서버가 잘 동작하는지 어떻게 동작하고 있는지 서버의 상태를 확인할 수가 없었습니다. 그래서 모니터링하는 기술들이 있었는데 적용해본 기술들은 다음과 같습니다,. Spring Actuator Prometheus Grafana 그라파나를 사용하기 위해서는 프로메테우스의 정보가 필요하고 프로메테우스를 사용하기 위해서는 /actuator/prometheus 와 같이 연결이 필요했습니다. 그래서 Spring Actuator, Prometheus, Grafana 순으로 적용시켜보았습니다. 환경 Win11 Spring boot 2.7.8 Docker Engine v20.10.21 Spring Actuator implementation 'org.springframework.boot.. 2023. 2. 16.
Spring Cloud (MSA) - 스프링부트 도커 이미지 생성 후 컨테이너 실행 도커 이미지 생성 예시1) 윈도우에서 테스트없이 빌드 : ./gradlew clean build -x test 이미지 생성 $ docker build -t llsrrll96/timedeal:timedeal-0.0.1-SNAPSHOT . 생성이 안될 경우 참고 윈도우에서 테스트없이 빌드 : ./gradlew clean build -x test 빌드를 해서 .jar 파일 생성 예시2) docker build -t docker.io/in28min/mmv2-currency-exchange-service:0.0.1-SNAPSHOT . 예시3) $ docker build -t chat:chat-0.0.1-SNAPSHOT . {이미지이름}:TAG 이미지 확인 docker images 또는 Docker Desktop .. 2023. 2. 1.
도커 설치 이미지 컨테이너 명령어 도커 설치 [Docker] Windows 도커 설치 Windows와 Docker 이번 글에서는 Windows 도커 설치하는 내용을 다룬다. Docker는 리눅스를 기반으로 하기 때문에 리눅스 운영체제 위에서 돌아가야한다. Linux 계열 이외의 운영체제에서 도커를 사용하 myjamong.tistory.com [Windows 10] Docker 설치 완벽 가이드(Home 포함) - LainyZine [Windows 10] Docker 설치 완벽 가이드(Home 포함) Docker는 경량 가상화 기술인 리눅스 컨테이너 도구입니다. Windows 10 Home과 Pro에서도 몇 가지 설정을 통해 Docker Desktop으로 리눅스 컨테이너를 사용할 수 있습니다. 이 글에서는 Windows 10에서 Docke.. 2023. 1. 16.
GitHub 깃허브 프로젝트 마일스톤 이슈 등록 GitHub 깃허브 프로젝트 마일스톤 이슈 등록 개인프로젝트 뿐만아니라 팀프로젝트를 할 때 깃허브를 활용하는 것이 필수입니다. 깃허브를 통해 다른 분들이 관리해 놓은 레포지토리를 보다보면 Projects 기능을 통해 프로젝트 진행을 관리하고 이슈를 통해 프로젝트 중 발생한 문제들을 해결해 나가는 것을 보았습니다. 그래서 앞으로 있을 협업 프로젝트를 위해 이슈 등록과 이슈를 해결해 나가는 연습을 해볼 것입니다. 기본적으로 깃허브 레포지토리가 있는 상태에서 시작합니다! 1. 프로젝트 생성 보드 형태의 프로젝트를 생성합니다. 2. 마일스톤 생성 (Opt) 프로젝트에서 마일스톤은 완성되기 까지의 중간 단계, 특정 지점, 이정표라고 생각하면 됩니다. 각 단계의 마일스톤을 언제까지 완성키겠다고 하는 상세일정을 정하.. 2022. 12. 31.
Spring Cloud (MSA) 분산추적 , Zipkin 분산 추적 Distributed Tracing - 각각의 요청에 Unique Id 할당 - 시간 데이터를 모아 시간 지연 문제 해결 집킨 사용 Open Zipkin 은 MSA 에서 성능 문제를 확인할 수 있는 매우 편리한 도구 - 트랜잭션의 소요 시간을 그래픽으로 확인 가능 - 호출에 관련된 각 마이크로서비스별로 소요된 시간 분석 가능 이미지 생성, 컨테이너 생성 openzipkin/zipkin Tags | Docker Hub docker run -p 9411:9411 openzipkin/zipkin:2.23 의존성 추가 currency-conversion-service, currency-exchange-service, api-gateway 서버 org.springframework.cloud spring.. 2022. 12. 30.