ORM(Object-Relational Mapping)
: 객체지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블을
자동으로 매핑해주는 기술.
주요 특징 - 객체와 테이블 간의 데이터 변환 자동화 - SQL을 직접
작성하지 않아도 CRUD 가능 - 패러다임 불일치 문제를 해결함
패러다임 불일치란 데이터베이스는 한 칸에 String, Integer 같은
단일 값만 넣을 수 있지만,
자바 객체는 List, Object 등을 포함할 수 있는 구조적 차이를 말한다.
JDBC(Java Database Connectivity)
자바 프로그램에서 데이터베이스에 접속하고 SQL문을 실행하기 위한 API.
직접 SQL을 작성하고 결과를 처리해야 하므로 코드가 복잡하고 유지보수가
어려움.
JPA(Java Persistence API)
Java와 관계형 데이터베이스 간의 패러다임 불일치 문제를 해결하여
데이터베이스 작업을 객체지향적으로 수행할 수 있도록 지원하는 ORM 기술의
표준 인터페이스.
JPA 계층 구조

Spring에서 JPA를 쉽게 사용할 수 있도록 제공하는 추상화된 모듈.
Entity는 데이터베이스 테이블과 1:1로 매핑되는 Java 클래스.
관련 어노테이션
@Entity
→ 해당 클래스가 JPA 엔티티임을 선언
(즉, 데이터베이스 테이블과 매핑되는 클래스임을 나타냄.)
@Table(name = "members")
→ 엔티티와 매핑할 데이터베이스 테이블 이름을 지정한다.
(지정하지 않으면 클래스 이름이 테이블 이름으로 사용됨.)
@Id
→ 기본 키(Primary Key)를 지정한다.
(각 엔티티는 반드시 하나의 @Id 필드를 가져야 한다.)
@GeneratedValue
→ 기본 키 자동 생성 전략을 지정한다.
(예: MySQL에서는 GenerationType.IDENTITY 사용)
@Column
→ 엔티티 필드와 데이터베이스 컬럼의 매핑 정보를 지정한다.
속성 예시:
name : 컬럼명 지정length : 문자열 길이 제한nullable : null 허용 여부unique : 유니크 제약 조건 설정@NoArgsConstructor(access = AccessLevel.PROTECTED)
Lombok 어노테이션으로 기본 생성자를 protected로 생성하여 외부에서 임의로
객체 생성을 제한.
Spring 애플리케이션의 3계층 구조

해야 할 일 - @RestController 또는 @Controller 사용 - 요청 매핑
(@GetMapping, @PostMapping 등) - 요청 데이터 DTO로 받기 - 응답 데이터
반환 (JSON)
해야 할 일 - @Service 사용 - 여러 Repository 호출 및 조합 - 비즈니스
규칙, 데이터 검증 - 트랜잭션 경계 설정 (@Transactional)
JpaRepository를 상속받아 CRUD 자동화해야 할 일 - CRUD 메서드 정의 또는 쿼리 메서드 작성 - 쿼리 최적화 및
데이터 매핑
✅ 허용
상위 → 하위 계층 호출
동일 계층 내 통신
❌ 금지
하위 → 상위 계층 호출
계층 건너뛰기 (Controller → Repository 직접 접근 금지)
데이터를 계층 간 전달하기 위한 순수한 데이터 객체.
역할 - Controller에서 클라이언트의 요청(JSON 등)을 DTO로 변환 - DTO
→ Entity 변환 후 DB 저장 - Entity → DTO 변환 후 응답 반환
예시
public class MemberDTO {
private String name;
private String email;
}