게시판 프로젝트 12

[Spring Boot] 게시판 프로젝트 v2.0 - JWT를 이용한 회원가입 및 로그인 구현 #6 Config, Filter, DTO, Contoller

JWT 프로젝트도 이제 마무리에 다다랐다.Service를 구현한 것으로 굵직한 로직은 마무리 했기 때문에 이제는 실질적으로 클라이언트와 통신하기 위한 설정들을 해주면 된다.1. Configcom.security_board.config.DataConfigpackage com.security_board.config;@Configuration@RequiredArgsConstructor@EnableJpaRepositories(basePackages = { "com.security_board.board.repository", "com.security_board.security.member.repository" })@EnableRedisRepositories(basePackages = "com.security_b..

[Spring Boot] 게시판 프로젝트 v2.0 - JWT를 이용한 회원가입 및 로그인 구현 #5 Domain, Repository, Service

본래 JWT는 따로 저장소를 사용하지 않기 때문에 Domain이나 Repository가 필요하지 않지만 이 프로젝트에서는 RTR방식을 사용해 Redis에 Token을 저장하고 있기 때문에 Redis를 활용하기 위한 Domain과 Repository 패키지를 추가로 만들었다.1. Domaincom.security_board.security.jwt.domain.Tokenpackage com.security_board.security.jwt.domain;import org.springframework.data.annotation.Id;import org.springframework.data.redis.core.RedisHash;import org.springframework.data.redis.core.Tim..

[Spring Boot] 게시판 프로젝트 v2.0 - JWT를 이용한 회원가입 및 로그인 구현 #4 Util

JWT에 대한 이론은 저번 글에서 충분히 알아봤고 이제부터 본격적인 구현에 들어가보자우선 이번엔 Board 때와 다르게 util 패키지부터 시작해볼텐데 JWT를 실직적으로 발급하는 로직에 관한 클래스들이 대부분 여기 모여있기 때문에 처음으로 짚고 넘어가야 이해가 쉬울 것이라 생각했다.com.security_board.security.jwt.util.JwtRulepackage com.security_board.security.jwt.util;import lombok.Getter;import lombok.RequiredArgsConstructor;@RequiredArgsConstructor@Getterpublic enum JwtRule { JWT_ISSUE_HEADER("Set-Cookie"), JWT_RE..

[Spring Boot] 게시판 프로젝트 v2.0 - JWT를 이용한 회원가입 및 로그인 구현 #3 JWT 알아보기(Access Token, Refresh Token 그리고 RTR)

JWT(Json Web Token)일반적으로 클라이언트와 서버 사이에서 통신할 때 정보를 비밀리에 전달하거나 권한을 부여하고 인증 하기위해 사용하는 토큰이다.이름에서 알 수 있듯이 웹상에서 정보를 Json 형태로 주고 받기 위해 표준규약에 따라 생성한 암호화된 토큰 형태로 제작되며 따로 디코딩 하지 않으면 해석할 수 없는 String형태로 되어있다.토큰 인증 방식의 한 가지 종류로서, 클라이언트가 토큰을 가지고 있다가 API 요청을 할 때 JWT를 전달하여 인증 & 인가를 진행하게 된다.JWT의 구성요소JWT는 헤더(Header), 페이로드(Payload), 서명(Signature) 세 파트로 구성되는데 Json으로 포맷된 각 부분은 Base64로 인코딩되어 표현되며, 각각의 부분을 이어주기 위해 구분자..

[Spring Boot] 게시판 프로젝트 v2.0 - JWT를 이용한 회원가입 및 로그인 구현 #2 Member 패키지

Member 패키지는 기본적인 회원관리를 위한 클래스들이 담겨있는 패키지로 굉장히 간단한 회원가입 절차만을 구현했기 때문에 클래스들이 복잡하지 않고 각 패키지의 기능이나 역할들에 대해서는 앞선 게시글에서 충분히 다뤘기 때문에 간단하게 소개만 하고 넘어가려고 한다.#1. Domaincom.security_board.security.member.domain.Memberpackage com.security_board.security.member.domain;import com.security_board.security.util.Role;import jakarta.persistence.*;import lombok.AccessLevel;import lombok.AllArgsConstructor;import lom..

[Spring Boot] 게시판 프로젝트 v2.0 - JWT를 이용한 회원가입 및 로그인 구현 #1 세팅

#1. 게시판 프로젝트 v2.0부지런히 프로젝트를 버전업 하기위해 노력했는데 JWT가 생각보다 쉽지 않았다. JWT는 개발 공부를 시작한 초기에 굉장히 간단한 형태로 적용했었고 Spring Security는 처음 다뤄보는지라 Docs나 다른 자료들을 많이 참고해야했는데 이게 개념은 간단한 것 같은데 매커니즘은 생각만큼 간단하지 않아 시행착오도 많이 겪었다. 일주일간 코드에도 꽤 많은 변화를 줘가며 온몸비틀기를 한 결과 토큰 발급과 그 토큰을 기반으로 한 인증 과정을 성공적으로 만들어 낼 수 있었다.#2. 요구사항 정의전체 게시글 목록 조회게시글 전체에 대하여 제목, 작성자명 조회하기게시글 ID 내림차순으로 정렬하기게시글 작성제목, 작성자명, 작성 내용 등을 DB에 저장선택한 게시글 조회선택한 게시글의 제..

[Spring Boot] 게시판 프로젝트 외전 #1 JUnit과 Mockito를 이용한 테스트 - 실전

앞서 게시글에서 JUnit과 Mockito를 활용하기 위한 이론을 공부했다면 이제 실제 코드에 적용시켜 볼 시간이다.우선 Controller와 Service 두 계층에 대해서 단위테스트를 진행할 예정이다.#1. Dependency 설정사용할 JUnit과 AssertJ, Mockito 모두 spring-boot-starter-test에 포함되어 있으므로 혹시 build.gradle에 해당 항목이 없다면 추가해주면 된다.dependencies { ... testImplementation 'org.springframework.boot:spring-boot-starter-test'}#2. 컨트롤러 단위 테스트@WebMvcTestpublic class BoardControllerTest { @MockBean pr..

[Spring Boot] 게시판 프로젝트 외전 #1 JUnit과 Mockito를 이용한 테스트 - 이론

게시판 프로젝트를 1차적으로 마무리하고 나서 계속 버전업을 시키려고 어떤 걸 해야할까 생각을 하던 중 정처기 공부를 하며 알게 된 Testing을 프로젝트 초기에 적용시켜봐야겠다 생각하고 공부를 시작했다.테스트 코드를 작성하는 건 처음이라 모르는 것 투성이인 상태였고 공부를 위해 기초적인 개념과 용어부터 정리해봤다.#1. 단위 테스트(Unit Test)1.단위 테스트란?소프트웨어 개발에서 개별적인 코드 단위를 테스트하는 것을 의미코드의 작은 부분을 격리시켜 하나의 모듈을 만들어 독립적으로 테스트함으로써 코드의 정확성과 신뢰성을 검증하나의 모듈이란 각 계층에서 하나의 기능 또는 메소드로 이해할 수 있으며 이 기능이 올바르게 동작하는지 독립적으로 테스트하는 것자동화가 되고 반복 가능하며 버그를 빠르게 찾아내..

[Spring Boot] 게시판 프로젝트 #4 Service, Controller 구현

Service : Business Logic을 담당하는 부분. DB로부터 데이터를 받거나 전달해주는 역할을 한다Controller : View로부터 오는 API 요청들을 어떻게 처리할 것인지 정의하는 역할을 한다=> /board/list란 경로로 GET 요청이 왔을 때 어디로 보내고,   /board/post란 경로로 GET 요청이 올 때 어디로 보내고,   POST 요청이 오면 xxService로부터 Data를 받아와서view로 Attribute를 전달하는 등@Controller : Handler가 Scan 할 수 있는 Bean 객체가 되어 Servlet용 컨테이너에 생성된다.@Service, @Repository : 해당 Class를 루트 컨테이너에 Bean 객체로 생성com.board.service..

[Spring Boot] 게시판 프로젝트 #3 DTO, Repository 구현

DTO와 Repository란 무엇일까?DTO(Data Transfer Object) : 계층 간 데이터 교환을 위한 Java BeanRepository : Database에 CRUD 명령을 실행하게 만드는 Interface         (JpaRepository를 extends 하게 되면 CRUD를 사용할 수 있게 된다.)BoardDto : 게시판 API 간에 Data를 전달하는 DTOcom.board.dto.BoardDto.javapackage com.board.dto;import java.time.LocalDateTime;import com.board.domain.Board;import lombok.*;// DTO : 데이터 전달 목적// 데이터를 캡슐화한 데이터 전달 객체@Getter@Sette..