
플레이데이터 백엔드 9기 김지환님의 12주차 회고
6월 1주차 (12주차) - (06/02 - 06/08)
서론
6월 1주차 (12주차) - (06/02 - 06/08)
06/02 : JPA(Entity, 영속화, 관계)
06/03 : 휴일
06/04 : JPA(JPQL, Spring DATA JPA CRUD)
06/05 : Spring DATA JPA CRUD / REST API
06/06 : 휴일
JPA의 영속화 기능을 통해 데이터를 먼저 1차 캐시에서 확인하여 가져오고, 캐시가 없으면 데이터 베이스에서 쿼리문을 자동으로 작성해서 가져오는 방법을 배웠습니다. 더 용이한 방법으로 객체 간의 관계를 설정해두면 객체 탐색만으로 자동으로 관련 데이터를 가져오는 방법도 배웠습니다.
강사님의 주말 보충수업으로 git flow 플러그인 통하여 Feture를 다루는 법을 가르쳐주셨는데 실무적인 git 활용법을 배웠습니다.
1. 내용정리
[JPA]
JPA (Java Persistence API)
목적과 특징
- Entity를 통해 데이터를 관리하고, 개발자가 SQL 대신 자바 코드로 데이터를 조회하고 수정할 수 있어 가도성과 유지보수성이 향상되며 객체 중심적인 데이터 접근하는데 용이
- EntityManager를 활용하여 트랜잭션을 관리하며, 영속성 컨텍스트를 통해 관리의 편의성 제공
- SQL면에서 JPQL을 제공하여 데이터베이스 독립적인 쿼리 작성이 가능하며 캐싱 등 성능 최적화를 지원하여 데이터 처리 속도를 높힘
주요 어노테이션

엔터티(Entity)와 관계(Association)

에르게이트 개념과 특징
- 엔터티는 도메인 내에서 고유의 식별자(ID)를 가지며, 해당 식별자를 기준으로 동일성 및 상태를 관리하는 핵심 객체 (주문이나 회원 등은 고유 식별자를 통해 관리되는 엔티티)
- 에그리게이트 (Aggregate)는 관련된 엔터티와 값 객체를 하나의 논리적 단위로 묶어 도메인 경계를 정의하는 것을 말함
- 애그리게이트 내에서는 접근 및 변경이 애그리게이트 루트(Entity)를 통해서만 가능하도록 하여 일관성을 유지
- 한 애그리게이트 내에서 이루어지는 모든 변경은 동일한 트랜잭션 내에서 이루어져야 하며, 이를 통해 도메인 규칙과 일관성이 유지됨
관계 설정의 이점
- @OneToMany, @ManyToOne, @ManyToMany 등의 어노테이션으로 설정하면 JPA가 자동으로 왜래키(FK) 관리를 해줌
- SQL 대신 객체를 통해 다룰 수 있어 유지보수가 쉬워짐 (DB가 아닌 객체 중심 데이터 조작 가능
- Cascade 옵션 (CascadeType.ALL 등)을 설정하면 부모 엔티티가 저장될 때 자식 엔티티도 자동으로 저장
- FetchType.LAZY 옵션을 사용하여 실제 데이터를 필요할 때 가져오기 떄문에 불필요한 데이터 로딩을 방지할 수 있음
관계 설정 코드 예제

영속성 컨텍스트 (Persistent Context)

핵심 개념과 특징
- JPA(Java Persistence API)에서 영속성 컨텍스트는 엔티티(Entity)를 관리하는 공간
- 영속성 컨텍스트는 1차 캐시를 사용하여 동일한 엔티티 조회 시 데이터베이스가 아닌 메모리에서 조회함으로써 성능을 최적화 하는 기능
- EntityManager를 사용하여 엔티티를 저장할 때, 해당 엔티티는 영속성 컨텍스트에 포함되며 이후 변경 사항이 자동으로 반영 (EntityManager가 하나의 공통된 영속성 컨텍스트를 참조하는 방식으로 동작)
- 영속 상태의 엔터티는 자동으로 변경사항을 감지하여 트랜잭션 종료 시 데이터베이스에 업데이트 됨
영속성 컨텍스트 코드 예제

[REST API]
REST API (Representational State Transfer )
핵심 개념
- 웹의 모든 자원에 고유한 'ID'인 HTTP 'URL'을 부여하고 'HTTP Method'를 통해 해당 자원에 대한 CRUD 연산을 적용
- REST는 자원 기반 구조 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍처
특징
- 클라이언트/서버 구조 : 클라이언트와 서버의 역할이 명확히 구분됨
- 무상태성 (Stateless) : 서버는 상태 정보를 저장하지 않고 요청마다 독립적으로 처리
- 캐시 처리 가능 : HTTP 명세를 따르므로 캐시를 활용해 성능 향상 가능
- 자체 표현 구조 : API 메시지만으로 요청의 의미를 쉽게 파악할 수 있음
- 계층화 (Layered System) : 중간 계층을 활용해 보안·로드 밸런싱 등 적용 가능
- 유니폼 인터페이스 : 플랫폼·언어에 종속되지 않고 HTTP 표준을 따름
기능
- Response 테스트 : ResponseEntity를 사용해 API 응답 처리 (문자열, Object, List, file 등)
- ResponseEntity 테스트 : HTTP 응답 본문이나 헤더를 커스터마이징하여 데이터를 반환
- Valid : 사용자 정의 예외 처리 및 입력 데이터 검증 (예외 처리 및 유효성 검사)
- HATEOAS : 클라이언트가 서버의 응답을 통해 애플리케이션의 가능한 상태 전환
- Swagger : REST API를 문서화하고 테스트 (인터페이스 제공)
가이드
HTTP 메서드
- GET : 해당 리소스를 조회
- POST : 해당 URI를 요청하면 리소스를 생성
- PUT : 해당 리소스를 수정
- DELETE : 해당 리소스를 삭제
오류코드 복습
- 200 : 정상적인 응답
- 400 : 요청이 잘못됨 (Bad Request)
- 403 : 권한이 없음 (Forbidden)
- 404 : 페이지를 찾을 수 없음 (Not Found)
- 405 : 지원되지 않는 메소드 (Method Not Allowed)
- 500 : 내부 서버 오류 (Internal Server Error)
2. 마무리
> 좋았던 점과 아쉬웠던 점
배운 내용을 책을 통해 직접 코드를 작성하는 연습해 보는 방법이 좋았던 것 같습니다.
> 개선할 점
지난번 교육과정에서 부족했던 리액트 부분에 보충이 필요합니다.
> 다음주 계획
리액트 인프런 강의 틈틈이, 커리큘럼에 집중 할 계획입니다.
커리큘럼 : 스프링 프레임워크 (REST API)
06/12 ~ 16 : 단위 스프링(백엔드) 프로젝트 예정 (3일)
08/09 : ADsP 자격증 시험
08/23 : SQLD 자격증 시험
지환님의 더 많은 이야기가 궁금하다면?
👉플레이데이터 백엔드 9기 김지환님의 블로그에서 확인해보세요!🚀
[ 블로그 바로가기 / Week11 회고록 바로가기 ]
서론
6월 1주차 (12주차) - (06/02 - 06/08)
06/02 : JPA(Entity, 영속화, 관계)
06/03 : 휴일
06/04 : JPA(JPQL, Spring DATA JPA CRUD)
06/05 : Spring DATA JPA CRUD / REST API
06/06 : 휴일
JPA의 영속화 기능을 통해 데이터를 먼저 1차 캐시에서 확인하여 가져오고, 캐시가 없으면 데이터 베이스에서 쿼리문을 자동으로 작성해서 가져오는 방법을 배웠습니다. 더 용이한 방법으로 객체 간의 관계를 설정해두면 객체 탐색만으로 자동으로 관련 데이터를 가져오는 방법도 배웠습니다.
강사님의 주말 보충수업으로 git flow 플러그인 통하여 Feture를 다루는 법을 가르쳐주셨는데 실무적인 git 활용법을 배웠습니다.
1. 내용정리
[JPA]
JPA (Java Persistence API)
목적과 특징
주요 어노테이션
엔터티(Entity)와 관계(Association)
에르게이트 개념과 특징
관계 설정의 이점
관계 설정 코드 예제
영속성 컨텍스트 (Persistent Context)
핵심 개념과 특징
영속성 컨텍스트 코드 예제
[REST API]
REST API (Representational State Transfer )
핵심 개념
특징
기능
가이드
HTTP 메서드
오류코드 복습
2. 마무리
> 좋았던 점과 아쉬웠던 점
배운 내용을 책을 통해 직접 코드를 작성하는 연습해 보는 방법이 좋았던 것 같습니다.
> 개선할 점
지난번 교육과정에서 부족했던 리액트 부분에 보충이 필요합니다.
> 다음주 계획
리액트 인프런 강의 틈틈이, 커리큘럼에 집중 할 계획입니다.
커리큘럼 : 스프링 프레임워크 (REST API)
06/12 ~ 16 : 단위 스프링(백엔드) 프로젝트 예정 (3일)
08/09 : ADsP 자격증 시험
08/23 : SQLD 자격증 시험
지환님의 더 많은 이야기가 궁금하다면?
👉플레이데이터 백엔드 9기 김지환님의 블로그에서 확인해보세요!🚀
[ 블로그 바로가기 / Week11 회고록 바로가기 ]