[241205 TIL]

    JPA 도움닫기


    REST API, Spring Security, JPA 연관관계와 영속성 컨텍스트 정리


    1. REST API 메서드와 역할

    REST API는 클라이언트-서버 간 통신을 위한 표준으로, 5가지 주요 메서드를 제공합니다.

    REST API 메서드

    1. GET
      • 서버의 리소스에 액세스.
      • 데이터를 필터링하기 위해 쿼리 파라미터 사용 가능.
      • 예: GET /users?id=1
    2. POST
      • 데이터를 서버에 전송하여 리소스를 등록하거나 저장.
      • Body에 JSON, XML 등의 데이터를 포함하여 전송.
      • 예: POST /users (Body: { "name": "John" })
    3. PUT
      • 서버의 기존 리소스를 전체 업데이트.
      • 제공된 데이터로 리소스의 모든 필드를 수정.
      • 예: PUT /users/1 (Body: { "name": "John", "age": 30 })
    4. PATCH
      • 서버의 기존 리소스를 부분 업데이트.
      • 예: PATCH /users/1 (Body: { "name": "John" } → "name" 필드만 수정)
    5. DELETE
      • 리소스를 제거.
      • 인증 및 권한이 필요.
      • 예: DELETE /users/1

    2. Spring Security - 인증과 인가

    Spring Security는 애플리케이션 보안을 위한 강력한 도구로, **인증(Authentication)**과 인가(Authorization) 기능을 제공합니다.

    Authentication (인증)

    • 사용자의 신원을 확인하는 과정.
    • 다양한 인증 방식을 지원:
      • Username/Password
      • OAuth2
      • Bearer Token
    • 인증 흐름: Authentication Filter에서 요청의 인증 정보를 추출 및 검증.

    Authorization (인가)

    • 사용자의 권한을 확인하여 특정 리소스에 대한 접근 제어.
    • 엔드포인트 별로 권한을 설정할 수 있음:
      • /admin/** → ADMIN 권한 필요.
      • /users/** → USER 권한 필요.
      • /auth/** → 인증 불필요.
    • 설정 예:
      http.authorizeRequests()
          .antMatchers("/auth/**").permitAll()
          .antMatchers("/admin/**").hasRole("ADMIN")
          .anyRequest().authenticated();
      

    3. JPA의 연관관계와 영속성 컨텍스트

    JPA는 데이터베이스의 테이블 간 관계를 객체지향적으로 매핑하여 관리합니다.

    JPA 연관관계

    1. 일대일(1:1)
      • 한 엔티티가 다른 엔티티와 1:1로 매핑.
      • 예: 상품 기본정보/상품 상세정보, 회원 정보/회원 프로필 정보.
    2. 일대다(1:N), 다대일(N:1)
      • 한 엔티티가 여러 개의 엔티티와 매핑.
      • 예: 게시글/좋아요, 주문/상품.
    3. 다대다(N:M)
      • 여러 엔티티가 여러 개의 다른 엔티티와 연결.
      • 예: 학생/과목, 게시글/태그.
      • 보통 중간 테이블을 사용하여 관리.

    Persistence Context (영속성 컨텍스트)

    JPA의 핵심 요소로, 엔티티 객체를 저장 및 관리하며 데이터베이스와의 작업을 효율화.

    상태

    1. 비영속 (Transient)
      • 엔티티가 영속성 컨텍스트에서 관리되지 않는 상태.
    2. 영속 (Managed)
      • 엔티티가 영속성 컨텍스트에서 관리되는 상태.
      • 변경 감지(Dirty Checking), 쓰기 지연 등의 기능 지원.
    3. 준영속 (Detached)
      • 관리되던 엔티티가 영속성 컨텍스트에서 분리된 상태.
    4. 삭제 (Removed)
      • 엔티티가 삭제 상태로 표시되며, 트랜잭션이 끝나면 데이터베이스에서도 삭제.

    장점

    • ACID 보장: 트랜잭션의 원자성, 일관성, 격리성, 지속성 보장.
    • 쓰기 지연 (Write-Behind)
    • 변경 감지 (Dirty Checking)

    영속 상태로 만드는 방법

    1. @Transactional 선언.
    2. Repository에서 엔티티를 저장하거나 조회.

    + Recent posts