TIL
2023.12.10 TIL - oauth2-client 인증 실패 핸들러
Srping oauth2-client 모듈을 활용하여 소셜로그인을 구현하였다. 그 중 인증처리가 실패할 경우 에러 응답을 주기 위해 oauth2 failureHandler를 구현하였다. 인증 실패 커스텀 핸들러 구현 OAuth2 인증실패 시 기본적으로 SimpleUrlAuthenticationFailureHandler가 실패처리를 하게된다. SimpleUrlAuthenticationFailureHandler은 설정 때 받은 url로 (기본값: /login?error) 리다이렉트 시켜 응답을 반환한다. 하지만 구현하는 프로젝트는 REST API 서버이므로 리다이렉트를 시키지 않고 Json 포맷으로 적절한 에러응답을 보내야한다. 그래서 커스텀 핸들러를 구현하고 주입해주어야한다. OAuth2Authentica..
2023.12.08 TIL - REST API 서버 네이버,카카오 소셜 로그인 구현
소셜 로그인 구현 구현 요구사항 중 네이버, 카카오 소셜 로그인 구현이 있어 Spring 에서 제공하는 oauth2-client 모듈을 이용하여 구현했다. 환경 SpringBoot 3.1.5 Java 17 Gradle 8.4 준비사항 build.gradle에서 해당 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' 인증 과정 소셜 로그인 인증 과정은 다음과 같습니다. 1, 2. 사용자가 서버에서 설정된 oauth2 login url을 통해 로그인 요청시 (ex. /api/auth/login/{provider}) 서버에서 로그인페이지로 리다이렉트시킵니다. 3. 로그인을 완료하게되면 인증서버에서 받은 code ..
2023.12.07 TIL - Refresh Token 재발급 구현하기
Jwt를 이용한 토큰 인증방식으로 인증/인가를 구현하게 되면 장점도 있지만 단점도 존재한다. RefreshToken 토큰 인증 방식은 보안에 취약하기 때문에, 보통 유효기간을 짧게 가져간다. 유효기간을 짧게 설정하면 로그인 요청이 많아지게 되어 토큰 방식으로 인증하는 의미가 퇴색된다. 이를 보완하기위해 Jwt AccessToken을 발급할 때, 유효기간을 길게 설정한 토큰인 RefreshToken도 발급하게 된다. RefreshToken은 AccessToken과 마찬가지로 Jwt로 발급하거나 UUID를 활용한 긴 문자열로도 발급한다. 형태의 제한이 없고 식별할 수 있는 값이면 되는 것 같다. 인증 과정 토큰을 이용한 인증 과정은 다음과 같다. 1. 사용자 회원가입 정보 입력. 2. 유효한 데이터가 들어왔..
2023.12.06 TIL - 스프링 시큐리티 RequestMatchers
오늘 한 것 팀 프로젝트 팀 프로젝트 오늘은 어제 작성한 일정대로 시큐리티 인증/인가, 로그인, 회원가입을 구현했다. 전 프로젝트 때도 맡았던 역할이라 구현하는데 어려움은 없었지만 코드 병합 후 다른 팀원이 사용하면서 문제가 하나 발생했다. 시큐리티에서 url 을 검사하는 requestMathcers 에 내가 사용하는 api 만등록을 해두었었다. .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .requestMatchers(PathRequest.toH2Console()).permitAll() .requestMatchers(this.whiteListMapToMvcRequestMatchers(mvc)).perm..
2023.12.05 TIL - 팀 프로젝트 시작
오늘 한 것 팀 프로젝트 S.A 작성 팀 프로젝트 오늘 부터 팀프로젝트를 시작했다. 팀 프로젝트 주제는 백오피스로 SNS, 배달, 익명 커뮤니티를 주제로 개발을 하고 서비스 관리를 위한 백오피스까지 구현하는 것이다. 프로젝트 발제 후 팀원들과 같이 프로젝트 S.A를 작성했다. 꽤나 많은 요구사항이 있어 프로젝트 설계를 하는데 오래 걸렸다. 그래도 기본적인 설계는 잘 잡고 들어가는 것 같아서 만족스럽다. 이제 다시 9 to 9에서 9 to 4 로 돌아갈 때가 됐다. 이번 프로젝트도 맡은 역할에 충실히 하고 팀원들과 잘 협업해서 프로젝트를 잘 마쳤으면 좋겠다. 프로젝트 소개는 따로 포스팅해서 올립니다. 2023.12.05 - [프로젝트] - [프로젝트] ipv4 조 - 'X보다 더 나은 Y' ( thread..
2023.12.04 TIL - JaCoCo 플러그인 적용 (feat. 테스트 커버리지확인 플러그인)
내일배움 캠프 심화과제 추가 요건으로 테스트 커버리지 확인을 위한 JaCoCo 플러그인을 적용하기로 했습니다. https://mocha-coding.tistory.com/50 [JaCoCo] Springboot3.x.x 설정 및 커버리지 확인하기 심화과제 추가 요건 사항으로 Jacoco 를 적용하고 테스트 커버리지를 높이는 것이 있어 설정하고, 확인하는 방법을 쓰려고합니다. 우선 적용한 환경입니다. - SpringBoot 3.1.5 - Gradle: 8.4 JaCoCo 플러그 mocha-coding.tistory.com 테스트 코드를 작성하고 테스트 커버리지를 작성하면서 필요한 테스트에 대해 확인할 수 있었고 프로덕션 코드에서 추가해야될 방어로직이라던가 추가 기능들에 대해 다시 생각할 수 있는 기회가 생..
2023.12.01 TIL - 테스트 환경 (H2) 분리 중 만난 문제 (Feat. Security MvcRequestMatcher)
Repository 테스트 코드 작성을 위해 테스트 DB로 H2 를 사용하기 위해 설정을 하던 중 문제가 발생했다. 문제 application.yaml 을 환경 별로 분리하고 h2 관련 설정을 한 후 어플리케이션을 실행하니 다음과 같은 에러가 나온다. rg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Unsatisfied dependency expressed through method 'setFilterChains' par..
2023.11.30 TIL - 테스트의 범위..
내배캠 심화 개인 과제로 전에 했던 to-do-list 앱에 대한 계층별 단위 테스트 코드를 작성하고있다. 코드 작성 중 할 일 완료 처리 기능 에 대해 단위 테스트 코드를 작성하려니 해당 메소드 타입이 void 여서 어떻게 테스트를 작성해야할지 고민을 했다. 고민한 문제 public void completeToDo(Long toDoId, MemberDto memberDto) { ToDo toDo = toDoRepository.findById(toDoId) // 완료처리할 할 일 Find .orElseThrow(ToDoNotFoundException::new); //권한 검증 checkMember(toDo.getMember().getId(), memberDto.id(), ACCESS_DENIED_MESS..