서버 구성 서버 구성요소Git : 소스/프로파일 관리Config Server : 프로파일/설정 정보Eureka Server: 마이크로서비스 등록/검색API Gateway Server: 마이크로서비스 부하 분산/서비스 라우팅Microservices: 회원, 주문, 상품Queuing System: 마이크로서비스 간 메시지 발행/구독마이크로서비스 (API) 구성요소회원 user-service: 사용자 정보 등록, 조회, 사용자정보/주문내역 조회주문 order-service: 주문 등록, 주문 확인상품 catalog-service: 상품 목록 프로젝트 환경spring boot 3.4.1java 17h2 database, jpaEureka + Spring Cloud Gateway이 둘은 클라우드 네이티브 시스템..
Spring Cloud 특징1. centralized configuration managementsping cloud config server 를 사용하여 설정 정보를 외부에 저장한다.2. Location transparency서비스 등록, 위치정보 확인, 검색 등 -> 넷플릭스의 유레카서버 사용 가능3. Load Distribution (Load Balancing) / 또는 API Gateway서버 요청정보 분산. Ribbon, Spring Cloud Gateway 4. Easier Rest Clinents 서비스 디스커버리: Eureka로드밸런서? 서비스 디스커버리?외부의 다른 서비스들이 마이크로 서비스를 검색하기 위해 사용되는 개념이다.서버/서비스가 어떤 위치에 있는지 저장하여 검색에 관련된 ..
1️⃣ Swagger와 Rest Docs의 특징Rest API를 개발할 때, 흔히 Swagger 또는 Rest docs를 사용해서 API 명세서를 편리하게 작성합니다.두 방법은 각각 명확한 장단점을 가지고 있습니다.SwaggerController와 Dto에 어노테이션 코드를 작성해서 API 명세서를 작성합니다. API 명세서를 위한 코드와 어플리케이션 코드가 함께 혼합되어있어 가독성이 떨어질 수 있습니다.API를 호출할 수 있는 웹 기반 UI가 제공됩니다.Rest Docs컨트롤러 테스트 코드를 작성해 API 명세서를 작성합니다. 자동으로 만들어진 adoc 문서 외에 구조나 목차등은 수동으로 작성해야 합니다.정적인 문서만 생성하기 때문에 swagger 처럼 API를 호출할 수 있는 웹 기반 UI는 제공되지..
Swagger는 API를 호출하는 Controller 및 Model에 몇가지 설정만 추가해주면, 직접 작성하지 않아도 편리하게 Rest API를 문서화해줍니다.Swagger를 이용해 API문서를 생성하는 과정을 기록해보겠습니다.0️⃣ 환경Spring Boot 2.7Spring securitygradle 1️⃣ Swagger 종속성build.gradle에 Swagger 라이브러리를 사용하기 위해 종속성을 추가해줍니다.implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '..
테스트코드에 대한 설명은 테스트코드 에서 작성하였습니다.해당 내용을 바탕으로 직접 프로젝트의 테스트 코드를 작성해보겠습니다.이 글에서는 통합테스트를 진행하지 않았고, api/저장소와 관계없는 비즈니스 어플리케이션 로직에 대한 단위 테스트를 작성하였습니다.1️⃣ 테스트 의존성 추가dependencies { // test testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-test-autoconfigure'}test { useJUnitPlatform()} 2️⃣ 서비스 테스트 설정기본적으로 테스트에 필요한 어노테이션만..
0️⃣ 프로젝트 환경Spring Boot 2.7GradleJava 11, JPARest APISpring Security : Oauth 관련 라이브러리는 사용하지 않았습니다.Oauth2 서버 : Google, Naver, Kakao✔️ 들어가기 앞서Spring Securtiy를 사용했지만 Oauth와 관련된 라이브러리는 사용하지 않았습니다.Spring Security의 기능으로 구현한다면 더 쉽게 구현할 수 있지만, 저는 순수 구현을 통해 Oauth를 이해하는 것을 목표로 하였습니다.추후에 또 Oauth를 구현한다면 관련 Security 라이브러리를 사용해 이해했던 것을 바탕으로 수월하게 구현할 수 있을 것 같습니다.즉, 이 글은 Spring Security에 의존해 Oauth를 구현하는 글이 아닙니다...
앞에서 살펴본 내용은 인증이 필요한 API가 요청되었을때, Spring Security와 JWT Filter가 어떻게 Access Token으로 인증을 처리하는지 알아보았습니다.이젠 인증이 필요없지만 토큰 관리에 있어서 가장 중요한 로그인과 로그아웃의 로직에 대해 알아보겠습니다.1️⃣ 로그인✔️ API 컨트롤러@PostMapping("/login")public ResponseEntity login(@RequestBody @Valid AuthRequest.LoginRequest request){ TokenResponse tokenResponse = authService.login(LoginDto.from(request)); return ResponseEntity.ok().body(tokenRespon..
Rest API는 JSON 데이터로 요청하고 JSON 데이터로 응답하는 것이 표준입니다.이는 오류를 응답할 때에도 같은 방식이 적용됩니다.각 오류상황(정상/오류 등)에 맞는 응답스펙을 정한 뒤, 해당 포맷에 맞게 JSON으로 응답합니다. Request Body{ "id" : "dallae", "pwd" : "password!@#"}Response Body{ "tiemStamp" : "2024-04-28T00:00:00.000+00:00", "status" : 404, "message" : "사용자를 찾을 수 없습니다.", "path" : "/api/login"} 추상클래스로 Exception 규격 설정하기추상클래스는 상속하는 클래스에게 메소드의 구현을 강제하면서, 해당 메소드의 내용을 위임 할 수 있..
서비스가 증가할수록 사용하는 DTO의 개수가 많아지고 관리가 어려워질 수 있습니다.이 경우 내부클래스를 사용하면 가독성이 좋고 관리가 편리해지면서, 역할과 책임도 한 번에 파악할 수 있습니다. (제목-목차와 같은 역할)또한 클래스의 내부에 숨겨져있어 캡슐화에 도움이 됩니다.이 때 주의할 점은, 내부 클래스에 static 키워드를 사용해야한다는 것입니다.0️⃣ staticJAVA에서 static 키워드를 사용해 변수/메소드/생성자를 사용하면, 컴파일 시 클래스가 메모리에 로딩될 때 할당되어 프로그램 종료까지 유지됩니다.따라서 인스턴스를 생성하지 않아도 바로 호출할 있습니다.💡 JAVA 메모리 영역- Static(Method) 영역 : JVM이 클래스파일을 읽어 데이터를 저장하는 영역 (변수까지)- Hea..
인증/인가 로직을 구현 할 때, 모든 기능을 직접 구현하는 것보다 Sprign security를 사용하면 간편하게 구현이 가능합니다.저는 인가로직은 사용하지 않았고, Spring Security환경에서 JWT를 사용해 인증 로직을 어떻게 구현했는지 과정을 기록하려고 합니다. 0️⃣ 프로젝트 환경Spring Boot 2.7GradleJava 11, JPARest API✔️ 로그인 설계개인 서버를 이용하는 로그인일반 회원 로그인 / 관리자 로그인oauth 서버를 사용하는 로그인kakao 로그인/ google 로그인 / naver 로그인일반 회원과 관리자는 개인 서버, 즉 우리의 DB를 사용하기 때문에 인증/인가에 대한 보안 전략이 필요합니다.이 때 아이디/패스워드와 같은 민감한 회원 정보를 다루는 방법으로,..