MSA 앱 만들기 - 1. 서버 구성

2025. 1. 7. 17:26· 프로젝트 Project
목차
  1. 서버 구성
  2. 서버 구성요소
  3. 마이크로서비스 (API) 구성요소
  4.  
  5. 프로젝트 환경
  6. Eureka + Spring Cloud Gateway
  7. 마이크로 서비스 기능
  8. 1. 회원 user-service

서버 구성

 

서버 구성요소

  • Git : 소스/프로파일 관리
  • Config Server : 프로파일/설정 정보
  • Eureka Server: 마이크로서비스 등록/검색
  • API Gateway Server: 마이크로서비스 부하 분산/서비스 라우팅
  • Microservices: 회원, 주문, 상품
  • Queuing System: 마이크로서비스 간 메시지 발행/구독

마이크로서비스 (API) 구성요소

  • 회원 user-service:  사용자 정보 등록, 조회, 사용자정보/주문내역 조회
  • 주문 order-service: 주문 등록, 주문 확인
  • 상품 catalog-service: 상품 목록

 

프로젝트 환경

  • spring boot 3.4.1
  • java 17
  • h2 database, jpa

Eureka + Spring Cloud Gateway

이 둘은 클라우드 네이티브 시스템에서 로드밸런서와 API 게이트웨이 역할을 한다.

 

그 역할은 다음과 같다.

유레카에 Spring cloud gateway 서비스와, 마이크로 서비스들을 등록한다.

마이크로 서비스는 설정한 바에 따라서 (server: port: 0)매번 실행될 때 마다 포트번호가 랜덤으로 지정되는데, api gateway는 routing 기능을 통해 마이크로서비스의 위치를 유레카에서 알아와 포워딩시킬 수 있다.

 

유레카와 스프링 클라우드 게이트웨이의 자세한 설정은 포스팅해둔 해당 글에서 확인할 수 있다.

 

1) Srping cloud gateway 서비스 : application.yml 설정

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka

spring:
  application:
    name: apigateway-service
  cloud:
    gateway:
      default-filters:
        - name: GlobalFilter
          args:
            baseMessage: Spring Cloud Gateway Global Filter
            preLogger: true
            postLogger: true
      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
              - Path=/user-service/**

eureka와 routes 설정이 필요하다.

클라이언트가 해당 api gateway 서비스의 /user-service/라는 패스로 요청하게되면, 

routes 설정에서 lb(=eureka) 서버의 USER-SERVICE라는 이름을 가진 어플리케이션의 주소로 포워딩한다.

 

‼️주의할 점은, api gateway는 포워딩 할때 path값까지 포함한다는 것이다.

예를들어 http://apigateway주소/user-service/.. 로 호스트가 요청한다면 path까지 전달해 http://마이크로서비스주소/user-service/.. 로 전달하게된다.

따라서 마이크로서비스에서는 path값까지 URI 주소를 맞춰주어야 한다. (아니면 404 not found)

 

이게 싫다면, api gateway에서 설정을 추가해주면 된다.

      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
          	- Path=/user-service/**
            - Method=POST
          filters:
            - RemoveRequestHeader=Cookie
            - RewritePath=/user-service/(?<segment>.*), /\${segment}

RewritePath 설정을 통해 user-service로 들어온 것을 모두 없애서 보낼 수 있다.

즉, 클라이언트에서 http://apigateway주소/user-service/.. 로 보낸 요청을 http://마이크로서비스주소/..로 변경하여 보낸다.


마이크로 서비스 기능

1. 회원 user-service

user-service는 위에서 소개한 것처럼 사용자와 관련된 서비스를 담당한다.

 

DB는 H2 Database를 사용한다.

H2 Database 특징
- 자바로 작성된 오픈소스 RDBMS
- Embedded DB
- Server-client 가능
- JPA 연동 가능

 

spring boot 3점대를 사용할 경우, 버전을 높여서 사용해야 하기 때문에 기본적으로 application.yml에 db설정이 필요하다.

 

1) application.yml

spring:
  application:
    name: user-service
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: update
  h2:
    console:
      enabled: true
      settings:
        web-allow-others: true
      path: /h2-console

embedded DB이므로 어플리케이션을 띄울 때 기본으로 사용할 db(여기서는 testdb)를 설정해주어야한다.

 

 

2) dependency (maven - pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.2.224</version>
    <scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

spring boot 3점대에서는 위와 같이 devtools와 jpa, h2 의존성을 알맞게 설정해주어야 한다.

그렇지 않으면 h2가 실행되지 않아 404에러가 뜨거나, testdb 생성되지 않을 수 있다.

 

그리고 lombok의 경우 꼭 버전을 명시해주어야 오류 없이 플러그인을 사용할 수 있다.

 

 

 

 

'프로젝트 Project' 카테고리의 다른 글

MSA 앱 만들기 - 2. 로드밸런서 : 서비스 디스커버리 Eureka  (2) 2025.01.06
API 명세서 - Swagger + Rest Docs  (5) 2024.08.06
API 명세서 - Swagger 적용하기 (feat. Spring security)  (2) 2024.08.06
테스트코드 작성하기  (0) 2024.08.06
OAuth2 로그인 구현하기  (2) 2024.08.06
  1. 서버 구성
  2. 서버 구성요소
  3. 마이크로서비스 (API) 구성요소
  4.  
  5. 프로젝트 환경
  6. Eureka + Spring Cloud Gateway
  7. 마이크로 서비스 기능
  8. 1. 회원 user-service
'프로젝트 Project' 카테고리의 다른 글
  • MSA 앱 만들기 - 2. 로드밸런서 : 서비스 디스커버리 Eureka
  • API 명세서 - Swagger + Rest Docs
  • API 명세서 - Swagger 적용하기 (feat. Spring security)
  • 테스트코드 작성하기
달래dallae
달래dallae
백엔드를 열심히 갈고 닦아서 광내봅시다 ~_~
달래dallae
머루랑달래랑
달래dallae
전체
오늘
어제
  • 분류 전체보기 (54)
    • 프로젝트 Project (14)
    • 백엔드 Backend (27)
      • 기본 개념 (13)
      • 서버 Server (9)
      • 스프링 Spring (1)
      • JPA (3)
    • 데이터베이스 Database (6)
      • MySQL (1)
      • Oracle (5)
    • 언어 Language (0)
      • 자바 Java (0)
      • 파이썬 Python (0)
    • 알고리즘 Algorithm (1)

블로그 메뉴

  • 홈
  • 글쓰기
hELLO · Designed By 정상우.v4.2.2
달래dallae
MSA 앱 만들기 - 1. 서버 구성
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.