-
이벤트 조회 및 수정 REST API 개발백기선(인프런 강의)/스프링 기반 REST API 개발 2021. 1. 27. 14:06반응형
위 GIT주소에 개발 step 별로 commit 해두었다.
진행 과정
이벤트 조회 및 수정 REST API 개발
- 테스트용 DB와 설정 분리
- API 인덱스 만들기
- 이벤트 목록 조회 API 구현
- 이벤트 CRUD API 구현
- 이벤트 수정 API 구현
- 이벤트 삭제 API 구현
- 이벤트 조회 API 구현
- 이벤트 생성 API 구현
- 테스트 코드 리팩토링
1. 테스트용 DB와 설정 분리
테스트 할 때는 계속 H2를 사용해도 좋지만 애플리케이션 서버를 실행할 때 PostgreSQL을 사용하도록 변경하자.
/scripts.md 참고
1-1. PostgreSQL 드라이버 의존성 추가
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>1-2. 도커로 PostgreSQL 컨테이너 실행
docker run --name ndb -p 5432:5432 -e POSTGRES_PASSWORD=pass -d postgres
1-3. 도커 컨테이너에 들어가보기
docker exec -i -t ndb bash
su - postgres
psql -d postgres -U postgres
\l
\dt1-4. 데이터소스 설정 및 하이퍼네이트 설정
application.properties
# 데이터소스 설정
spring.datasource.username=postgres
spring.datasource.password=pass
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.driver-class-name=org.postgresql.Driver
# 하이버네이트 설정
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE1-5. 애플리케이션 설정과 테스트 설정 중복 어떻게 줄일 것인가?
프로파일과 @ActiveProfiles 활용
application-test.properties
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.hikari.jdbc-url=jdbc:h2:mem:testdb
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect2. API 인덱스 만들기
2-1. 이벤트 핸들러
@RestController public class IndexController { @GetMapping("/api") public RepresentationModel<?> index() { RepresentationModel<?> index = new RepresentationModel<>(); index.add(linkTo(EventController.class).withRel("events")); return index; } }
다른 리소스에 대한 링크 제공
2021-01-25일 14시 30분 기준
git의 아래의 버전으로 코드를 받는다면 2가지 오류가 발생
1. IndexControllerTest코드 실행시 NullpointException 발생
2. createEvent_Bad_Request 실행시 오류(?)가 발생이안되고 정상으로 되어 테스트 실패
이는 찾다가 찾지 못하여 백기선님에게 질문드렸음.. 그리고 시간니날때 계속 찾아보면서 오류 수정함
3. 이벤트 목록 조회 API 구현
3-1. 이벤트 목록 조회 REST API (로그인 안 한 상태)
응답에 보여줘야 할 데이터
- 이벤트 목록
- 링크
- self
- profile: 이벤트 목록 조회 API 문서로 링크
- get-an-event: 이벤트 하나 조회하는 API 링크
- next: 다음 페이지 (optional)
- prev: 이전 페이지 (optional)
- 문서?
- 스프링 REST Docs로 만들 예정
3-2. 이벤트 목록 조회 REST API (로그인 안 한 상태)
페이징, 정렬 어떻게 하지?
- 스프링 데이터 JPA가 제공하는 Pageable 사용
Page<Event>에 안에 들어있는 Event 들은 리소스로 어떻게 변경할까?
- 하나씩 순회하면서 직접 EventResource로 맵핑을 시킬까..
- 비효율적
- PagedResourceAssembler<T> 사용하기
테스트 할 때 Pageable 파라미터 제공하는 방법
- page: 0부터 시작
- size: 기본값 20
- sort: property,property(,ASC|DESC)
4. 이벤트 CRUD 이벤트 구현
POST /api/events
이벤트 생성
GET /api/events/{id}
이벤트 하나 조회
PUT /api/events/{id}
이벤트 수정
DELETE /api/events/{id}
이벤트 삭제
5. 테스트코드 리팩토링
여러 컨트롤러 간의 중복 코드 제거하기
-
클래스 상속을 사용하는 방법
-
@Ignore 애노테이션으로 테스트로 간주되지 않도록 설정
테스트
Event 목록 Page 정보와 함께 받기
- content[0].id 확인
- pageable 경로 확인
Sort과 Paging 확인
- 30개를 만들고, 10개 사이즈로 두번째 페이지 조회하면 이전, 다음 페이지로 가는 링크가 있어야 한다.
- 이벤트 이름순으로 정렬하기
- page 관련 링크
Event를 EventResource로 변환해서 받기
- 각 이벤트 마다 self
링크 확인
- self
- profile
- udpate
- create
문서화
이벤트 데이터
- 조회하는 이벤트가 없는 경우 404 응답 확인
반응형'백기선(인프런 강의) > 스프링 기반 REST API 개발' 카테고리의 다른 글
REST API 보안 적용 - 2 (0) 2021.01.29 REST API 보안 적용 - 1 (0) 2021.01.27 REST API 보안 적용 (0) 2021.01.24 이벤트 생성 API 개발 -3 (0) 2021.01.24 이벤트 생성 API 개발 -2 (0) 2021.01.23