영속성 컨텍스트 JPA의 내부 동작을 이해하기 위해서는 가장 먼저 영속성 컨텍스트가 무엇인지에 대해 알아야한다. 영속성 컨텍스트는 객체를 관리하고 최종적으로 쿼리를 생성해서 DB에 전달하는 논리 영역이며, EntityManager가 작업을 처리하는 동안 사용되는 메모리 영역이다. EntityManager는 JPA 스펙의 EntityManagerFactory를 통해 생성할 수 있고, 생성된 EntityManager를 통해서 DB에 저장할 객체인 엔티티를 관리할 수 있다. 이때 EntityManger는 영속성 컨텍스트에 올라간 엔티티만 관리하기 때문에 관리할 엔티티를 꼭 영속해주어야하며, 영속 방법은 perist() 메서드를 호출하는 방법이 있으며, find()를 통해 조회된 엔티티도 1차 캐시에 저장되여 ..
JPA Java Persistence Application Programming Interface의 약자로 java에서 객체를 DB에 저장하기 위한 프로그래밍 명세라고 이해하면 된다. JPA는 Java 진영의 ORM 표준으로 인터페이스이기 때문에 실제 구현된 것이 아닌 어떻게 구현되어야 하는지가 명세되어있을 뿐이다. 따라서 실제 사용을 위해서는 JPA의 구현체를 사용해야하는데 보편적으로 가장 많이 쓰이는 구현체가 바로 Hibernate이다. ORM Object Relactional Mapping의 약자로 객체를 관계적으로 매핑하는 기술로 객체와 관계형 데이터베이스의 패러다임 불일치 문제를 해결하고 기존의 매퍼 방식(JDBC Template, MyBatis 등 직접 SQL을 작성하는 방식) 보다 더 객체지..
spring boot 실행 시 data.sql로 데이터 세팅하기 schema.sql, data.sql 파일을 resource 디렉토리의 루트 경로에 작성하면 ScriptUtils에 의해 sql script를 실행하게된다. 기본 이름은 schema, data이지만 @Sql을 사용하면 다른 이름의 .sql 파일을 지정해줄 수 있다. 위 과정이 스프링 부트 2.4 버전까지는 하이버네이트의 ddl-auto 설정대로 테이블을 생성하게 된 후 실행되었다. 하지만 2.5 버전부터 스크립트가 먼저 실행된 후 JPA ddl-auto가 실행된다. 그렇기 때문에 ddl-auto가 create로 되어있어 data.sql로 insert한 데이터가 다 지워지게 될 수 있다. 이런 경우 defer-datasource-initial..
import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static boolean[][] map; static boolean[] visited; static int N, M, V; static StringBuilder sb = new StringBuilder(); static Queue queue = new LinkedList(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRea..