섹션9. 프록시와 연관관계 정리프록시프록시란?프록시는 실제 객체를 대신하는 가짜 객체로, 데이터베이스 조회를 지연시키는 역할을 합니다em.find(): 데이터베이스에서 실제 엔티티 객체를 조회em.getReference(): 데이터베이스 조회를 지연시키는 프록시 객체 반환Member member = em.getReference(Member.class, "id1"); // 프록시 객체 반환System.out.println(member.getName()); // 이 시점에서 DB 조회 발생프록시는 왜 필요할까?위의 그림과 같은 관계가 있을 때, 멤버를 조회할 때 team도 조회할 필요가 있을까?만약의 team의 정보가 필요없다면 같이 조회하지 않는게 성능 상 더 좋을 것이다.프록시의 특징실제 클래스를 상속 ..
전체 글
IT BlogTIL1. Cascade Types in JPACascade는 부모-자식 관계에 있는 엔티티 간 작업을 전파하는 방식으로, 부모 엔티티의 작업(Insert, Delete 등)이 자식 엔티티에 영향을 미치도록 설정할 수 있습니다.CascadeType.PERSIST:부모 엔티티가 저장(Insert)될 때 자식 엔티티도 함께 저장됩니다.예시: 부모 엔티티 persist 호출 시, 자식 엔티티도 자동으로 persist.CascadeType.REMOVE:부모 엔티티가 삭제(Delete)될 때 자식 엔티티도 자동으로 삭제됩니다.예시: 부모 엔티티 remove 호출 시, 관련된 자식 엔티티도 삭제됨.Orphan Removal:부모 엔티티와의 관계가 끊어진(고아 상태) 자식 엔티티를 자동으로 삭제하는 설정입니다.예: ..
영속성 컨텍스트 (Persistence Context)JPA를 이해하는데 가장 중요한 용어“엔티티를 영구 저장하는 환경”이라는 뜻EntityManager.persist(entity); - 엔티티를 영속성 컨텍스트 라는 곳에 저장영속성 컨텍스트는 논리적인 개념눈에 보이지 않는다.엔티티 매니저를 통해서 영속성 컨텍스트에 접근엔티티의 생명주기비영속 (Transient) // 엔티티 객체를 생성한 상태 (비영속) Member member = new Member(); member.setId(1L); member.setUsername("회원1"); // 이 상태에서는 JPA와 전혀 관계가 없습니다.영속성 컨텍스트와 무관한 상태. 단순 객체로 메모리에만 존재합니다.영속 (Managed) EntityManager em..
https://www.acmicpc.net/problem/17396import sysimport heapqinput = sys.stdin.readlinelooks = []INF = sys.maxsizen, m = map(int, input().split())looks = list(map(int, input().split()))graph = [[] for _ in range(n+1)]distance = [INF] * (n+1)looks[n-1] = 0for i in range(m): a, b, t = map(int, input().split()) graph[a].append((b, t)) graph[b].append((a, t)) def dijk(start): q = [] ..
https://www.acmicpc.net/problem/2665 다익스트라 이용문제에서는 흰색(지나갈 수 있는 곳)을 1, 검은색을 0으로 해줬는데 입력받은 뒤 이를 완전히 뒤집고 다익스트라 알고리즘을 통해 (N,N)으로 갈 수 있는 최단거리를 구해주면 끝import sysimport heapqinput = sys.stdin.readlineINF = int(1e9)rooms = []n = int(input())distance = [[INF] * n for _ in range(n)]dx = [1, -1, 0, 0]dy = [0, 0, 1, -1]for i in range(n): strarr = input().strip() room = [(int(ch) ^ 1) for ch in strarr] ..
페이징페이지 DTO@AllArgsConstructor public class Page { public List wiseSayings; public int totalPages; public int totalItems; public List getWiseSayings() { return wiseSayings; } public int getTotalItems() { return totalItems; } public int getTotalPages() { return totalPages; } }페이징을 구현하기 위해 필요한 것들은 아래와 같다전체 아이템 갯수한페이지에 보여줄 아이템..
MAPMap은 키-값 쌍으로 데이터를 저장하는 컬렉션입니다. 순서를 보장하지 않으며, 중복된 키는 허용되지 않습니다.HashMap: 기본적인 Map 구현체로, 순서를 보장하지 않음.LinkedHashMap: 삽입 순서를 보장하는 Map.삽입 순서 유지: 데이터를 삽입한 순서를 유지하여 순차적으로 접근 가능.접근 순서 유지 옵션: 생성 시 accessOrder 매개변수를 true로 설정하면 최근 접근 순서에 따라 정렬.LRU(Least Recently Used) 캐시 구현에 유용.Map linkedHashMap = new LinkedHashMap();linkedHashMap.put("one", 1);linkedHashMap.put("two", 2);linkedHashMap.put("three", 3);Sy..
JVM이란JVM (JAVA Virtual Machine): OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다Java 소스코드, 즉 원시코드(*.java)는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야한다.하지만 Java는 이 JVM 이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다.=> Java compiler 가 .java 파일을 .class 라는 Java bytecode로 변환한다.변환된 bytecode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이 때, JVM이 OS가 bytecode를 이해할 수 있도록 ..