[241205 TIL]
JPA 도움닫기
REST API, Spring Security, JPA 연관관계와 영속성 컨텍스트 정리
1. REST API 메서드와 역할
REST API는 클라이언트-서버 간 통신을 위한 표준으로, 5가지 주요 메서드를 제공합니다.
REST API 메서드
- GET
- 서버의 리소스에 액세스.
- 데이터를 필터링하기 위해 쿼리 파라미터 사용 가능.
- 예: GET /users?id=1
- POST
- 데이터를 서버에 전송하여 리소스를 등록하거나 저장.
- Body에 JSON, XML 등의 데이터를 포함하여 전송.
- 예: POST /users (Body: { "name": "John" })
- PUT
- 서버의 기존 리소스를 전체 업데이트.
- 제공된 데이터로 리소스의 모든 필드를 수정.
- 예: PUT /users/1 (Body: { "name": "John", "age": 30 })
- PATCH
- 서버의 기존 리소스를 부분 업데이트.
- 예: PATCH /users/1 (Body: { "name": "John" } → "name" 필드만 수정)
- DELETE
- 리소스를 제거.
- 인증 및 권한이 필요.
- 예: DELETE /users/1
2. Spring Security - 인증과 인가
Spring Security는 애플리케이션 보안을 위한 강력한 도구로, **인증(Authentication)**과 인가(Authorization) 기능을 제공합니다.
Authentication (인증)
- 사용자의 신원을 확인하는 과정.
- 다양한 인증 방식을 지원:
- Username/Password
- OAuth2
- Bearer Token
- 인증 흐름: Authentication Filter에서 요청의 인증 정보를 추출 및 검증.
Authorization (인가)
3. JPA의 연관관계와 영속성 컨텍스트
JPA는 데이터베이스의 테이블 간 관계를 객체지향적으로 매핑하여 관리합니다.
JPA 연관관계
- 일대일(1:1)
- 한 엔티티가 다른 엔티티와 1:1로 매핑.
- 예: 상품 기본정보/상품 상세정보, 회원 정보/회원 프로필 정보.
- 일대다(1:N), 다대일(N:1)
- 한 엔티티가 여러 개의 엔티티와 매핑.
- 예: 게시글/좋아요, 주문/상품.
- 다대다(N:M)
- 여러 엔티티가 여러 개의 다른 엔티티와 연결.
- 예: 학생/과목, 게시글/태그.
- 보통 중간 테이블을 사용하여 관리.
Persistence Context (영속성 컨텍스트)
JPA의 핵심 요소로, 엔티티 객체를 저장 및 관리하며 데이터베이스와의 작업을 효율화.
상태
- 비영속 (Transient)
- 엔티티가 영속성 컨텍스트에서 관리되지 않는 상태.
- 영속 (Managed)
- 엔티티가 영속성 컨텍스트에서 관리되는 상태.
- 변경 감지(Dirty Checking), 쓰기 지연 등의 기능 지원.
- 준영속 (Detached)
- 관리되던 엔티티가 영속성 컨텍스트에서 분리된 상태.
- 삭제 (Removed)
- 엔티티가 삭제 상태로 표시되며, 트랜잭션이 끝나면 데이터베이스에서도 삭제.
장점
- ACID 보장: 트랜잭션의 원자성, 일관성, 격리성, 지속성 보장.
- 쓰기 지연 (Write-Behind)
- 변경 감지 (Dirty Checking)
영속 상태로 만드는 방법
- @Transactional 선언.
- Repository에서 엔티티를 저장하거나 조회.