MSA 1일차, 2일차 : MSA, Spring Cloud

parang·2025년 5월 27일

LG CNS AM Inspire Camp 2기

목록 보기
34/50
오늘은 미니 프로젝트 끝난 첫번째 월요일, MSA 1일차이다.
꽤 정들었던 강사님의 목소리를 듣지 못해서 이제 아쉽겠지만
또 다른 시작이다. 또한 프로젝트에서 너무 너무 아쉬운 부분이 많았지만.. 
그 부분은 앞으로 계속 리팩토링 하는걸로!

지금 듣고 있는 강의의 진도에 맞춰서 내용을 정리할 생각이지만, 강의는 내일부터 거의 실습이기에 스프링 마이크로서비스 코딩 공작소 개정 2판을 기반으로 공부하여 정리할 생각이다.

MSA란?

하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐.

모놀리스 아키텍처

모놀리스 아키텍처란 msa와는 달리 하나의 어플리케이션을 말한다. 규모가 작으면 구축 및 배포가 쉽지만 규모가 커질 수록 모놀리스를 관리하는 것은 매우 어렵다.

스프링 클라우드

스프링 프레임 워크를 이용하여, 마이크로서비스를 간단하게 운영하고 배포할 수 있는 프레임 워크.

전체 구성

우리가 앞으로 만들어 나가게 될 간략한 구성도이다.

클라이언트가 요청 -> API 게이트웨이 -> 유레카 서비스 -> 서비스의 위치를 조회 -> 해당 마이크로 서비스 호출

API 게이트웨이(서비스 라우팅)

  • 마이크로서비스 클라이언트에 하나의 논리적 URL을 제공한다.
  • 서비스 라우팅이라고도 하며, 모든 서비스에 대한 단일 진입점이다.
  • 일관된 보안 정책과 라우팅 규칙을 적용할 수 있다.

유레카(서비스 디스커버리)

  • 핵심 기능은 서비스 레지스트리가 있다.
  • 서비스의 물리적 위치를 추상화하고 새로운 마이크로 서비스 인스턴스를 추가할 수 있다.

클라이언트 로드 밸런싱

  • 서비스 클라이언트는 서비스 디스커버리에서 조회한 엔드포인트를 캐싱하고, 서비스 호출이 인스턴스 간 분산되도록 한다.

클라우드 네이티브

클라우드 네이티브란? 애플리케이션이 더 빠르고 효율적으로 개발되고 운영될 수 있도록 하는 접근 방식이다.

CI/CD, DevOps, 마이크로서비서, 컨테이너를 포함하고 있다. 이 중, CI/CD만 조금 살펴보자.

Docker

CI/CD를 살펴보기 전에, 도커를 먼저 소개한다. 도커란, 리눅스의 격리 기술들을 사용해 컨테니어를 빌드, 배포, 실행, 관리를 할 수 있는 오픈 소스 플랫폼이다. 이 플랫폼을 활용하여 ci/cd를 편리하게 할 수 있기 때문에 도커를 이용한다.

CI/CD

  • CI(지속적 통합) : 빌드
    build.gradle 이라고 생각하면 되고 빌드 자체라고 보면 된다.

  • CD(지속적 배포)
    빌드한 이미지를 도커 허브에 옮기는 작업이라고 생각하면 쉽다. CD의 D가 Delivery의 역할과 Deployment역할을 한다.

    docker image -> push -> Container registry 즉,
    Container registry(Docker Hub)에 이미지 올리는 것.

스프링 클라우드 실습

실습으로는 사용자, 포스트, 알림 서비스를 분리하고 구현해서 어떤식으로 운영되는지 알아보려 한다.

실습 환경

1단계 실습 목표 : 사용자 서비스에서 알림 서비스 호출하기.

도구 : 도커, 인텔리제이

현재, 도커의 user, alim 서버가 올라와 있는 상태.

  1. 자바 JDK 설치 및 환경 변수 설정.
    JAVA_HOME, path에 설치한 jdk 경로를 지정해 주어야 한다.
  2. 인텔리제이 lombok 플러그인
  3. gradle를 사용하고 의존성은

Spring Web
Lombok
Cloud LoadBalancer 3개를 추가해준다.

  1. 설정을 독립적으로 관리하기 위한 파일 분리
  • application.properties를 제거하고 application.yml 파일로 변경.
spring:
	application:
    	name: 프로젝트 이름
  • yml 파일을 총 3개를 준비한다.
    application.yml
    application-dev.yml
    application-local.yml
  1. Run/Debug Configurations 설정

active profile에
-Dspring.profiles.active=local 설정

현 단계에는 user, alim 서버 2개를 설정했다. user에서 alim으로 가는 로직이고, alim local yml에 포트는 8082, user port는 8081로 설정.

  1. alim에는 rest api 설정
    user에는 config 빈 등록.
@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

위 코드는 RestTemplate 를 빈으로 등록하고, @LoadBalanced 어노테이션을 붙여서 서비스 간 통신에 로드 밸런싱이 가능하게 한 것이다.

후에

restTemplate.getForObject(
"http://alim-service/backend/alim/v1/hello"
, String.class);

을 호출함으로써 alim-service 서비스의 이름을 서비스 디스커버리에서 찾고 라우팅 해준다.

profile
파랑입니다.

0개의 댓글