Hibernate vs Spring Data JPA 스프링 진영에서는 Spring Data JPA를 개발했고 이를 권장하고 있다. 'JPA < Hibernate < Spring Data JPA' 구조로 되어 있으며 이렇게 한단계 더 감싸 놓은 이유는 크게 2가지 이다. 1. 구현첸 교체의 용이성 2. 저장소 교체의 용이성 Spring Data 하위 프로젝트들은 기본적인 CRUD 인터페이스가 똑같다. 따라서 Spring Data JPA, Spring Data Redis, Spring Data MongoDB 등등은 save(),findAll()의 인터페이스를 가지고 있기 때문에 저장소나 구현체를 변경하여도 기본적인 기능은 변경하지 않아도 된다. Entity Class 위 어노테이션 순서 Entity Clas..
결과 : 네트워크 호출 한 번으로 다중 쿼리 결과를 Mybatis Multi ResultSet으로 받아오기 이슈 : 서비스 도중 회원정보 조회가 수 십초가 걸리는 현상이 있었음다. 비록 순간 짧은 시간이었지만, 이로 인해 다른 도메인 서비스에서는 timeout으로 500에러가 발생 원인 : 회원 조회 부분에 여러 쿼리를 비동기 호출로 가져오고 있었음. 모니터링 도구로 확인해 보니 쿼리 호출 자체가 엄청 느린것을 확인할 수 있었음. db connection 하는 도중 tread가 부족하여connection 될 떄 까지 대기하고 있었음. 아무래도 비동기 호출이 2번만 이루어 지더라도 1분에 회원 조회가 10000번 호출되면 필요한 thread수는 많아 질 수 밖에 없음. 조치 : 보통 쿠버네티스 pod이 c..
개요 # 참고 모던 자바 인 액션 # 개요 모던 자바 인 액션을 읽고 다음에 대해 알아보고자 한다. * 자바8버전 이후 어떤 기능이 있는지? * 자바8버전 이후 어떤 장점이 있는지? * 자바8버전 이후 기능들을 어떻게 사용해야 하는지? * 명령형 프로그래밍과 함수형 프로그래밍은 어떤 차이가 있는지? # 1장의 로드맵 자바가 거듭 변화하는 이유 컴퓨팅 환경의 변화 자바에 부여되는 시대적 변화 요구 자바8 이후 기능의 핵심 1장. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가? 1-1. 자바8 이후를 사용해야 하는 이유 1-1-1. 가독성 자바 역사를 통틀어 가장큰 변화가 자바8에서 일어났다. 위 코드는 우리가 사과의 무게를 정렬할때 사용하는 고전적인 익명함수 이다. 반면 위에 코드는 자바8이후..
개요 # 참고 DDD START! - 최범균 지음 도메인 주도 개발 시작하기! -최범균 지음 # 개요 DDD에 대한 기술서적을 읽고 DDD가 무엇인지 이해하고 어떻게 코드에 적용시킬 수 있는지 고민해 보려고 한다. # 3장의 로드맵 애그리거트 애그리거트 루트와 역할 애그리거트와 리포지터리 ID를 이용한 애그리거트 참조 3장. 애그리거트 도메인이 커질수록 많은 엔티티와 밸류가 나타나게 되며 점점 복잡해진다. 도메인 모델이 복잡해지면 개발자는 전체가 아닌 개별 요소에 집중하는 실수가 발생할 수 있다. 우리가 지도를 볼 때 대축적을 보면 전체 위치를 파악하기 쉽듯, 어그리게잇이 대축적 지도와 비슷한 개념이다. 애그리게잇을 통해 도메인 모델의 전체 구조를 파악하는데 도움이 될 수 있다. 애그리게잇은 관련 객체를..
개요 # 참고 DDD START! - 최범균 지음 도메인 주도 개발 시작하기! -최범균 지음 # 개요 DDD에 대한 기술서적을 읽고 DDD가 무엇인지 이해하고 어떻게 코드에 적용시킬 수 있는지 고민해 보려고 한다. # 2장의 로드맵 아키텍처 DIP 도메인 영역의 주요 구성요소 인프라스트럭처 모듈 2장. 도메인 모델 시작 표현/응용/도메인/인프라스트럭처는 아키텍처를 설계할 때 나타나는 전형적인 영역이다. 2-1. 네 개의 영역 도메인 모델은 특정 도메인을 개념적으로 표현한 것이다. 모델은 도메인의 모든 내용을 담고 있지는 않지만 이 모델을 보면 큰 틀을 파악할 수 있다. # 응용 영역 응용영역은 시스템이 사용자에게 제공해야 할 기능을 구현한다 (Service계층 - "주문 등록", "주문 취소", "상품 ..
개요 # 참고 DDD START! - 최범균 지음 # 개요 DDD에 대한 기술서적을 읽고 DDD가 무엇인지 이해하고 어떻게 코드에 적용시킬 수 있는지 고민해 보려고 한다. # 11장의 로드맵 도메인 모델 엔티티와 밸류 도메인 용어 1장. 도메인 모델 시작 도메인은 소프트웨어로 해결하자 하는 문제의 영역을 의미한다. 배달의 민족에서 "배달 커머스"가 도메인에 해당한다. 이런 도메인은 다시 몇 개의 하위 도메인으로 구성될 수 있다. 하위 도메인에는 주문, 상품, 결제, 회원, 배송, 리뷰 등 다시 다양한 도메인으로 나뉘게 된다. 서비스 개발에서 모든 도메인을 직접 개발할 필요가 없다. 결제와 배송은 외부 소프트웨어를 사용해도 된다. 따라서 하위 도메인은 어떻게 구성할지 여부는 상황에 따라 달라진다. 1-1...
스프링의 3대 핵심 기술 AOP IoC/DI Pojo 스프링의 의존성 주입 방법 Spring 프레임워크의 핵심 기술 중 하나가 바로 DI(Dependency Injection, 의존성 주입)이다. Spring 프레임워크와 같은 DI 프레임워크를 이용하면 다양한 의존성 주입을 이용하는 방법이 있다 생성자 주입 필드 주입 수정자 주입 생성자 주입 (Constructor Injection) 생성자 주입 @Service public class UserServiceImpl implements UserService { private UserRepository userRepository; private MemberService memberService; @Autowired public UserServiceImpl(U..
개요 # 참고 마이크로서비스 도입 이렇게 한다. (Monolith to Microservices) # 개요 MSA에 대해 이해하고, 모놀로식 아키텍처에서 마이크로서비스 아키텍처로 마이그레이션을 하며 고려해야할 지점에 대해 고민한다. 3장. 모놀리스 분할 2장에서 마이크로서비스 아키텍처의 마이그레이션에 대해 살펴보았다. 새로운 아키텍처를 출시하고 올바른 방향으로 나아가기 위해 무엇을 해야 할지 알아보았다. 좋은 서비스란, 서비스가 작아질수록 왜 우리에게 더 유리한지도 살펴보았다. 이런 패턴을 따르지 않는 수많은 애플리케이션이 이미 존재할지도 모른다는 사실을 어떻게 해석해야 할까? 어떻게 하면 완전히 새로 고쳐 쓰는 작업에 차구하지 않고도 모놀리스 애플리케이션을 분해할 수 있을까? 3장에서는 다양한 마이그레..