HikariCP는 고성능의 JDBC 커넥션 풀 라이브러리이다. SpringBoot는 커넥션 풀 관리를 위해 HikariCP를 사용한다. 이와 관련된 설정 옵션으로 아래 출처 링크를 참고하면 좋다. 참고 및 출처 https://effectivesquid.tistory.com/entry/HikariCP-%EC%84%B8%ED%8C%85%EC%8B%...
[JPA] Connection 누수
사용한 커넥션을 커넥션풀로 다시 반환하지 못하게 되는 현상을 커넥션 누수라 한다. 아래 출처를 통해 다양한 포스팅들을 참고하면 이를 이해하기 쉬울 것이다. 특히! Hibernate 멀티테넌시를 사용한다면 더욱 주의가 필요할 것이다 :) 참고 및 출처 https://velog.io/@rnjsrntkd95/Hikari-CP-%EC%BB%A4%EB%...
[이펙티브자바] 아이템31-한정적 와일드카드를 사용해 API 유연성을 높이라
이전 아이템28에서 이야기했듯 매개변수화 타입은 불공변(invariant)이다. 이를 꼭 기억하자. 즉 서로 다른 타입 Type1과 Type2가 있을 때 List<Type1>은 List<Type2>의 하위 타입도 상위 타입도 아니다. 예를 들어 List<Object>에는 어떤 객체든 ...
[이펙티브자바] 아이템30-이왕이면 제네릭 메서드로 만들자
로 타입으로 이루어진 메서드를 제네릭을 사용하여 변환 아래 예제 코드를 보자. // 코드 30-2 제네릭 메서드 (177쪽) public static Set union(Set s1, Set s2) { Set result = new HashSet<>(s1); result.addAll(s2); return result;...
[이펙티브자바] 아이템29-이왕이면 제네릭 타입으로 만들라
클라이언트에서 직접 형변환해야 하는 타입보단 제네릭 타입이 더 안전하고 쓰기 편하다. 클라이언트에서 불필요한 형변환 없음 훨씬 더 안정적으로 타입을 관리할 수 있다. (런타임 에러가 발생할 확률을 줄일 수 있다.) 사실 제네릭 타입 안에서 리스트를 사욯아는게 항상 가능하지도, 꼭 더 좋은 거도 아니다. 자바가 리스트를 기본 타입으로 ...
[이펙티브자바] 아이템28-배열보다는 리스트를 사용하라
배열과 제네릭 타입의 중요한 두 가지 차이 1) 배열은 공변(covariant)이다. 어려워보이지만 뜻은 간단하다. Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다.(공변, 즉 함께 변한다는 뜻이다) 반면 제네릭은 불공변(invariant)이다. 즉, 서로 다른 타입 Type1과 Type2가...
[이펙티브자바] 아이템27-비검사 경고를 제거하라
할 수 있는 한 모든 비검사 경고를 제거하라. 모두 제거한다면 그 코드는 타입 안정성이 보장된다. 즉, 런타임에 ClassCastException이 발생할 일이 없고, 개발자가 의도한 대로 잘 동작하리라 확신할 수 있다. 경고를 제거할 순 없지만 타입 안전하다고 확신할 수 있다면 @SupressWarnins(“unchecked”) 애너테이...
[이펙티브자바] 아이템26-로 타입은 사용하지 말라
로 타입 로 타입이란 제네릭 타입 매개변수를 전혀 사용하지 않을 때를 말한다. 예컨대 List<E> 의 로 타입은 List다. 로 타입(타입 매개변수가 없는 제네릭 타입)을 쓰는 걸 언어 차원에서 막아 놓진 않았지만 절대로 써선 안된다. 로 타입을 쓰면 제네릭을 안겨주는 안정성과...
[이펙티브자바] 아이템25-톱레벨 클래스는 한 파일에 하나만 담으라
소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 문제 없이 컴파일 한다. 하지만 심각한 위험을 감수해야 하는 행위다. 이렇게 하면 한 클래스를 여러 가지로 정의할 수 잇으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하느냐에 따라 달라지기 때문이다. public cla...
[이펙티브자바] 아이템24-멤버 클래스는 되도록 static으로 만들어라
중첩 클래스 중첩 클래스에는 정적 멤버 클래스, (비정적) 멤버 클래스, 익명 클래스, 지역 클래스 이렇게 네 가지 종류가 있다. 정적(static) 멤버 클래스 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근할 수 있다는 점만 제외하곤 일반 클래스와 똑같다. 정적 멤버 클래스는 다른 정적 멤버와 똑같은 접근 ...