쇼핑몰 만들기 프로젝트- 게이트웨이(부제: 게이트웨이를 사용해 여러개의 서버를 나눠서 관리해보자.)

yeom yaloo·2023년 1월 28일
0

쇼핑몰

목록 보기
2/19


🛍️쇼핑몰 프로젝트 - 게이트 웨이(gateway)


1. 게이트웨이(gateway)란?

  • 서로 다른 통신망을 사용한다는 가정 아래서 다른 네트워크로 가기 위해서 존재하는 문을 게이트웨이라고 생각하면 된다.

웹개발에서 게이트웨이를 왜 사용할까? (api gateway와 msa)

  • msa라는 개념을 api 게이트웨이를 설명하기 전에 알아둬야 한다.
    현 웹 개발의 형태는 점점 커지는 규모를 조금 더 쉽게 유지보수 하며 개발하기 위해서 이를 컴포넌트 형식으로 나눠서 관리하는데 이때 복잡해진 웹 시스템에 맞춰서 개발된 API기반의 서비스 아키텍처 스타일을 msa라고 한다. (요약해서 말하자면 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개서 변경&조합이 가능하도록 만든 형태를 의미한다.)
  • api gateway란?
    모든 서버로의 요청을 단일지점(=gateway)를 통해서 거쳐가도록한다. 이들은 공통 로직처리, 인증 및 인가 처리, 라우팅 처리등을 할 수 있다.
  • 짧게 요약해서 클라이언트와 서버(=백엔드) 사이에 위치하는 리버스 프록시 역할을 하는 서비스를 의미한다.(리버스 프록시? 클라이언트 요청을 대신 받아 내부 서버로 전달해주는 것을 의미한다.)

2. springboot cloud gateway?

  • 여러 api gateway가 있지만 현재 스프링부트로 개발을 진행하고 있어 spring boot cloud에서 제공하는 gateway를 사용해서 구축을 진행했다.

route, predicates, filters

  • Route란?
    고유ID, 목적지 URI, Predicate, Filter로 구성된 구성요소.
    GATEWAY로 요청된 URI의 조건이 참일 경우, 매핑된 해당 경로로 매칭을 시켜줍니다.

  • Predicate란?
    주어진 요청이 주어진 조건을 충족하는지 테스트하는 구성요소
    각 요청 경로에 대해 충족하게 되는 경우 하나 이상의 조건자를 정의할 수 있습니다.
    만약 Predicate에 매칭되지 않는다면 HTTP 404 not found를 응답합니다.

  • Filter란?
    GATEWAY 기준으로 들어오는 요청 및 나가는 응답에 대하여 수정을 가능하게 해주는 구성요소
    📌출처: https://saramin.github.io/2022-01-20-spring-cloud-gateway-api-gateway/


3. 사용방법

의존성 추가

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

java를 사용한 configuration 클래스 구현으로 설정

yml을 사용한 설정

server:
  port: 7080

spring:
  cloud:
    gateway:
      routes:
        - id: yalooStore-shop
          uri: http://localhost:8081
          predicates:
            - Path= /api/**
        - id: yalooStore-front
          uri: http://localhost:8082
          predicates:
            - Path=/members/**
  • 메인 서버를 7080(게이트웨이 프로젝트 서버)으로 해당 Predicates 아래 설정해준 경로들은 다 한개의 서버에서 사용할 수 있게 된다.
  • 8081 포트를 가지고 있는 프로젝트에 게이트웨이에 설정해준 서버로 접근이 가능함을 보여준다.

로컬환경과 로컬 환경이 아닌 경우의 차이점?

  • 로컬환경의 경우라면 서버를 같은 것을 사용하기 때문에 port를 전부 달리 진행해주어야 한다.(서버마다 다 다른 port 설정이 필수, 즉 프로젝트마다 다른 port가 주어져야 한다.)
  • 로컬 환경이 아닌 경우라면 주어진 서버가 다 다르기 때문에 port를 다 다르게 설정해줄 필요가 없이 진행하면 된다.

4. 정리

  • msa가 웹 개발의 대세 아키텍처인 만큼 api gateway는 거의 필수가 되었다.
  • api gateway는 인증 및 인가, 공통 로직 처리, 라우팅 처리를 한다.
profile
즐겁고 괴로운 개발😎

0개의 댓글