웹 백엔드 개발/Spring Boot 14

[Spring Boot/JWT] JWT로 로그인/로그아웃 구현하기

토큰 기반 인증 1. 토큰 기반 인증이란 토큰을 사용하여 인증하는 방식이다. 서버가 토큰을 생성해서 클라이언트에게 제공하면, 클라이언트는 이 토큰을 가지고 있다가 여러 요청을 토큰과 함께 신청한다. 서버는 토큰을 보고 유효한 사용자인지 검증하여 요청을 수행해준다. 2. 세션 기반 인증과 토큰 기반 인증 세션 기반 인증은 사용자마다 사용자의 정보를 담은 세션을 생성하고 저장해서 인증하는 방식이다. 세션 기반 인증과 토큰 기반 인증의 가장 큰 차이는 요청과 함께 전달하는 정보의 양 차이이다. 토큰 기반 인증의 경우, 검증에 필요한 정보를 모두 담은 토큰을 요청과 함께 전달한다. 즉, 토큰에 회원정보와 유효기간 같은 검증에 필요한 정보도 담겨있어, 토큰만 확인하면 회원의 유효성을 입증할 수 있다. 하지만 세..

[SpringBoot/Java] JavaMailSender로 인증 메일 전송하기

회원가입 및 로그인 기능을 구현하면서, 인증코드를 담은 메일을 보내는 기능을 구현해야 했다. JavaMailSender를 이용하면 어렵지 않게 구현할 수 있다. 크게 아래 두 가지 기능을 구현해 보았다.1. 사용자의 이메일로 6자리의 인증코드를 담은 메일 전송  - 인증 코드 생성  - 인증 코드 저장  - 메일 전송2. 사용자가 입력한 코드가 저장된 인증코드와 일치하는지 확인  구현은 아래와 같이 했다. 우선 build.gradle 파일에 JavaMailSener를 사용하기 위한 의존성을 추가해 준다. /** build.gradle */dependencies { // java mail sender 의존성 추가 implementation 'org.springframework.boot:sprin..

[SpringBoot/오류 해결] Maria DB에 table이 추가되지 않는 문제

Maria DB를 활용하여 User 관련 기능들을 개발하던 중, user table이 DB에 추가되지 않는 문제가 발생했다. 이상한 점은 refresh token table은 잘 추가가 되었는데, User table만 추가되지 않았다는 점이다. 아래 코드는 각각 refresh token과 user에 관한 코드이다. /** RefreshToken.java **/@NoArgsConstructor@Getter@Entitypublic class RefreshToken { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id", updatable=false) private Long id; @Column(name..

[SpringBoot/오류 해결] lombok 작동 관련 문제 해결

jwt 토큰 관련 설정을 위한 코드를 작성하던 중 아래와 같은 오류를 마주했다.Provider.java:71: error: cannot find symbol .setSigningKey(jwtProperties.getSecretKey()) ^ symbol: method getSecretKey() location: variable jwtProperties of type JwtProperties jwtProperties는 JwtProperties class의 object였는데, JwtProperties class는 아래와 같이 정의되어 있었다. 위 오류에서는 getSecretKey method에 관한..

[SpringBoot/백엔드] application.yml 파일 내 민감한 정보 처리하기

application.yml 파일을 작성하다보면, password나 secret key 같이 함부로 공유되면 안되는 민감한 정보를 작성해야 할 때가 많다. 일반적으로 작성되는 application.yml 파일은 아래와 같다. spring: application: name: survey-server datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/survey?serverTimezone=Asia/Seoul username: user password: user jpa: properties: hibernate: show_sql: true ..

[SpirngBoot/오류] 의존성 순환(Circular Dependency) 오류 해결

Spring Boot에서 OAuth2 파트를 공부하면서 만들어 둔 프로그램을 실행시키던 중 아래와 같은 오류가 발생했다. Description:The dependencies of some of the beans in the application context form a cycle:┌─────┐| webOAuthSecurityConfig defined in file [C:\Users\...\build\classes\java\main\com\study\blogproject\config\WebOAuthSecurityConfig.class]↑ ↓| userService defined in file [C:\Users\...\build\classes\java\main\com\study\blogproje..

[API] 알아두면 유용한 응답코드

200번대 코드 ≫ 성공적인 응답200 OK: 요청이 성공적으로 수행ResponseEntity.ok("Succeed");201 Created: 요청 성공적으로 수행 + 새로운 리소스 생성ResponseEntity.status(HttpStatus.CREATED).body("Created");  400번대 코드 ≫ 요청 실패 (클라이언트의 문제)400  Bad Request: 요청한 값이 잘못되어 실패ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Failed")403 Forbidden: 권한이 없어서 실패ResponseEntity.status(HttpStatus.FORBIDDEN);404 Not Found: 요청값으로 찾는 리소스가 없어서 실패ResponseEn..

[Spring Boot] 스프링부트로 test하기

스프링부트에서는 배포나 직접 localhost로 접근하여 여러 가지 경우를 테스트해 보는 것 말고 더 편하게 내가 쓴 코드를 테스트할 수 있는 기능을 제공한다. 그래서 테스트 코드를 어떻게 작성해야 하는지를 기록해보려 한다. 주로 JUnit을 활용한 테스트 방법을 기술한다.  아래 책을 공부 중이다. 신선영, 『스프링 부트3 백엔드 개발자 되기』, 골든레빗(2024)  1. 기본적인 test 방식우선 테스트 코드를 작성할 때는 크게 아래의 흐름을 따른다. given (이런 상황이 주어졌는데)when (이렇게 됐을 때)then (결과가 이렇게 되어야 해) 예를 들어, 기본적인 회원가입 로직을 테스트하기 위해서는 given으로 회원가입하려는 멤버 정보가 주어져야 한다. 그리고 when에서는 회원가입하는 상황..

[Spring Booot] 백엔드 기본 개념 (DTO, Entity, DAO)

1. EntityEntity 클래스는 실제 DB 테이블과 매핑되는 핵심 클래스로, 데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체이다.DB의 테이블과 1대1로 대응된다. Getter의 사용은 지양하고, Setter는 구현하지 않는 것이 좋다. (Builder 패턴으로 사용하는 것이 가장 좋음, Entity의 인스턴스 값들이 무분별하게 변경될 수 있기 때문)@Entity, @Column, @Id 2. DTO (Data Transfer Object)DTO는 계층 간 데이터 교환이 이루어질 수 있도록 하는 객체이다. (계층에 대한 자세한 설명은  https://xxeol.tistory.com/26 참고)단순히 계층간 데이터 교환이 이뤄질 수 있도록 하는 객체이므로, 순수한 데이터 객체여야 한다. ..

[Spring Boot] 스프링부트 기본 개념 (MVC, IoC, DI, AOP, PSA)

1. MVC 패턴참고자료: https://velog.io/@jybin96/Controller-Service-Repository-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C Controller, Service, Repository 가 무엇일까?찾아본 결과 Controller가 무엇인지 알기 전에 MVC 패턴에 대하여 먼저 아는 것이 중요합니다!MVC패턴은 Model-View-Controller의 약자로서 개발을 할 때 3가지 형태로 역학을 나누어 개발하는 방법론입니velog.io  MVC는 Model, View, Controller의 약자로 개발을 할 때, 이 3가지 형태로 나누어 개발하는 방법론이다. 쉽게 이해하면 모든 기능이 몇천 줄의 코드를 가진 하나의 파일로 ..

728x90