들어가기 전 CascadeType.ALL은 생애주기를 함께 하는 엔티티를 다루는데 있어서는 좋은 도구가 될 수 있다. 그렇지만 CascadeType.ALL을 사용할 때 발생할 수 있는 문제점은 잘 파악해야 필요한 위치에 사용할 수 있게 될 것 같다. Cascade.ALL 동작 방식 CascadeType.ALL은 부모 엔티티의 영속화 상태가 변할 때, 그 변화가 자식 엔티티에도 고스란히 전파되는 것을 의미한다. 예를 들어 아래 코드에서는 다음과 같이 동작하는 것을 상상해 볼 수 있다. Team을 영속성 컨텍스트에 영속화 한다 → Team과 연관된 Member들도 모두 영속화 된다. Team이 영속성 컨텍스트에서 삭제된다 → Team과 연관된 Member들도 영속성 컨텍스트에서 삭제된다. @Entity @G..
들어가기 전 이 글은 김영한님의 인프런 강의를 복습하며 작성한 글입니다. 외부 설정이란? 하나의 어플리케이션을 여러 환경에서 사용해야 할 때가 있음. (개발, Beta, Release, Rc Phase 등) 각 환경마다 서로 다른 설정값을 사용해야하는 경우가 많음 어떻게 이 문제를 해결할 수 있을까? 가장 단순한 방법 : 각각의 환경에 맞게 어플리케이션을 빌드. 이 방법은 좋은 방법이 아님. 환경에 따라 빌드를 여러 번 해야함. (빌드 결과물이 다름. A-beta.jar, A-rc.jar ) 이 경우, 개발 환경에서 검증이 다 되었다고 생각할 수 있지만 A-rc.jar는 새로운 아티팩트이기 때문에 개발과 똑같이 동작하지 않을 수도 있음. 즉, 유연성이 떨어지는 방법 주로 사용하는 방법 : 빌드는 한번만 ..
스프링 부트의 AutoConfiguration 스프링 부트는 사용하는 라이브러리 중 필요한 빈을 자동으로 스프링 컨테이너에 등록해주는 AutoConfiguration 기능윽 제공함. 스프링 부트는 spring-boot-autoconfigure 라이브러리를 이용해 AutoConfiguration으로 등록이 필요한 스프링 빈 정보들을 모아둔다. @AutoConfiguration // AutoConfigurationImportSelector.class protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List configurations = ImportCandidates.l..
자동 구성 이해1 - 스프링 부트의 동작 스프링 부트는 다음 경로에 있는 파일을 읽어서 스프링 부트 자동 구성으로 사용한다. resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 직접 만든 memory-v2 라이브러리와 spring-boot-autoconfigure 라이브러리의 위 파일을 살펴보면 스프링 부트의 자동 구성을 확인할 수 있다. // spring-boot-autoconfigure의 org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일 org.springframework.boot.autoconfigure.admin.Sp..
자동 구성 직접 만들기 - 기반 예제 자동 구성에 대해서 자세히 알아보기 위해 간단한 예제를 만들어보자. 실시간으로 자바의 메모리 사용량을 웹으로 확인할 수 있는 기능을 제공함. @Getter public class Memory { private Long used; private Long max; public Memory(Long used, Long max) { this.used = used; this.max = max; } @Override public String toString() { return "Memory{" + "used=" + used + ", max=" + max + '}'; } } @Slf4j public class MemoryFinder { public Memory get() { lo..