springboot
Spring Boot JPA 1차 캐시 정리
Spring Boot JPA 1차 캐시 정리
2022.12.21개요 우리는 JPA를 사용하며, 어떠한 이점을 누릴 수 있는지에 대한 질문을 받는다면, 1차 캐시를 빼고 말하기 어렵습니다. "1차 캐시가 어떻게 동작하는데??"라고 질문받는다면, "영속성 콘텍스트에 보관되고, 사용하면 돼!"라고만 답하는 사람이 있을 겁니다.. (저 역시도 얼마 전까지는..) 하지만 일을 하다 보니 느끼는 것이 어떻게 사용하는 것이 아닌 왜 사용하고, 어떻게 적용 돼 사이드 이펙트가 있을 것인지에 대해서 집중하게 됐습니다. 그래서 1차 캐시가 어떻게 동작하는지에 대해서 알아보겠습니다. (1차 캐시를 날리는 @Modfiying clearAutomatically를 사용하며, 부족함을 느끼게 돼 정리하게 됐습니다.) 1차 캐시란? 우선 동작을 알아보기 전에 1차 캐시가 무엇인지 알아보겠습니다..
Spring JPA @OneToOne N+1 문제 (Fetch = Lazy)
Spring JPA @OneToOne N+1 문제 (Fetch = Lazy)
2022.11.29N+1 문제란? 어떠한 값을 얻기 위해 JPA를 이용하여 1개의 쿼리를 사용하는 것을 의도했지만, 개발자의 의도와는 다르게 N개의 쿼리가 더발생하는 문제입니다. JPA를 공부한 적이 있는 사람이라면, @xxxToOne(fetch = FetchType.EAGER)로 설정돼 있는 것들을 @xxxToOne(fetch = FetchType.LAZY)로 설정하면 된다는 것을 들어보셨을 수도 있습니다. 저 역시도 이렇게 알고 있었지만, 프로젝트를 진행하며 겪은 N+1 문제를 살펴보겠습니다. 테이블 Parent와 Child가 1:1 관계를 가졌을 때 문제가 발생하므로 해당 케이스만 살펴보겠습니다. 여기서 연관관계의 주인은 Child로 설정하겠습니다. Parent @Entity @NoArgsConstructor(acc..
SpringBoot [스프링부트] 시작하기(1) 프로젝트 생성
SpringBoot [스프링부트] 시작하기(1) 프로젝트 생성
2022.01.14Intellij 울티메이티 버전에서 진행했습니다. 1. File -> New -> Project 클릭하고 아래와 같이 설정합니다. 2. 아래와 같이 설정을 변경해줍니다. 3. 프로젝트에 사용될 dependency를 추가해줍니다. 4. 프로젝트를 생성할 곳을 지정한 후 Finish를 눌러 생성합니다. 라이브러리 다운로드에 약간의 시간이 걸립니다. 5. 원할한 동작이 되는지 Application을 실행합니다. 6. SpringBoot의 기본 port는 8080이므로 http://www.localhost:8080를 인터넷 URL에 입력한 후 아래와 같이 화면이 뜬다면 잘 동작하는 것 입니다. 7. application.properties를 삭제하고 application.yml을 작성합니다. spring: da..
SpringBoot는 싱글톤인데 어떻게 다중 요청을 처리할까??
SpringBoot는 싱글톤인데 어떻게 다중 요청을 처리할까??
2021.12.31SpringBoot를 학습한 지 얼마 되지 않았을 때 생긴 궁금점이었습니다. Spring은 Bean 객체를 싱글톤으로 관리하는데 어떻게 다중 요청을 처리하는지에 대하여 궁금증이 생겼습니다. Thread에 관한 지식이 있었다면 쉽게 해결 가능했습니다. Thread부터 하나씩 알아보겠습니다. 1. Thread란? ▶ 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다. 여러 개의 Thread를 가지는 프로세스를 멀티 스레드 프로세스라고 합니다. 이해를 돕기 위해 코드로 보겠습니다. class Example extends Thread { int num; public Example(int num) { this.num = num; } public void run() { System.out.p..
spring 컨테이너와 bean 개념
spring 컨테이너와 bean 개념
2021.12.301. Spring Container란? ▶ Spring Container는 java 객체의 life cycle를 관리하고, 생성된 객체들에게 추가적인 기능을 제공합니다. Spring Container에서 관리하는 객체를 Bean라고 부릅니다. bean에는 IoC, DI가 적용됩니다. 1-1. BeanFactory와 ApplicationContext ▶ BeanFactory와 ApplicationContext 모두 Spring Container입니다. 아래와 같이 구성됩니다. ▶ BeanFactory는 bean을 생성, 등록, 조회 등등 빈을 관리하는 역할을 합니다. BeanFactory.getBean(빈 이름, 반환형)을 통해 인스턴스화 할 수 있습니다. @SpringBootTest public clas..
Springboot 프로젝트 생성
Springboot 프로젝트 생성
2021.12.30Intellij를 통해 springboot 프로젝트를 바로 생성해보겠습니다. 아래의 이미지 순서대로 따라와주시면 됩니다. 1. File -> new -> Project... 2. SpringInitailizr -> Next 3. group, Artifact 본인이 원하는대로 작성해줍니다. java 11을 활용한 gradle 프로젝트로 만듭니다. 4. Web -> spring web 체크 5. 프로젝트 위치를 설정해줍니다. 6. 프로젝트 생성하는데 시간이 걸릴 수 있으니 기다려주시고 아래와 같이 뜨면 프로젝트가 생성된 것입니다. 7. 프로젝트를 실행해보겠습니다. ( 둘중에 하나를 실행시키면 됩니다. ) 8. spring 프로젝트의 기본 port는 8080이므로 localhost:8080을 주소창에 입력해고..