Server/Spring&Spring Boot

    [Spring] Spotless + Pre Commit

    [Spring] Spotless + Pre Commit

    Spotless Spotless는 코드 컨벤션을 지정한 규칙에 맞게 설정해 주는 툴입니다. 간단하게 build.gradle에 스크립트를 추가한 후 터미널에서 명령어를 입력하면 적용할 수 있습니다. 1. build.gradle의 최상단에 존재하는 plugins에 코드를 추가합니다. plugins { id 'java' ... id "com.diffplug.spotless" version "6.20.0" } 2. 공식문서의 Java 코드 부분을 build.gradle에 추가합니다. spotless { java { // Use the default importOrder configuration importOrder() // optional: you can specify import groups directly ..

    [Spring] @Controller, @Service, @Repository 어노테이션 차이점. 나만의 @Component 어노테이션 생성

    공부 이유 개발을 하다 보면 @Controller, @service, @Repository 어노테이션을 각 계층에 맞게 붙여서 사용하게 된다. 여러 교육을 받으면서 이 어노테이션이 무슨 차이를 가지고 있는지 설명을 들은 적이 없다. 그냥 Controller Class에는 @Controller 붙이고, Service Class에는 @Service 붙이라는 이야기를 듣고, 사용하기 급급했던 것 같다. 추후에 @RestController를 알게 되면서 @Controller와 @RestController의 차이를 개인적으로 공부하게 되었지만.. 어노테이션 비교 각 어노테이션을 타고 어떻게 구성되어 있는지 한 번 알아보자 @Controller @Target(ElementType.TYPE) @Retention(Re..

    [Spring Security] UserDetails를 User에 구현하여 사용하기.

    Spring Seucurity를 설정하다 보면 UserDetailsService를 통해 가입된 회원인지 확인하여 반환하는 메서드를 구현하게 된다. Spring Security Config @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { ... @Bean public UserDetailsService userDetailsService() { return email -> memberRepository.findByMemberEmail(email) .orElseThrow(() -> new UsernameNotFoundException("존재하지 않는 회원입니다.")); } } 이렇게 작성하고 나면, 바..

    [Refactor] boolean을 사용하여 메서드 정리

    개선이 필요했던 이유 개발을 진행하던 도중 요청에 대해 수락, 거절을 해야 하는 메서드를 생성하게 되었다. 컨트롤러에서 어떤 요청을 타고 들어오느냐에 따라 accept, refuse 메서드를 선택하게 된다. 90%에 대한 로직은 동일하고 마지막 부분에 accept, refuse에 따라 상태변환 메서드 한 줄만 달라지는 메서드였다. 코드 @Transactional public void acceptFriendRequest(Long receiverNo, Long requesterNo) { Member requester = memberRepository.findById(requesterNo).orElseThrow( () -> { throw new OnlyUAppException(ErrorCode.MEMBER_N..

    [Spring] @Builder 사용시, 초기화해야할 필드가 존재할 때 발생하는 에러. @Builder will ignore the initializing expression entirely

    [Spring] @Builder 사용시, 초기화해야할 필드가 존재할 때 발생하는 에러. @Builder will ignore the initializing expression entirely

    문제 WebSocket을 사용하는 예제를 수정하며 따라가고 있을 때 다음과 같은 에러가 발생하였다. @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final. 생성자를 사용하여 초기화하는 방법 대신 빌더를 사용하여 객체를 초기화 하는 방법을 사용하기 위해 @Builder를 사용했는데 이로 인하여 에러가 발생한 것이었다. 문제 해결 다행히도 해당 문제에 대해서는 에러 메세지에서 해..

    [Docs] Spring Rest Docs HTML 출력하는 법.

    [Docs] Spring Rest Docs HTML 출력하는 법.

    사용자분들이 올리신 글들을 보면 Build를 할 경우, 설정에 따라 자동적으로 *.html 파일 출력이 이뤄진다고 적혀있었다. 하지만 아무리 Build를 눌러도 반응이 없고, 직접적으로 Task를 돌려도 반응이 없어서 다시 찾아보니, Template라는 게 필요한 것 같았다. Templates 설정 Spring REST Docs Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test, WebTestClient, or REST Assured. docs.spring.io 위의 Spring REST Docs의 Reference Doc의 Usin..

    [Spring Security] Spring Security을 추가하면 왜 로그인 화면으로 넘어가는 걸까?

    [Spring Security] Spring Security을 추가하면 왜 로그인 화면으로 넘어가는 걸까?

    의문 build.gradle에 Spring Security를 추가하게 되면 로그인 화면으로 넘어가는 것을 볼 수 있다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' } 그렇다면 왜 로그인 화면으로 넘어가게 되는 걸까? 원인을 찾아라 우리는 로그인 화면으로 넘어가지 않도록 SpringConfig라는 것을 만들고, SeuciryFilterChain를 재정의하며 permitAll() 메서드를 사용해서 로그인 창이 뜨지 않고 원하는 페이지에 접속할 수 있도록 설정하고 있다. 그래서 SecurityFilterChain에 대해 알아보기로 했다. SecurityFilterChain public interfac..

    [Spring colud] open feign 사용법

    사용 계기 공공 api를 사용하는 미니 프로젝트를 진행하던 도중, 스프링 내부에서 외부 api를 호출해야 하는 상황이 발생. 기존에는 RestTemplate라는 것을 사용하였으나, Netfilx에서 FeignClient라는 것을 개발하여 대체되었다. 그래서 처음에는 Spring Cloud Nextlix Feign으로 불리었으나, 오픈 소스 변경 후 Spring Colud OpenFeign에 통합되면서 이름이 바뀌었고 SpringMVC 어노테이션에 대한 지원 및 HttpMessageConverters를 사용할 수 있게 되었다. 의존성 추가 dependencies { ... implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:3...