분류 전체보기 (38) 썸네일형 리스트형 Spring Security 사용자 권한에 따른 API 접근 설정하기 서론 근 3일동안 과제 테스트가 있어 실컷 요구사항에 맞춰 서비스코드 작업을 하고 단위 테스트 작업을 마쳤다. 요구사항 중 권한에 따른 제약이 있었다. 회원을 구분짓고 상품에 대한 수정,삭제,생성의 권한은 판매자만 있도록 설정하는것이였다. 이 요구사항을 보고 Spring Security의 Role을 이용해야겠다는 생각이 떠올라서 이전에 사이드 프로젝트에서 구현한 내용들을 바탕으로 Jwt와 Spring Security를 기반으로 인증 인가 작업을 진행했었고, 오늘 단위 테스트 작업을 마치고 API를 작업 후 통합 테스트를 진행 하는데 문제가 발생했다. 본론 API 작업 이후 Security Config 파일에 API의 Path와 Method를 기반으로 권한에 따른 접근을 처리했다. authorizeRequ.. Spring Security 401,403 Custom Response 적용하기 서론 사이드프로젝트 문서 작업을 하며 통합 테스트를 하는 도중, 이전부터 처리가 되지 않았던 403 예외쪽 커스터마이징 문제를 해결해야 겠다는 생각을 했다. 프론트 개발자와 협업을 하며 모든 예외에 대한 응답은 공통 규격을 사용하기로 했었기 때문에 이전에 401 예외는 커스터마이징을 통해 적용이 되어있었으나 403은 자꾸만 아래와 같이 응답을 하고 있었다. 본론 우선 Spring Security는 401에러와 403 에러가 날 때 따로 설정한 Handler가 없으면 위와 같은 응답 형식을 띈다고 한다. 나는 이 내용을 잘 몰랐기 때문에 기존 코드에 꼼수를 통해 401은 예외 처리를 했지만, 403을 위해서는 Spring Security 설정이 필요해 보였다. 따라서 401(인증)과 403(인가)의 Han.. MySQL , JPA 에서의 Batch Insert 적용기 퇴근 후 어제에 이어 사이드 프로젝트에서의 회원 언급 기능에 대해서 작업을 진행하려고 했다. (사이드 프로젝트는 이력서를 올리고, 이력서의 타입이 public하다면 Hub에, private하면 Mentioned 카테고리에 들어가고, Mentioned 카테고리에서는 이력서에 언급된 회원들만 조회 할 수 있는 기능을 기획하였다.) 오늘은 어제의 테스트케이스를 바탕으로 end-point를 구현하려고 하였으나 문득, 이력서가 없는데 어떻게 멘션을 하지? 라는 생각이 들었고, 테스트 케이스를 작성하며 생각했던건 언급을 단 건으로만 추가를 하는 로직으로 작성을 하고 있었다. 하지만 선행 조건으로는 이력서가 존재해야 멘션이 가능하였기 때문에, 단건 추가가 아닌 이력서 작성시 멘션을 추가하는 API를 목표로 구현을 했.. JPA 프록시 객체 equals의 Override 개요 사이드 프로젝트 도중, Spring Security를 통해 인가된 회원을 통해 작업을 진행했다. @AuthenticationPrincipal 어노테이션을 이용해 Members 엔티티를 가져와 작업을 처리했었는데 이 @AuthenticationPrincipal은 SpringSecurity에서 프록시 객체로 전달을 했다. 다른 Domain의 테스트 코드를 작성하는 도중 Members의 일부 필드가 프록시로 되어있는경우 완전히 필드가 매핑되어있는 id가 같은 두 엔티티를 equals를 했을 때 false를 반환을 하였다. 회원 1 엔티티 회원 2 엔티티 나는 이번 사이드 프로젝트의 Members 엔티티에 equals를 재정의 하지 않았었고, 이번에 서비스 코드를 작성하면서 엔티티 자체를 비교해야 하는 상.. Spring OAuth 로그인 및 회원가입 RestTemplate > WebClient 리팩토링 개요 사이드 프로젝트를 하며 OAuth 로그인, 회원가입 부분을 진즉 구현을 해두었지만, 공부를 추가적으로 하다보니 당시에 Rest Template을 이용한 구현이 현재는 Deprecated 되었다는 사실을 알게 되었고 리팩토링을 하기로 결정 했다. WebClient에 대해 더 알고 싶다면 다음 블로그를 참고하자 ! https://velog.io/@yyong3519/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-WebClient SpringBoot WebClient 제목: Spring WebClient 쉽게 이해하기작성자: tistory"happycloud-lee"작성자 수정일: 2021년 2월 20일링크: https://happycloud-lee.tistory.co.. Response 규격화 Swagger 처리 개요 사이드 프로젝트 중, 프론트쪽 친구가 응답을 통일성있게 규격화 시켜달라는 요청이 있어 응답을 다음과 같이 통일화 시켰다. 기존 코드 @PostMapping("/jwt/refresh") @ResponseBody public ResponseEntity refreshAccessToken(@RequestHeader(value = "Authorization") String refreshToken){ RefreshAccessTokenResponseDto response = jwtService.validateRefreshToken(refreshToken); return ResponseEntity.ok(response); } ApiCommonResponse 생성 @Getter @Builder @Schema(des.. OAuth, 일반 이메일 회원가입시 중복관련 Trouble Shooting 개요 사이드 프로젝트 로그인 및 회원가입 구현 중 논리적인 문제와 개발적인 문제에 직면을 했다. 우선 논리적인 문제부터 살펴보면 우리는 자체적인 회원가입과(email과 password 로그인) OAuth 회원가입을 분리를 해놨었고, 같은 이메일로 회원가입을 하더라도 다른 계정이라고 간주를 하자고 정의를 하고 작업을 진행을 했었다. 하지만 프론트엔드 친구와 회의를 하다보니 너무 사용자에게 다양한 회원가입 입구를 뚫어주는 느낌이라는 생각이 들어 OAuth 소셜 간 (google, github, kakao)은 이메일이 같아도 다른 계정으로 간주하고 자체 회원가입과는 같은 email로 간주하기로 결정을 했다. 또한 위 로직으로 작업을 하다보니, 개발적인 문제가 발생하였다. 우리 테이블 구조는 현재 위와같이 oa.. Jenkins 파이프라인을 이용한 SpringBoot 자동배포 2 (젠킨스 파이프라인 생성 및 깃허브 액션 연결) 개요 이번 글에서는 저번 글에서 만들어둔 젠킨스에서 파이프라인을 생성하고 깃허브 액션을 연결하도록 하겠다. 우선 나의 프로젝트는 깃허브에 respal이라는 public한 메인 레포지토리가 있고, application.yml을 관리하는 respal-private이라는 private한 레포지토리가 있고 둘은 깃의 서브모듈로 연결이 되어있다. 따라서 파이프라인에서 메인 레포지토리를 클론하며 서브모듈도 가져오는 작업이 필요했었던 상황이였다. Jenkins x Github 연동 SSH 키 생성 젠킨스에서 깃헙 프로젝트로 접근하기 위해서 애플리케이션 서버 인스턴스에 접속하여 SSH키를 생성한다. ssh-keygen -t rsa 이렇게 하면 ~/.ssh 디렉토리 아래에 id_rsa.pub 와 id_rsa 파일이 생긴.. 이전 1 2 3 4 5 다음