[정리] 기능별 개념 정리/스프링 부트(18)
-
스프링 AOP, Transaction
AOP를 구현하는 방법 방법 1. AspectJ 의 컴파일러 이용하기 MyClass.java -> (AOP) -> MyClass.class MyClass.class 는 원하는 코드가 주입되서 변형된 파일이다. 방법 2. AspectJ 의 바이트 코드를 조작 할 수 있는 class loader 사용하기 MyClass.java -> MyClass.class MyClass.class -> (클래스로더) -> Memory MyClass.class를 메모리에 올려서 실행할때 자바 클래스 로더가 사용될 것이다. 이때 AspectJ 를 이용하면 MyClass.class에 바이트코드를 조작해서 원하는 코드를 주입하고 메모리에 올릴수있다. 방법 3. 프록시 패턴 이용하기 @Transactional은 스프링 AOP를 이용..
2019.04.21 -
Spring boot's NoSQL
Spring Data에서 지원하는 NoSQL -> Redis, MongoDB, Neo4J, Elasticsearch, Redis, Cassandra ... -> 이러한 다양한 기술을 사용할 때 지정해야하는 Bean 설정들을 스프링 부트가 알아서 해준다. 아래 예제들은 localhost에 연결한다고 가정한다. localhost에 연결할 때는 딱히 큰 설정이 필요없는 경우가 많다. 각 spring boot starter 에서 제공하는 Repository 인터페이스는 JPA 와 공통의 infrastructure를 공유한다. Spring boot starter 의존성외의 기타 다른 메이븐 의존성을 추가해야하는게 있을 수 있으니 상세한 사용법은 아래 Baedlung Document를 참조하자. Redis Redi..
2019.04.21 -
Spring boot's RestTemplate, WebClient
Spring 에서 Remote REST Service를 호출 할 일이 있을 때 사용한다. RestTemplate instance 는 보통 사용하기 전에 Customizing을한다. RestTemplate 을 customizing 하는 대표적인 3가지 방법 방법 1. RestTemplateBuilder 사용하기 restTemplate = restTemplateBuilder.build(); 방법 2. RestTemplateCustomizer 만들어 사용하기 -> RestTemplate을 Customize 하면 자동으로 RestTemplateBuilder에 추가된다. static class ProxyCustomizer implements RestTemplateCustomizer { @Override publi..
2019.04.21 -
Bean Singleton or Prototype
* Elasticsearch 의 RestHighLevelClient는 Thread safe 하지 않다. * Elasticsearch 의 RestHighLevelClient는 사용하고 나면 close() 메소드를 호출해줘야 안전하다. @Bean public RestHighLevelClient restHighLevelClient(){ return new RestHighLevelClient(RestClient.builder(new HttpHost(host,port,"http"))); } Bean 은 기본적으로 싱글톤이기 때문에 Thread safe 하지 못한 클래스는 등록하면 안된다. 더불어 RestHighLevelClient는 사용하고 나면 close를 해줘야하기 때문에 일반 Bean으로 적합하지 못하다. ..
2019.04.18 -
스프링 부트 - Shedlock
클러스터 환경에서 @Scheduled 한번만 띄우기 공식 : https://github.com/lukas-krecan/ShedLock 참조 : https://www.baeldung.com/shedlock-spring ShedLock 특징 1. [아파치 2.0 라이센스] 이다. 2. 클러스터 환경에서 하나의 노드만 스케줄링을 실행하도록 도와준다. 3. Annotation 방식으로 문제를 해결한다. Quartz 를 대신할 수 있는 괜찮은 대안. Quartz 보다 가볍다. Quartz 는 클러스터 안의 서버 노드들 중 스케줄링을 수행할 서버를 Quartz 가 고르고 방식이다. 반면 Shedlock 의 동작 방식은 다르다. Shedlock에서는 모든 서버 노드들이 Scheduling을 수행하려고 시도한다. 각 ..
2019.04.09 -
스프링 부트 개발환경 로컬환경 분리
application.yml 에 profile을 dev와 local 로 분할 spring: profiles: development ... --- spring: profiles: local ... 로컬환경으로 돌리고 싶을 경우 Run - Edit configurations -> Configuration ->VM options 에 -Dspring.profiles.active=local 추가 참고 : https://stackoverflow.com/questions/39738901/how-do-i-activate-a-spring-boot-profile-when-running-from-intellij
2019.04.04