본문 바로가기

분류 전체보기

(47)
JPA 엔티티 간 연관관계 매핑에 대해서 설명해 주세요. JPA에서 엔티티 간 연관관계 매핑은 객체 지향적인 설계를 데이터베이스 구조에 반영하는 중요한 개념입니다.가장 기본적인 연관관계로는 일대일(OneToOne), 일대다(OneToMany), 다대일(ManyToOne), 다대다(ManyToMany) 관계가 있습니다.일대일 관계는 @OneToOne 어노테이션을 사용합니다. 예를 들어, 한 사람이 하나의 주민등록증만 가질 수 있는 경우 이 관계를 사용할 수 있습니다.일대다 관계는 @OneToMany 어노테이션으로 표현합니다. 한 부서에 여러 직원이 속하는 경우가 이에 해당합니다. 이 때 반대쪽에는 보통 @ManyToOne을 사용하여 다대일 관계를 표현합니다.다대다 관계는 @ManyToMany 어노테이션을 사용합니다. 학생과 과목의 관계처럼 양쪽 모두 여러 개의 ..
JPA의 단일 엔티티 컬럼 매핑 방법에 대해서 설명해 주세요. JPA에서 단일 엔티티의 컬럼을 매핑하는 방법은 여러 가지가 있습니다.가장 기본적인 방법은 @Column 에너테이션을 사용하는 것입니다. 이 에너테이션을 엔티티 클래스의 필드나 getter 메서드 위에 붙이면 해당 속성을 데이터베이스 컬럼과 매핑할 수 있습니다.@Column 에너테이션은 다양한 속성을 제공합니다. 예를 들어, name 속성을 사용하면 데이터베이스 컬럼명을 직접 지정할 수 있습니다. length 속성으로는 문자열 길이를 제한할 수 있고, nullable 속성으로는 null 값 허용 여부를 설정할 수 있습니다.기본 키를 매핑할 때는 @Id 에너테이션을 사용합니다. 여기에 @GeneratedValue 에너테이션을 추가하면 자동으로 값을 생성할 수 있습니다.(strategy 속성을 통해 생성 전..
JPA의 영속성 컨텍스트에 대해서 설명해주세요. 영속성 컨텍스트는 JPA에서 엔티티를 관리하는 가상의 환경이라고 볼 수 있습니다. 쉽게 말해서, 엔티티의 생명주기를 관리하고 데이터베이스와의 상호작용을 중간에서 조율하는 일종의 메모리 공간이라고 생각하시면 됩니다.이 영속성 컨텍스트는 몇 가지 중요한 특징을 가지고 있는데, 우선 1차 캐시 기능을 제공합니다. 한 번 조회한 엔티티는 이 캐시에 저장되어 있어서, 같은 엔티티를 다시 조회할 때 데이터베이스에 쿼리를 날리지 않고 캐시에서 바로 가져올 수 있고 이는 성능 향상에 도움이 됩니다.또 다른 중요한 특징으로는 동일성 보장이 있습니다. 같은 엔티티를 여러 번 조회해도 항상 같은 인스턴스를 반환하기 때문에, 동일성 비교에 신경 쓰지 않아도 됩니다.그리고 변경 감지라는 기능도 있습니다. 영속성 컨텍스트는 엔티..
JPA에서 의미하는 Persist에 대해 설명해주세요. JPA에서 Persist는 엔티티를 영속성 컨텍스트에 저장하는 과정을 의미합니다. 이는 데이터베이스에 바로 저장하는 게 아니라 JPA가 관리하는 상태로 만드는 것입니다.Persist 메서드를 호출하면 몇 가지 일이 일어납니다. 우선 엔티티가 영속성 컨텍스트라는 곳에 저장되어지며 이 영속성 컨텍스트가 엔티티의 현재 상태를 스냅샷으로 찍어 저장해둡니다. 근데 이 시점에서는 실제 데이터베이스에 아직 저장되지 않습니다.실제로 데이터베이스에 저장되는 건 트랜잭션이 커밋될 때입니다. 이걸 '지연 쓰기'라고 부르는데, 성능 최적화에 도움이 됩니다.Persist를 사용하면 몇 가지 좋은 점이 있습니다. 먼저, 영속성 컨텍스트에 저장된 엔티티는 일종의 캐시 역할을 해서 빠르게 조회할 수 있습니다. 또, 같은 엔티티를 여..
Spring Data JPA에서의 애그리거트와 애그리거트 루트에 대해서 설명해 주세요. 애그리거트와 애그리거트 루트는 도메인 주도 설계(DDD)의 핵심 개념으로, Spring Data JPA에서도 이를 구현할 수 있습니다.애그리거트는 비슷한 업무 도메인의 묶음으로, 비슷한 범주의 업무들을 그룹화 해놓은 것으로 볼 수 있습니다.예를 들어, '주문' 애그리거트는 주문 정보, 배송 주소, 주문 항목 등을 포함할 수 있습니다.애그리거트 루트는 애그리거트 안에서 대표하는 애그리거트라고 볼 수 있습니다. 이 때 외부에서는 애그리거트 루트를 통해서만 애그리거트 내부에 접근할 수 있습니다. 즉, 애그리거트 루트의 기본키 정보를 다른 도메인들이 외래키 형식으로 가지고 있다고 볼 수 있습니다. 이러한 애그리거트 및 애그리거트 루트를 사용하는 이유는 ORM 기반의 Spring Data JDBC가 DDD와 밀접..
ORM이 무엇인지 설명해주세요 ORM은 Object-Relational Mapping의 약자로, 객체 지향 프로그래밍 언어와 관계형 데이터베이스 사이의 불일치를 해결하기 위한 기술입니다.주요 목적은 개발자가 객체 지향적으로 프로그래밍을 할 수 있게 하면서, 데이터베이스와의 상호작용을 자동화하는 것입니다. 이를 통해 SQL 쿼리를 직접 작성하는 대신, 객체를 통해 데이터베이스를 조작할 수 있습니다.ORM의 주요 장점으로는 생산성 향상, 유지보수성 증가, 데이터베이스 독립성 등이 있습니다. 객체와 테이블을 매핑함으로써 복잡한 SQL을 직접 작성할 필요가 줄어들고, 데이터베이스 변경 시 코드 수정을 최소화할 수 있습니다.하지만 ORM도 단점이 있습니다. 복잡한 쿼리의 경우 성능 이슈가 발생할 수 있으며, 학습 곡선이 높을 수 있습니다. 또..
Spring MVC 에서의 예외 처리 기법에 대해서 설명해주세요. Spring MVC에서는 다양한 예외 처리 기법을 제공합니다. 가장 흔히 사용되는 방법으로는 @ExceptionHandler와 @ControllerAdvice가 있습니다.@ExceptionHandler는 특정 컨트롤러 내에서 발생하는 예외를 처리합니다. 예를 들어, NullPointerException이 발생했을 때 특정 응답을 반환하도록 할 수 있죠.더 글로벌한 예외 처리를 위해서는 @ControllerAdvice를 사용합니다. 이를 통해 여러 컨트롤러에 걸쳐 적용되는 예외 처리 로직을 한 곳에서 관리할 수 있습니다.또한, @ResponseStatus 어노테이션을 사용하여 특정 예외에 대한 HTTP 상태 코드를 지정할 수 있습니다. 이는 RESTful API를 설계할 때 특히 유용합니다.입력 유효성 검..
Spring JDBC, Spring Data JDBC, Spring Data JPA 의 차이점을 설명해 주세요. - Spring JDBC 란?    - JDBC (Java Database Connectivity) 는 Java 기반 애플리케이션의 코드 레벨에서 사용하는 데이터를 데이터베이스에 저장 및 업데이트 하거나 반대로 데이터베이스에 저장된 데이터를 Java 코드 레벨에서 사용할 수 있도록 해주는 Java 에서 제공하는 표준 사용(또는 명세, Specification) 입니다.    - JDBC의 동작 흐름        - Java 애플리케이션 -> JDBC API -> JDBC 드라이버 -> 데이터베이스        - Java 애플리케이션에서 JDBC API를 이용해 적정한 데이터베이스 드라이버를 로딩한 후, 데이터베이스와 인터렉션한다.  Spring JDBC, Spring Data JDBC, Spring D..