1. REST API
- URL 설계 방식이다.
- 동사를 쓰지 말고 자원을 표시해야 한다.
- 동사는 HTTP 메서드로 한다.
- Node/Express 하면서 지겹게 배웠던 내용이므로 나머지 생략
2. 엔티티 구성
컬럼명 | 자료형 | null 허용 | 키 | 설명 |
id | BIGINT | N | 기본키 | 일련번호, 기본키 |
title | VARCHAR(255) | N | 게시물의 제목 | |
content | VARCHAR(255) | N | 내용 |
3. 단계별 작업
1) Domain의 Article class
- Article class를 만든다
- Article.java
- @Builder : 롬복에서 지원하는 애너테이션, 빌더 패턴 방식으로 객체를 생성할 수 있도록 한다.
- 빌더패턴을 사용하지 않으면 new Article("abc","def") 이렇게 만들어야하는데
- 빌더패턴은 Article.builder().title("abc").content("def").build(); 이렇게 쓸 수 있다.
- lombok의 애너테이션을 통해 아래와 같이 간략하게 바꿀 수 있다.
2) Repository 만들기
- repository 디렉터리를 만들어 BlogRepository 인터페이스를 만든다.
- Article 엔티티와 PK의 타입 Long을 인수로 넣어준다.
- 이렇게 하면 이 Repository 사용 시 JpaRepository에서 제공하는 메서드를 사용할 수 있다.
4. API 구현하기
- 클라이언트 - 컨트롤러(BlogController) - 서비스(BlogService) - 리포지터리(BlogRepository) 의 구성을 따른다
1) 서비스 메서드 코드 작성
- dto 패키지를 만들어준다.
- dto(Data Transfer Object) 는 계층끼리 데이터를 교환하기 위해 사용하는 객체이다.
- AddArticleRequest.java
- service/BlogService.java 를 만든다
- BlogService.java
- @RequiredArgsConstructor : 빈을 생성자로 생성하는 롬복에서 지원하는 애너테이션으로, final 키워드나 @NotNull이 붙은 필드로 생성자를 만들어준다.
- @Service : 해당 클래스를 빈으로 서블릿 컨테이너에 등록해준다.
- .save() : 이 메서드는 JpaRepository에서 지원하는 저장 메서드로, save()를 통해 AddArticleRequest 클래스에 저장된 값들을 article 데이터베이스에 저장한다.
2) 컨트롤러 메서드 작성하기
- @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등을 사용할 수 있다.
- @PostMapping 을 이용해 요청을 매핑 -> 블로그 글을 생성하는 BlogService의 save() 를 호출 -> 생성된 블로그 글을 반환하는 addArticle() 메서드를 만든다
- controller 디렉터리를 구성한다
- BlogApiController.java
- @RestController 애너테이션을 클래스에 붙이면 HTTP 응답으로 객체 데이터를 JSON 형식으로 반환한다.
- 지금의 경우 @PostMapping() 을 통해 동일 메서드와 매핑한다. 지금의 경우 /api/articles는 addArticle() 메서드에 매핑한다.
- @RequestBody : 애너테이션 HTTP를 요청할 때 응답에 해당하는 값을 @RequestBody 애너테이션이 붙은 대상 객체인 AddArticleRequest에 매핑한다.
3) API 실행 테스트하기
- H2 콘솔을 활성화해야한다. (속성 파일을 수정해주어야 한다.)
- application.yml 파일을 수정한다.
- 이제 PostMan에서 Post요청을 해보자.
- POST 요청, Body - row - JSON으로 두고 적절한 JSON 내용을 Send한다.
- 이제 브라우저에서 localhost:8080/h2-console에 접속한다.
- JDBC URL을 application.yml에 적었던 jdbc:h2:mem:testdb 로 바꿔줘야한다.
- 접속한 후 SQL문 입력하는 곳에 SELECT * FROM ARTICLE 적어서 Run 누르면 아래에 정상적으로 작동해서 저장된 것을 확인할 수 있다.
5. 테스트코드 구현하기
- H2 콘솔에 들어가서 매번 확인하기 귀찮으니 테스트 코드를 작성해보자
- BlogApiController에서 Create Test를 누르면 테스트 생성 창이 열린다. 만들어보자.
- 직렬화 : 자바 Object -> JSON (자바 Object를 외부 데이터로 만듬)
- 역직렬화 : JSON -> 자바 Object (외부 데이터를 자바 Object로 만듬)
- Given : 블로그 글 추가에 필요한 요청 객체를 만든다.
- When : 블로그 글 추가 API에 요청을 보낸다. 이때 요청 타입은 JSON이며, given 에서 미리 만들어준 객체를 요청 본문으로 함께 보낸다.
- Then : 응답코드가 201인지 확인한다. Blog를 전체 조회해 크기가 1인지 확인하고, 실제로 저장된 데이터와 요청 값을 비교한다.
- writeValueAsString() 메서드를 사용해서 객체를 JSON으로 직렬화 한다.
- 이후에 MockMvc를 사용해 HTTP 메서드, URL, 요청 본문, 요청 타입 등을 설정한 뒤 설정 내용을 바탕으로 테스트 요청을 보낸다.
- contentType() 메서드는 메서드 요청을 보낼 때 JSON, XML 등 다양한 타입 중 하나를 골라 요청을 보낸다.(여기서는 JSON)
- assertThat() 메서드로 블로그 글의 개수가 1인지 확인한다.
- 생각보다 스프링부트가 어렵다. 자바 진영 프로그래밍에 익숙치 않아서 그런 것 같다. 왜 백엔드 준비하는 학생들이 시간을 많이 투자하는 지 알 것 같다. Express 처음 배울 때 이 정도는 아니었는데.. 프런트가 본업이라 JS/TS가 익숙해서 그랬던 것인지 함수형 프로그래밍만 배워대서 그랬던 것인지 예상보다 어려워서 책은 잠시 스톱하고 인강부터 듣고 다시 정독하고 와서 실습해야겠다!
'Backend - Java Spring > SB 입문(완)' 카테고리의 다른 글
[자율학습] 컨트롤러 만들기 (1) | 2024.02.06 |
---|---|
[자율학습] SpringBoot 3 입문 (0) | 2024.02.06 |
[SpringBoot3] 데이터베이스 (0) | 2023.10.20 |
[SpringBoot3] 테스트코드 (0) | 2023.10.20 |
[SpringBoot3] SpringBoot3 구조 살펴보기 (0) | 2023.10.20 |
댓글