상세 컨텐츠

본문 제목

스프링 부트와 AWS로 혼자 구현하는 웹서비스 문제 해결

Log.Develop/SpringBoot

by bluayer 2020. 2. 19. 20:53

본문

서론

스프링 부트와 AWS로 혼자 구현하는 웹 서비스(이동욱 저)의 초판을 현재 읽고 있습니다.

(개인적으로 처음 접하기에 정말 정말 좋은 책이라고 생각합니다.)

중간 부분까지 읽으면서 책에 약간의 오탈자가 있거나, 내용이 약간 빠진 부분이 있어서

이런 문제들을 스스로 해결했는데, 이를 좀 공유하고자 합니다. 

(추가로 발행된 다른 판의 책에서는 해결이 되어 있을 수 있습니다. 참고하시길 바랍니다.)

 

문제 해결 부분

Lombok을 이용한 테스트 코드 작성 이후 실행 실패 문제

Gradle에서는 test시 의존성 설정을 해줘야 한다고 합니다.

따라서 testCompile이라는 키워드와 내용이 필요한데, 이는 바로

테스트 컴파일 (단위 테스트의 프로그램을 컴파일)에 사용하는 라이브러리를 지정할 수 있게 해주는 키워드입니다.

또한 Lombok이기 때문에 annotation 문제도 있을 수 있는데,

annotationProcessor프로젝트를 추출할 때 Lombok에서의 제공되는 annotation이 전부 포함되게 해주는 키워드입니다.

당연히 testAnnotationProcessor도 추가해줘야 합니다.


즉 Project의 root 디렉토리에 있는 build.gradle의 내용에 이를 추가해주면 됩니다.

lombok과 관련한 dependencies는 아래와 같이 됩니다.

compile('org.projectlombok:lombok')
testCompile "org.projectlombok:lombok"
annotationProcessor('org.projectlombok:lombok')
testAnnotationProcessor('org.projectlombok:lombok')

 

Mapping 에러

105pg
src/main/java/com/jojoldu/book/springboot/web/PostsApiController의

// 기존 내용은 다음과 같습니다.
@PutMapping("api/v1/posts")

// 수정한 내용은 다음과 같습니다.
@PostMapping("api/v1/posts")

 

수정 기능 문제 해결

113pg에서는 수정 및 조회 기능을 만드는 과정이 나와있습니다.

이 과정에서 update에 대한 추가적인 설명과 코드가 생략되어 있습니다.

 

특히 dto 중 PostsUpdateRequestDto가 있어야 하는데,

책에 적혀 있지 않아 스스로 작성해야 했습니다.(사실 도움은 많이 됐습니다)

실제로 Update를 하는 부분에서는 author, 즉 작성자를 수정하지 않기 때문에

변경이 일어나는 부분인 title, content만 추가를 해줍니다.

(당연히 dto package 안에 추가해주시면 됩니다)

// PostsUpdateRequestDto.java

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class PostsUpdateRequestDto {
    private String title;
    private String content;

    @Builder
    public PostsUpdateRequestDto(String title, String content) {
        this.title = title;
        this.content = content;
    }
}

 

또한, 업데이트를 위해서 불러온 Posts의 update라는 메소드를 사용하는 부분이 있습니다.

하지만 책의 앞 부분에서는 update 메소드를 만들지 않았으므로 이를 추가합니다.

/domain/posts/Posts

// Posts.java

@Getter
@NoArgsConstructor
@Entity
public class Posts extends BaseTimeEntity {

...
    @Builder
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

    public void update(String title, String content) {
        this.title = title;
        this.content = content;
    }
}

여기서 한 가지 중요한 점은,

책에 적혀있듯 Entity 객체의 값만 변경하면 별도로 Update 쿼리를 날릴 필요가 없다는 것입니다. (JPA 영속성 컨텍스트 때문)

즉 Entity의 객체의 값만 바꾸면 되는 것이기 때문에 update 메소드를 만들어서 바꿀 수 있게 했습니다.

관련글 더보기

댓글 영역