[Spring] Library 살펴보기 및 스프링 환경설정
·
JVM/Spring
주요 Library 목록 HikariCPDB Connection Pool Library slf4j인터페이스 모음으로 요새 대세.라이브러리 설정만 바꾸면 구현되있는 로거를 바꿀 수 있는 애 ThymeleafWeb View 단   build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' // 개발 편의성을 위한 툴, reloading 에 유리 imp..
[Spring] Bean Scope
·
JVM/Spring
빈 스코프는 빈이 존재할 수 있는 범위를 말한다. Spring Scope 구분 설명 실행 순서 싱글톤 기본 스코프, 스프링 컨테이너 시작-종료까지 유지되는 가장 넓은 범위 스코프 스프링 컨테이너 생성 시점에 Bean 생성, DI 및 초기화 메소드 실행 프로토타입 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 Bean 을 조회할 때 생성되고 초기화 메소드도 실행됨. 90% 이상은 싱글톤, 간혹 프로토타입 스코프를 사용한다. 왠만하면 다 싱글톤으로 해결하라. 웹 관련 스코프 구분 설명 Request 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 Session 세션이 생성되고 종료될 때까지 유지되는 스코프 Application 웹의 서블릿 컨텍스트 같은 범위..
[Spring] 빈 생명주기 콜백
·
JVM/Spring
Conclusion @Postonstruct, @PreDestory annotation 으로 콜백메소드를 지정하라. 외부 라이브러리 콜백 메소드 지정이 필요할 때만 @Bean 메소드 지정 방식을 사용하라. Why to use? 애플리케이션을 개발하다보면 초기에 DB 커넥션 풀이나 Socket 등 을 미리 열어두는 것이 필요할 수 있다. 반대로 이렇게 연결을 유지하는 객체들은 애플리케이션 종료시 안전하게 연결 해제 (혹은 반납)을 해줄 필요가 있다. 이를 'release' 혹은 'close' 라 하는데, Spring은 이 동작을 안정적이고 편하게 할 수 있는 매커니즘을 제공한다. 스프링 빈은 객체 생성 -> 의존 관계 주입 초기화 작업은 의존관계 주입 '후'에 되야한다. 이 "의존 관계 주입 완료" 시점을..
[Spring] Autowired 사용시 주의 (Feat. Custom Annotation)
·
JVM/Spring
한 타입(Interface)에 대해 여러 Bean 이 등록되어 있으면 어떻게 해결할 것인가? Autowired 동작 순서 Type Matching Type Matching 결과가 2개 이상인 경우 필드명이나 파라미터 명으로 빈 이름 매칭. public class OrderServiceImpl implements OrderService{ // 구현체가 아닌 Interface (역할) 에만 의존해야한다. => DIP 원칙 준수 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // Type Matching 시도 // 타입 매칭 결과가 2개 이상인 경우 필드명 혹은 파라미터..
[Spring] Component Scan, DI autowired
·
JVM/Spring
When to use component scan? 코드레벨에서 설정 정보가 없어도 자동으로 스프링 빈을 자동 등록하려 할 때 How to use? class 어노테이션으로 '@Component' 혹은 그 자식 어노테이션을 붙여준다. 이때, 생성자에는 '@Autowired' 등으로 자동으로 DI가 일어날 수 있도록 매핑해주는 것이 좋다. @Component public class RateDiscountPolicy implements DiscountPolicy { private final int discountPercent = 10; // .. 생략 } 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. (PascalCase -> camelCase) 빈 이름 직접 지정시 @Compo..
[Kotlin] Priority Queue
·
JVM/Kotlin
언제 사용하나? 가장 큰 값이나 가장 작은 값을 빠르게 찾아내도록 만들어진 자료규조. 자료구조는? Priority Heap == Heap + Complete Binary Tree Binary Search Tree 와 달리 중복을 허용하고 같은 레벨의 노드간에는 정렬 되있지 않은 느슨한 정렬 상태를 유지한다. 주요 연산 및 시간 복잡도 Operation Time Complexity Insert (add) O (log N) Find (contains) O (N) Find2 (peek) O (1) Delete (poll, remove) O (log N) Delete2 (remove(element)) O (N) Binary Tree 인데 왜 Find 에 O(N) 이 걸리나? PriorityQueue.contai..