JPA에서 엔티티를 변경하기 위해서 변경감지와 병합이라는 기능을 사용하는데, 이번 포스팅에서는 이 변경감지와 병합을 어떻게 사용하는지 알아보도록 하겠다. 변경감지와 병합을 알기 앞서 우선 준영속 엔티티가 무엇인지 이해할 필요가 있다. 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 임의로 만들어낸 엔티티도 기존에 DB에 한번 저장되어 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다. 이러한 준영속 엔티티를 수정할 때 변경 감지와 병합이 사용된다. 그럼 이제 변경감지와 병합에 대해 알아보도록하자. 준영속 엔티티 수정 방법 변경 감지(dirty checking) 사용 병합(merge) 사용 변경 감지 (Dirty Checking) @Transactional void update(It..
전체 글
코드를 작성하보면 여러줄의 코드를 한꺼번에 변경할 순 없을까? 싶은 순간이 많을 것이다. 이를 위해 인텔리제이에서는 여러 줄을 편집할 수 있는 기능을 제공한다. 위와 같이 다중 커서를 만드는 방법은 다음과 같다. (window / mac) Alt + Shift + 마우스 클릭 Ctrl, Ctrl(누른 상태로) + Up/Down (mac : Option) 마우스 휠을 클릭한 채 드래그 Alt + J (mac: Ctrl + G / Ctrl+Option+G) 단축키를 사용하니 아주 속 시원하다 😇 Reference 여러 줄을 편집하는 IntelliJ IDEA 방법 동일한 단어를 Multi-line으로 블록하는 방법
엔티티에는 가급적 Setter를 사용하지 말자. Setter가 모두 열려 있다면, 변경 포인트가 많아 유지보수가 어렵다. ⭐ 모든 연관관계는 반드시 지연로딩으로 설정해라. 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기가 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 따라서 실무에서는 모든 연관관계를 지연로딩(LAZY)으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 한다면, fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해줘야 한다. (@XToMany 관계는 기본이 지연로딩이므로 설정해줄 필요 없음) @ManyToOne(fetch = Fe..
H2 데이터베이스란? H2 데이터베이스는 개발이나 테스트 용도로 가볍고 편리한 데이터 베이스이다. 웹 화면을 제공한다. H2 설치 및 실행하기 설치하기 https://www.h2database.com (최근에 나온 버전을 설치하면 일부 기능이 정상 동작하지 않을 수 있어 1.4.200버전 설치를 권장) 실행하기 (bin 폴더 위치에서) 윈도우 : h2.bat 맥 : ./h2.sh 데이터베이스 파일 생성하기 jdbc:h2:~/[파일명] (이 과정은 최초 한번만!) 파일 생성 확인 홈 디렉토리(User\사용자이름)에서 ls ~arlth /test.mv.db 파일 있는지 확인 접속하기 jdbc:h2:tcp://localhost/~/[파일명] db 파일이 생성된 것을 확인한 이후에는 tcp를 통해 네트워크 모드..

본 포스팅은 인프런 - 스프링 MVC 2편을 강의를 바탕으로 공부하고 정리한 글입니다. 📢 본 포스팅에 앞서 예제를 위한 프로젝트를 생성하자. 더보기 📌 프로젝트 생성 Project: Gradle Project Language: Java Spring Boot: 2.7.0 (정식버전 중 가장 최신 버전 선택) Project Metadata Group: hello Artifact: typeconverter Name: typeconverter Package name: hello.typeconverter Packaging: Jar Java: 11 Dependencies : Spring Web, Thymeleaf, Lombok 📌 프로젝트 실행 인텔리제이로 프로젝트를 Open하고, 동작하는지 확인한다. 기본 메인..

본 포스팅은 인프런 - 스프링 MVC 2편을 강의를 바탕으로 공부하고 정리한 글입니다. 웹 페이지가 아닌 API 예외는 어떻게 처리하는지 알아보자. API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려줘야하므로, 생각할 내용이 더 많다. API 예외처리 (기존 방법) 서블릿 우선 서블릿 오류 페이지 방식으로 예외처리를 해보자. 👉🏻 서블릿 오류페이지 등록 📂 WebServerCustomizer @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { Err..

본 포스팅은 인프런 - 스프링 MVC 2편을 강의를 바탕으로 공부하고 정리한 글입니다. 📢 본 포스팅에 앞서 예제를 위한 프로젝트를 생성하자. 더보기 📌 프로젝트 생성 프로젝트 선택 Project: Gradle Project Language: Java Spring Boot: 2.6.x (정식버전 중 가장 최신 버전 선택) Project Metadata Group: hello Artifact: exception Name: exception Package name: hello.exception Packaging: Jar Java: 11 Dependencies : Spring Web, Thymeleaf, Lombok, Validation 📌 프로젝트 실행 인텔리제이로 프로젝트를 Open하고, 동작하는지 확인 ..

이진 트리 이진 트리는 부모인 루트 노드와, 자식인 왼쪽 노드 + 오른쪽 노드를 가지는 것이 기본 모양이다. DFS DFS(Depth-First Search)는 깊이 우선 탐색으로, 루트 노드(혹은 다른 임의의 노드)에서 시작해 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법이다. 전위 순회 출력 (부모-왼쪽-오른쪽) : 1 - 2 - 4 - 5 - 3 - 6 - 7 중위 순회 출력 (왼쪽-부모-오른쪽) : 4 - 2 - 5 - 1 - 6 - 3 - 7 후위 순회 출력 (왼쪽-오른쪽-부모) : 4 - 5 - 2 - 6 - 7 - 3 - 1 DFS의 구현 class Node { int data; Node lt, rt; public Node(int val) { data=val; ..