[Spring Boot 3.x] accessToken & refreshToken with Redis
·
Spring Boot/Sprng Boot Sample Code
1. JwtProviderpackage com.example.springboot3template.common.security;import com.example.springboot3template.auth.domain.entity.UserRoleEnum;import io.jsonwebtoken.Claims;import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.io.Decoders;import io.jsonwebtoken.security.Keys;import jakarta.annotation.PostConstruct;import jakarta.servlet.http.Cookie;import jak..
[Spring Boot 3.x] 6. @ControllerAdvice를 활용한 Global Exception Handling 전역 예외 처리
·
Spring Boot/Sprng Boot Sample Code
기존에 서비스 로직에 예외처리가 되어있어 예외 상황 발생시 처리는 되지만 대부분의 경우 status가 403이 출력된다. 예를들어 아래와 같이 중복된 사용자에 대해 예외를 발생시키는 로직을 만들어두고 요청을 보내면// 회원가입@Transactionalpublic void signUp(SignUpReq req) { String username = req.getUsername(); String password = passwordEncoder.encode(req.getPassword()); UserRoleEnum role = req.getRole(); // 회원 중복 확인 Optional checkUsername = userRepository.findByUsername(userna..
[Spring Boot 3.x] 5. @Valid 어노테이션을 통한 DTO validation 설정
·
Spring Boot/Sprng Boot Sample Code
1. 벨리데이션이란?입력된 데이터가 올바른 값인지 검증하는 과정 여기서 올바른 값이 의미하는것은? 1. 형식이 올바른지예) 회원가입 시 아이디를 이메일로 사용할 경우, 입력된 값이 이메일 형식(user@example.com)을 충족해야 한다.일반적으로 이러한 형식 검증은 Entity, DTO에서 수행한다. 2. 비즈니스 규칙에 맞는지예) 회원가입 시, 입력된 이메일이 이미 존재하는 경우 중복 가입을 방지해야 한다.이는 "이메일은 유니크해야 한다"는 비즈니스 규칙을 검증하는 과정이다. 일반적으로 이러한 비즈니스 규칙에 맞는지 검증하는 과정은 서비스 로직에 포함된다. // 회원 중복 확인 Optional checkUsername = userRepository.findByUserna..
Spring Boot 에서 네이버 클라우드 Object Storage 에 파일 업로드
·
Spring Boot/Sprng Boot Sample Code
1. 네이버 클라우드 플랫폼에서 Object Storage 이용신청처음 가입해 결제정보를 등록하면 10만원에 해당하는 크래딧을 주기 때문에 테스트 용도로는 추가적인 결제 없이 충분히 활용 가능하다. https://www.ncloud.com/product/storage/objectStorage 네이버 클라우드 플랫폼 Naver Cloud Flatform -> 서비스 -> Storage -> Object Storage 2. 버킷 생성https://console.ncloud.com/objectStorage/objectStorageList 메인페이지 -> 콘솔 -> Object Storage -> Bucket Management -> 버킷생성 3. 인증키 생성마이페이지 -> 계정관리 -> 인증키 관리 -> 신큐..
[SpringBoot 3.x] 4. @PreAuthorize 어노테이션을 이용한 API 인가 설정
·
Spring Boot/Sprng Boot Sample Code
본인 정보 조회와 같은 API의 경우 로그인 후 접속중인 본인의 정보를 조회하는 것이기 때문에 인증(로그인)만 필요할 뿐인가를 따로 설정하지는 않았다. 하지만 어떤 API의 경우는 특정한 권한을 갖고 있는 사람만 조회할 수 있어야 한다. 예를들어 자신의 정보가 아닌 다른 사용자의 정보를 조회하는 API의 경우 일반 사용자가 접근하면 안되기 때문에 인가 설정을 해줘야 한다. 1. 코드1. @EnableMethodSecurity 어노테이션 추가@PreAuthorize, @Secured 어노테이션을 사용하기 위해서는 Security 설정을 해줘야 한다.SecurityConfig 클래스가 있다면 아래 어노테이션을 추가 해주면 된다.@EnableMethodSecurity 2. @PreAuthorize 어노테이션 ..
[Spring Boot 3.x] 3. JWT 토큰 인증(filter) & API 테스트
·
Spring Boot/Sprng Boot Sample Code
1. 개발환경카테고리도구/기술프로그래밍 언어Java 17프레임워크Spring Boot 3.4.2빌드 도구gradle데이터베이스MySQLORM 도구Spring Data JPAIDEIntelliJ버전 관리Git, GitHub, GitLab패키지 관리Maven CentralAPI 문서화Swagger로깅SLF4J 2.build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.4.2' id 'io.spring.dependency-management' version '1.1.7'}group = 'com.example'version = '0.0.1-SNAPSHOT'java { toolchain { language..
[Spring Boot 3.x] 2. JWT 토큰과 쿠키를 이용한 로그인 구현
·
Spring Boot/Sprng Boot Sample Code
1. 개발환경카테고리도구/기술프로그래밍 언어Java 17프레임워크Spring Boot 3.4.2빌드 도구gradle데이터베이스MySQLORM 도구Spring Data JPAIDEIntelliJ버전 관리Git, GitHub, GitLab패키지 관리Maven CentralAPI 문서화Swagger로깅SLF4J 2. build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.4.2' id 'io.spring.dependency-management' version '1.1.7'}group = 'com.example'version = '0.0.1-SNAPSHOT'java { toolchain { languag..
[Spring Boot 3.x] 1. 회원가입 구현
·
Spring Boot/Sprng Boot Sample Code
거의 모든 웹 애플리케이션의 시작인 회원가입 로그인 중 회원가입을 구현해 보려 한다. 1. 개발환경기본적으로 스프링부트 3, 자바는 17을 사용중이다.데이터 베이스는 MySQLJPA를 사용해 따로 SQL문을 작성하지 않고 작업하고 있다.카테고리도구/기술프로그래밍 언어Java 17프레임워크Spring Boot 3.4.2빌드 도구gradle데이터베이스MySQLORM 도구Spring Data JPAIDEIntelliJ버전 관리Git, GitHub, GitLab패키지 관리Maven CentralAPI 문서화Swagger로깅SLF4J 2. build.gradle의존성은 기본적인 프로젝트 실행을 위한 web starter와, mysql, jpa, 비밀번호 암호화를 위한 security 그리고 편의를 위해 lombo..
build.gradle 이해하기
·
Spring Boot/Sprng Boot Sample Code
카테고리도구/기술프로그래밍 언어Java 17프레임워크Spring Boot 3.4.2빌드 도구gradle데이터베이스MySQLORM 도구Spring Data JPAIDEInteliJ버전 관리Git, GitHub, GitLab패키지 관리Maven CentralAPI 문서화Swagger로깅SLF4J배포 도구미정운영 환경미정CI/CD 도구Jenkins or GitHub Actions 1. 플러그인plugins { id 'java' id 'org.springframework.boot' version '3.4.2' id 'io.spring.dependency-management' version '1.1.7'} 1. id 'java'gradle이 Java 프로젝트로 동작할 수 있도록 필요한 태스크와 ..