Spring 3

소규모 팀에서의 Spring 사용법 (패키지 구조, 테스트 코드를 중심으로)

들어가며 스타트업에서 3년 가량 스프링을 사용해오면서 여러 패키지 구조를 검토하고 사용해봤다. 참고로 이 글은 내가 3년차나 되니까 이렇게 설계하는게 좋으니까 그렇게 해야돼! 이런 글이 절대로 아니다. 지극히 주관적으로 생각했을때 이 구조가 좋더라는 내 생각을 작성한 글이다. 계층형 구조 스프링을 처음 접하면 일반적으로 많이 사용하게 되는 구조다. 스프링 입문 인터넷 강의, 서적 등에서 많이 언급되는 구조다. 계층형 구조의 장점은, 파악하기 쉽다는 것이다. 너무나 익숙하니까... 당연하다. 단점은 카테고리 (패키지)가 적기 때문에 클래스가 많아질 수록 개발 해야 될 클래스를 찾기 어렵다. 도메인형 구조 계층형 구조보다 더 나은 구조 없나?.. 둘러보다 사용해본 구조다. 각각의 도메인 (coupon, me..

서버 2023.07.03

DB Connection Pool에 대해서

커넥션 풀이란? 데이터베이스와 연결된 커넥션을 미리 만들어서 저장해두고 있다가 필요할 때 저장된 공간(pool)에서 가져다 쓰고 반환하는 기법 커넥션 풀 확인하는 방법 Mysql command $ show processlists; 스프링에서 커넥션풀(HikariCP)에 대한 로그 확인하는법 (application.yml) logging: level: com.zaxxer.hikari.HikariConfig: DEBUG com.zaxxer.hikari: TRACE 왜 커넥션 풀이 필요할까? 음식점에 손님이 몰려오기전에 미리 음식을 준비 해놓는것과 비슷하다. 커넥션을 생성하는 비용이 사용자의 요청을 처리하는데 상당한 비용이 들기 때문에 미리 커넥션(음식)을 준비해 두는것이다. 물론 손님이 많이 없으면 필요없다..

디비 2022.09.03

JPA Entity에 기본 생성자가 필요한 이유

entity 클래스를 선언할때 습관적으로 @NoArgsConstructor 어노테이션을 명시한다. 이유는 해당 클래스가 Lazy loading에 의해 프록시 객체가 될 필요가 있는 경우, Java Reflection API를 사용해서 객체를 생성해야 하기 때문이다. 그런데 Java Reflection API는 생성자의 인자를 받아와서 객체를 생성할 수 없기 때문에 기본 생성자가 필요하게 된다. 또한 일반적으로 기본 생성자의 접근 제어자를 protected로 놓는 경우가 있는데 이는 개발자 본인, 또는 다른 개발자가 해당 엔티티의 스펙에 맞지 않게 객체를 생성할 우려가 있기 때문이 이를 방지하기 위해서다.

자바 2022.01.30