들어가기 앞서 오늘은 DB의 connection pool에 대해 공부해 볼 예정입니다. 아래 영상 함께 참고해 주시면 감사하겠습니다. https://www.youtube.com/watch?v=zowzVqx3MQ4&t=661sDB Connection Pool 란?일반적으로 서버에서 데이터베이스에 요청을 하게 되면, Connection을 맺게 됩니다. 이러한 Connection을 맺는 과정에서 서버와 데이터베이스는 TCP 통신을 기반으로 네트워크 통신을 하게 됩니다. (TCP 통신은 높은 신뢰성으로 송수신이 가능!) 하지만 connection을 맺는 과정은 생각보다 오래 걸립니다. connection 생성을 위해서는 3-way handshake, connection 제거를 위해서는 4-way handsha..
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..