Develop 27

[MSA] MSA 전환 프로젝트 - 2. Service Discovery & Eureka

저번 게시글에서는 MSA가 무엇이고 Monolithic Arcitecture나 SOA와는 어떤 부분이 다른지 알아보았다.이번에는 MSA에서 서비스간 통신을 하기 위한 핵심 기술인 Service Discovery 패턴이 무엇인지 그리고 그것을 어떻게 실제로 적용할 수 있는지 알아보고자 한다.01. Load Balancer 와 Load BalancingService Discovery가 무엇인지 알아보려면 Load Blancer가 어떤 것인지부터 알아야할 필요가 있다.2010년대 이후 소프트웨어 아키텍처는 Fragile한 Monolithic Arcitecture에서 Anti-Fragile한 Cloud Native Architecture로 점점 변해왔다.이 Cloud Native Architecture의 큰 특..

[MSA] MSA 전환 프로젝트 - 1. MSA란?

현재 진행중인 게시판 프로젝트의 버전업을 위해 기능 추가 말고 어떤 걸 할 수 있을까 고민하다가 예전에 얼핏 듣고 넘어갔던 MSA를 현재 프로젝트에 적용해 보기로 했다.Board와 Member 그리고 인증을 위한 JWT와 OAUTH로 이루어진 아주 작은 프로젝트지만 이 상태에서 MSA로 전환을 해보는 것이 MSA를 이해하는 데도 분명히 도움이 될 것이고 새로운 기능을 추가하고 확장해 나가는 것도 좋은 경험이 되리라 생각해서 지금 한 번 해보기로 했다.이제 실전으로 들어가기 전에 현재 프로젝트에서 사용중인 Monolithic Architecture는 무엇이고 MSA는 또 무엇인지 알아보는 것으로 시작해보자1. Monolithic Architecture란?지금 만들어진 프로젝트와 같이 규모가 작고 트래픽이 ..

[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.단위 테스트란?소프트웨어 개발에서 개별적인 코드 단위를 테스트하는 것을 의미코드의 작은 부분을 격리시켜 하나의 모듈을 만들어 독립적으로 테스트함으로써 코드의 정확성과 신뢰성을 검증하나의 모듈이란 각 계층에서 하나의 기능 또는 메소드로 이해할 수 있으며 이 기능이 올바르게 동작하는지 독립적으로 테스트하는 것자동화가 되고 반복 가능하며 버그를 빠르게 찾아내..