TACO 프로젝트 회고록(2023-04-16)

윤현우·2023년 4월 16일
0
post-thumbnail

2023-04-16 일

오늘은 생각보다 뿌듯한 하루였다.

일단 게시글 수정 코드를 완성하고, 전에 안되던 NotNull 어노테이션을 해결하였다.

게시글 수정 메서드 작성 중 문제점

가장 먼저 수정 코드이다.

수정을 하려면 일단 수정하려는 데이터를 가져와 수정한 뒤, 수정 값을 저장하는 것이다.

그래서 제일 먼저 findById 메서드로 데이터를 가져온다.

Optional<PostEntity> post = postRepository.findById(postId);

JpaRepository의 findById 메서드는 반환 값이 Optional이다.

그래서 Optional인 데이터를 바꾸기 위해서 Optional클래스의 map() 메서드를 이용하여 해당 데이터를 바꾸었다.

return post.map(p -> {
            post.get().setTitle(postDto.getTitle());
            post.get().setDescription(postDto.getDescription());
            post.get().setPostSido(postDto.getPostSido());
            post.get().setPostGugun(postDto.getPostGugun());
            post.get().setPostDong(postDto.getPostDong());
            post.get().setPostLanguage(postDto.getPostLanguage());
            
            return p;
        })

            .map(p -> postRepository.save(p));

여기서 postDto는 수정한 데이터 값이다.

수정한 데이터 값을 findById 메서드로 가져온 post 변수에 map()메서드로 저장하였다.

여기서 문제점은 @Entity 클래스에는 사실 @Setter lombok 라이브러리를 사용하면 좋지 않다고 한다.

그 이유는 @Setter를 사용하면 의도가 불명확하고 변경하면 안되는 중요한 값임에도 불구하고 변경 가능한 값으로 착각할 수 있기 때문이다.

하지만 이 setter를 수정하는 부분에서만 사용한다면 그래도 무분별하게 사용하지는 않을 것 같다는 생각이 들었다.

그리고 setter가 아니면 어떤 방식으로 수정 메서드를 작성해야될 지 모르겠어서 사용한 것도 있다.

이 부분은 나중에 다른 프로젝트를 하거나 할때 다시 찾아봐야할 것 같다.

게시글 수정 서비스

public Optional<PostEntity> edit(Long postId, PostDto postDto) {
        Optional<PostEntity> post = postRepository.findById(postId);

       
        return post.map(p -> {
            post.get().setTitle(postDto.getTitle());
            post.get().setDescription(postDto.getDescription());
            post.get().setPostSido(postDto.getPostSido());
            post.get().setPostGugun(postDto.getPostGugun());
            post.get().setPostDong(postDto.getPostDong());
            post.get().setPostLanguage(postDto.getPostLanguage());
            
            return p;
        })

            .map(p -> postRepository.save(p));

    }

의존성 추가 문제점

저번 회고록때 썼던 것인데,

implementation 'org.springframework.boot:spring-boot-starter-validation'

validation 라이브러리의 의존성이 추가가 안되서 @NotNull 어노테이션을 사용할 수 없었다.

그래서 vscode에서의 데이터베이스 설정에서 NotNull을 설정해 주었다.

그런데 문제가 매번 데이터베이스 설정을 해줘야 하는 것이었다.

MySQL을 껐다 키면 해당 설정이 자꾸 꺼지는 것이었다.

오늘은 로그인 세션 기능을 만들기 위해 구글링을 하다가, 스프링 시큐리티를 사용하면 좀 더 편하게 로그인 기능을 사용할 수 있는 것을 알게 되었다.

그래서 Spring Security 라이브러리를 추가하기 위해 build.gradle에 의존성을 추가했다.

그런데 아무리 build.gradle을 리프레시 해도 의존성이 추가가 되지 않는 것이다.

여러번 해보다 안되서 결국 구글링을 해보았는데,

Java: Clean the Java language server workspace

vscode에서 이 방법을 사용해 자바를 새로고침 하는 방법이 있어서 해보았다.

그 후 다시 서버를 돌려보았더니, spring security의 의존성이 추가가 된 것을 확인 할 수 있었다.

그래서 혹시 전에 의존성 추가했던 validation의존성이 생각나서 Entity클래스에 들어가 @NotNull 어노테이션을 사용해 보았는데, 오류가 나지 않고 잘 작동 되는 것을 확인할 수 있었다.

결국 @NotNull 어노테이션도 쓸 수 있게 되었다.


오늘은 생각보다 뿌듯한 하루 였던 것 같다.

전에 안되던 오류들도 잘 처리 했고, 몇날 몇일 생각했던 게시글 수정 메서드도 완성을 해버려서 기분이 좋았다.

이제 게시글 CRUD 메서드를 다 만들었긴 했지만, 앞으로 갈길은 멀다.

오늘 내가 겪었던 쾌감을 잘 기억해서 내일도 그런 쾌감을 느낄 수 있도록 열심히 해보자!!

profile
개발자가 되는 그날까지

0개의 댓글