영속성 전이와 고야 객체는 무엇인가? 영속성 전이 (CASCADE) --영속성 전이는특정 엔티티를 영속 상태로 만들 때 해당 엔티티와 연관된 엔티티도 함께 영속 상태로 만들기 위해 사용된다.즉, 부모 엔티티의 상태 변경이 자식 엔티티에도 전이되도록 설정하는 기능으로부모 엔티티에 대한 데이터를 저장할 때 자식 엔티티도 함께 저장된다. @Entitypublic class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadType.ALL) private List childList = new ArrayList(); ...
즉시 로딩과 지연 로딩은 무엇일까? JPA의 프록시 --JPA의 프록시와 일반적인 프록시는 같은 개념이지만 각자 목적이 다르다.JPA에서 사용하는 프록시도 그냥 "프록시"라고 부르지만정확하게 명칭 할 때에는"JPA 프록시" 또는 "하이버네이트 프록시", "지연 로딩 프록시"라고도 부른다. 일반적으로 프록시는"대리인" 역할을 하는 객체로실제 객체 대신 가짜 객체(프록시)를 만들어서 대신 동작하게 하는 패턴이다.원본 객체의 접근을 제어원본 객체가 무겁거나 생성 비용이 크면 프록시가 대신 처리원본 객체를 감싸서 추가 기능을 제공 (ex. 로깅, 캐싱, 접근 제어 등) 예시로네트워크 프록시 인터넷에서VPN이나 프록시 서버를 사용하면,내 요청을 대신 전달해 주는 서버가 프록시 역할을 수행한다. JPA의..
상속관계 매핑은 무엇일까? 관계형 DB의 상속 관계 --자바 객체의 상속관계처럼관계형 DB에는 상속 관계가 존재하지 않는다. 다만 "슈퍼타입", "서브타입" 관계라는 모델링 기법을 통해 객체 상속과 유사한 형태를 만들 수 있다. 즉, 상속관계 매핑은객체의 상속 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑하는 것을 의미한다. 상속관계 매핑에는 3가지 구현 방법이 존재한다.조인 전략 (각 테이블로 변환)단일 테이블 전략 (통합 테이블로 변환)구현 클래스마다 테이블 전략 (서브타입 테이블로 변환) 조인 전략 (각 테이블로 변환) Item 테이블을 우선 생성하고해당 테이블 하위에 알맞은 테이블(Water, Book, Car)을 추가로 생성하며추가로 필요할 때마다 특정 테이블을 조인하는 방식이다...
연관관계 매핑에는 어떤 방법들이 있을까? 단방향 연관관계 --위 그림은 N:1 단방향 연관관계다. (N : Member, 1 : Team) 단방향 연관관계는A 엔티티에서 B 엔티티를 참조하는 방식으로A 객체에서는 B객체로 관계를 따라 탐색(접근)이 가능하지만반대로 B객체에서 A 객체로는 관계를 따라 탐색(접근)이 불가능하다. 즉, Member에서는 Team을 참조하고 있기 때문에 Member에서 Team을 탐색할 수 있지만반대로 Team에서는 Member를 참조하고 있지 않아 Member에 대해 탐색이 불가능하다. 단방향 연관관계 예시 코드@Entitypublic class Member { ... @ManyToOne @JoinColumn(name = "team_id") ..
엔티티 매핑은 어떻게 할까? 객체와 테이블 매핑 --객체와 테이블을 매핑한다는 것은특정 객체(클래스)를 DB의 테이블과 연결하여 해당 객체를 가지고 테이블을 관리할 수 있도록 구축하는 것이다. JPA에서 객체와 테이블을 매핑하기 위해서 "@Entity"와 "@Table" 등의 어노테이션을 사용해야 한다. @Entity해당 클래스를 JPA가 관리하는 엔티티(Entity)로 사용하겠다고 선언하는 어노테이션이다.(엔티티 = 테이블과 매핑되는 객체) @Entity // 엔티티 선언public class Member { @Id // 기본 키 매핑 private Long id; private String username; ...} @Entity를 선언하면기본적으로 ..
영속성은 어떻게 관리될까? 영속성 컨텍스트 (Persistence Context) --영속성(Persistence)은데이터를 프로그램이 종료되더라도 유지할 수 있도록 저장하는 개념으로일반적으로 애플리케이션에서 중요한 데이터를 DB나 파일 시스템 같은 영구 저장소에 저장하여,시스템이 재시작되거나 장애가 발생해도 데이터를 유지할 수 있도록 한다. 영속성 컨텍스트는 JPA에서 엔티티 객체를 관리하고, 트랜젝션이 끝나면 변경 사항을 DB에 반영한다.굳이 해석하면 "엔티티를 영구 저장하는 환경"이다. 엔티티의 생명 주기비영속 (new / Transient)영속 (Persistent)준영속 (Detached)삭제 (Removed) 비영속과 준영속은 비슷해 보이지만단 한 번이라도 영속성 컨텍스트에..
최대공약수와 최소공배수는 어떻게 구할까? 유클리드 호제법 (Euclidean Algorithm) --유클리드 호제법은두 수의 최대공약수(GCD)를 효율적으로 구하는 알고리즘이지만,해당 최대공약수(GCD)를 이용해서 최소공배수(LCM)도 쉽게 구할 수 있기 때문에둘 다 구하는 알고리즘이라고도 할 수 있다. 정확히는두 정수의 최대공약수(GCD)를 구하는 효율적인 알고리즘으로두 수의 최대공약수를 구할 때, 나눗셈을 반복적으로 수행하여 나머지가 0이 될 때까지 계산하는 방법이다.-- 최대공약수 (GCD) --공식 위 공식을 이용하여r = 0이 될 때 B가 최대공약수(GCD)가 된다. 증명A / B = q + r=> A = B * q + rA > B 가정q = 몫r = 나머지 GCD(A, B) ..
스프레드와 디스트럭쳐링은 무엇일까? 스프레드 (Spread) --스프레드는기존의 객체를 가지고 복사, 확장, 병합, 덮어쓰기를 하여 새로운 객체를 만들 수 있다. 스프레드 연산자는 (...)다. 예시 코드// 객체 복사const person = { name: "Alice", age: 25 };const copyPerson = { ...person };console.log(copyPerson); // { name: "Alice", age: 25 }console.log(copyPerson === person); // false (완전히 새로운 객체)// 객체 확장 (새로운 속성 추가)const person = { name: "Alice", age: 25 };const newPerson = { ....