들어가기 앞서
스터디 영상
스터디 자료
안녕하세요~! 백엔드 파트리드 권찬입니다 
모두 이번 주 스터디도 수고하셨습니다!
특히 이번 주는 처음 들어보는 개념들이 많이 나와서 놀라셨을 수도 있을 것 같습니다
하지만 JPA를 사용하려면 영속성 컨텍스트, 트랜잭션 모두 중요한 개념이다보니 이해가 안되신다면 언제든 DM으로 질문 주셔도 좋고, 인터넷과 GPT를 적극적으로 활용하셔서 꼭 숙지해주세요!
이번 스터디 내용을 간단하게 정리해보면 다음과 같습니다.
트랜잭션 = 데이터 조작하는 행위들에 대한 쪼갤 수 없는 큰 동작 단위. (@Transactional)
엔티티 매니저 = 스프링 어플리케이션과 데이터베이스의 직접 적인 소통을 대신 해주는 객체
영속성 컨텍스트 = 스프링 어플리케이션과 데이터베이스 사이에 존재하는 임시 엔티티 보관 공간
데이터 생성 = em.persist() ( = 영속성 컨텍스트에 신규 엔티티 객체 등록)
데이터 조회 = em.find() (= 데이터베이스에서 엔티티 객체 조회)
데이터 수정 = 조회한 엔티티 객체를 수정하면 트랜잭션이 끝날 때 알아서 반영
데이터 삭제 = em.remove() (= 영속성 컨텍스트 내 엔티티에 삭제 표시)
혹시 JPA와 관련하여 더 자세히 공부해보고 싶으시다면 김영한 강사님의 JPA 활용 강의와 이론 강의를 들어보시길 추천드립니다.
과제
이번 스터디 과제로는 지난 주에 완성한 엔티티 클래스(=테이블) 에 대해 CRUD 를 수행하는 레포지토리 계층 코드를 각각 만들어 봅니다.
예를 들어 지난 주 과제에서 제가 의도했던 엔티티 클래스는 Todo, Member, Friend 3가지 클래스인데요.
혹시 제 의도와 동일하게 만드셨다면 각 클래스에 대응하는 TodoRepository, MemberRepository, FriendRepository 를 만들어주세요.
(다른 엔티티가 존재한다면 그 엔티티에 맞는 레포지토리 계층도 작성해주세요)
이때 모든 CRUD 를 일단 구현해두어도 좋고, 필요한 기능만 구현하셔도 좋습니다.
필요한 기능만 골라서 구현하신다면 PPT 마지막에 있는 프로젝트 명세를 참고하셔서 구현해주세요.
목표
•
영속성 컨텍스트와 트랜잭션에 대한 이해
•
레포지토리 계층 작성
제출해야할 파일과 파일 경로
1.
week4 폴더에 wil.md 를 작성해주세요.
2.
레포지토리 계층 작성 (폴더 구조 예시 참고)
3.
레포지토리 계층 테스트 작성 (폴더 구조 예시 참고)
폴더 예시
week4/
└── wil.md
todoapi/
└── main/
└──── java/
└────── com.example.todoapi/
└──────── todo/
└────────── Todo.java
└────────── TodoRepository.java
└──────── member/
└────────── Member.java
└────────── MemberRepository.java
└────── ...
└── test/
└──── java/
└────── com.example.todoapi/
└──────── todo/
└────────── TodoRepositoryTest.java
└──────── member/
└────────── MemberRepositoryTest.java
└────── ...
YAML
복사
•
레포지토리 코드의 경우, 모든 CRUD를 다 구현해두셔도 좋고, 명세에 따라 필요한 CRUD만 구현하셔도 좋습니다.
•
각각의 레포지토리 기능에 대해 잘 동작하는지 검증하는 테스트 코드를 작성해주세요.
모든 레포지토리의 모든 CRUD를 검증하는 코드를 작성하는 건 너무 반복적인 일이니 일부만 코드로 검증하고, 나머지 레포지토리는 영상에서 한 것처럼 테스트가 종료되지 않게 한 뒤 데이터베이스 관리자 콘솔에서 눈으로만 확인해보셔도 좋습니다 :)
영상에서는 update, delete 와 같은 기능에 대해 ‘코드’ 로는 검증하지 않았는데요.
한번 기존의 검증 방법을 참고하여 update, delete를 어떻게 검증할 수 있을지 고민하고 코드로 작성해보세요.
이 과정에서 Assertions 라이브러리의 다양한 메서드를 알아보시면 좋을 것 같습니다 :)
힌트
혹시 너무 반복적이지 않았나요?
과제를 하다보면 똑같은 형태의 코드를 반복적으로 사용하고 있다는 느낌을 받으셨을 거라고 생각해요.
과제 이후에 여유가 되신다면 기본적인 CRUD 기능을 인터페이스 생성만으로 모두 제공하는 Spring Data JPA 에 대해 공부해보세요.
반복적인 코드 작성 작업에서 벗어나는 해방감을 느끼실 수 있을 거에요 ㅎㅎ
마감 기한
5/20 화요일 23:59 까지 제출해주세요.
자신의 레포지토리에 week4 폴더를 생성해 wil.md 파일을 제출합니다.
더 자세한 사항은 아래 링크를 참조해주세요.