Spring 22

[Spring] JWT를 이용한 인증,인가 동작 원리

Spring - 인증 과정 (첫 로그인 과정) 1. 클라이언트 요청   - 클라이언트가 `/api/auth/login` 엔드포인트로 AuthRequest(username, password)를 POST 요청2. 내장 Tomcat 서버   - Tomcat 서버가 요청을 처리하여 AuthController로 전달합3. AuthController - authenticate 호출   - AuthController는 AuthenticationManager를 사용해 인증을 시도   - `authenticate()`메서드에 `UsernamePasswordAuthenticationToken`을 전달하여 인증을 위임4. AuthenticationManager   - AuthenticationManager는 사용자 인증을 ..

[Spring] JWT 구현 순서 with. Spring Security

최종 순서 요약이 순서를 따라가면 Spring Security와 JWT 기반 인증을 효율적이고 최신 방식으로 구현 가능!! 🚀User 엔티티와 리포지토리 구현: 사용자 데이터 저장 및 조회를 위한 기반.UserPrincipal과 CustomUserDetailsService 구현: Spring Security와 사용자 데이터 연동.JwtUtil 구현: JWT 생성, 검증, 파싱 로직JwtRequestFilter 구현: Spring Security 필터 체인에 JWT 기반 인증 추가.Spring Security 설정: 필터 체인, 세션 관리, 접근 제어 설정.인증 컨트롤러 구현: 로그인 및 JWT 발급/검증 API 제공. 1. User 엔티티와 리포지토리 구현목적: 애플리케이션에서 사용자 정보를 데이터베이..

스프링 Swagger 구현 방법

배경 스프링에서도 몇가지 설정만하면 쉽게 Swagger를 사용할 수 있음 개념 정의: 개발자가 API 문서를 쉽게 작성할 수 있도록 도와주는 오픈 소스 SW 프레임워크 목적: API 소비자가 빠르게 API를 이해하고 사용할 수 있게 하고, 손쉽게 실제 API 요청을 테스트하고 결과를 볼 수 있음 장점: 표준화된 API 문서: 자동으로 표준화된 API 문서를 생성 시각적 편집기(UI): Swagger UI를 통해 API를 시각적으로 볼 수 있음 구현 순서 요약 의존성 추가 설정파일(Config) 추가 컨트롤러에서 애너테이션 사용 +) 스프링 시큐리티 사용시 접근 권한 설정 1. 의존성 추가 build.gradle에 아래 의존성 추가 //swagger implementation 'org.springdoc:s..

Spring/Swagger 2024.04.03

FCM 알림 전송

배경 프로젝트 진행 중에 스프링에서 프론트(앱)으로 알림을 보내야하는 경우가 생겼음 그래서 개념 구현 순서 요약 Firebase 프로젝트 생성 restTemplate 준비 프론트에 알림을 전송하는 Util 클래스 작성 Firebase 의존성 추가 resource 폴더 + .gitignore에 .json 파일 추가 설정파일(application.yml)에 프로젝트 id 추가 config 패키지에 FirebaseConfig 클래스 작성 common/fcm 패키지에 FCMessage DTO 작성 common/fcm 패키지에 FCMUtil 클래스 작성 프론트에서 디바이스 토큰을 받아 DB에 저장하는 API 코드 작성 domain 패키지에 FCMToken Entitiy 작성 디바이스 토큰 저장 API 작성 (re..

Spring/FCM 2024.04.01

사용자 정의 예외(Custom exception)

배경 정의: 서버에서 사용자가 부적절한 방식이나 접근을 할 때, 개발자가 직접 예외를 처리하기 위해 사용하는 것 목적: 사용자의 오류를 명확히 알리기 위함. (표준 예외만 발생시키면 정확한 문제를 파악하기 어려움) 예외 정의 구조 이 시스템은 다음과 같은 4개의 주요 클래스로 구성됩니다. CustomErrorCode 역할: 에러 코드를 정의하기 위한 enum 클래스 사용. 위치: error/code 에러 코드 인터페이스 기능: 모든 에러 코드에 공통적인 인터페이스 정의. 주요 요소: HTTP 상태, 코드, 메시지 public interface ErrorCode { String getCode(); String getMessage(); HttpStatus getStatus(); } 에러 코드 구현 설명: 위..

Spring 2024.03.25

Service 테스트 - 예외 발생 방법

개념 실패 테스트를 진행하다보면, 특정 예외가 잘 잡아지는지 확인할 필요가 있다. 따라서, 예외를 어떻게 발생시키는지 알아야할 필요가 있다. 테스트 대상 클래스 예외 처리를 할 때, 테스트 대상 클래스에서만 예외 발생 여부를 확인할 때 //엔티티로만 예외 값 검증을 하는 경우 private void checkPermission(Member member, Product product) { if (!(product.isOwner(member) || member.isAdmin())) { throw new BusinessException(INSUFFICIENT_PERMISSION); } } 확인 방법 테스트 대상 메서드를 호출할 때, 잘못된 값을 전달을 하면 됨 //given String name = "상품1"..

Spring/테스트 2024.03.12

Service - 삭제 테스트

개념 특정 객체가 정상적으로 삭제되는지 확인하는 테스트 주의!: 서비스 테스트는 실제 DB에 영향을 주지 않으므로, 리파지토리의 함수의 호출 자체만을 확인해야한다. 성공 테스트 Given 삭제를 진행할 더미 데이터를 정보를 추가한다. 단, 실제 DB에 더미 데이터를 추가하는 것이 아님 (그냥 준비만 하면 됨) // given // 멤버 Member owner = createMember(); Member member2 = Member.of(1000, Status.ACTIVE, "2222", Role.USER); Member member3 = Member.of(1000, Status.ACTIVE, "3333", Role.USER); CustomMemberDetails memberDetails = new Cu..

Spring/테스트 2024.03.12

Service - 생성 테스트

개념 특정 객체가 정상적으로 생성되는지 확인하는 테스트 주의!: 서비스 테스트는 실제 DB에 영향을 주지 않으므로, 리파지토리의 함수의 호출 자체만을 확인해야한다. 성공 테스트 given 생성에 필요한 더미 정보들을 준비한다. ( 메서드의 파라미터 정보들 ) 예시) 상품 등록에 메서드가 상품 등록 정보(dto), 멤버 정보가 필요한 경우 productService.createProduct(dto, memberDetails); @Test void 상품_등록_성공() { // given //멤버 정보 int mileage = 1000; Status status = Status.ACTIVE; String socialId = "1111"; Role role = Role.USER; Member member = M..

Spring/테스트 2024.03.11