
Spring Boot에서 Spring Cloud Gateway를 활용해 API 서버와 연동하는 간단한 예제입니다.
이번에도 small make 방식으로 구현했습니다.
이 예제에서는 Gateway 서버가 클라이언트의 요청을 받아 특정 경로에 따라 API 서버로 라우팅하는 방법을 다룹니다. 🚀
동영상 🎬
소스 💻
gateway
application.yml
spring:
cloud:
gateway:
routes:
- id: user
uri: http://localhost:8081
predicates:
- Path=/user/**
- id: product
uri: http://localhost:8082
predicates:
- Path=/prod/**
server:
port: 80
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.10'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.lsy'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2023.0.5")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
api 1번(User Micro Service 역할)
application.yml
server:
port: 8081
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
force: true
spring:
application:
name: user
devtools:
livereload.enabled: true
restart.enabled: true
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.10'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.lsy'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
main method
package com.lsy.api1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Api1Application {
public static void main(String[] args) {
SpringApplication.run(Api1Application.class, args);
}
}
RestApiController
package com.lsy.api1.controller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequiredArgsConstructor
@Slf4j
public class RestApiController {
@GetMapping("")
public String index() {
return "api server 1 request~~~";
}
// user api
@GetMapping("/user")
public List<String> ms1() {
log.info("user server~~~~~~~~~~~~~~~~");
ArrayList<String> list = new ArrayList<>();
list.add("user server");
list.add("홍길동");
list.add("임꺽정");
return list;
}
}
api 2번(Product Micro Service 역할)
application.yml
server:
port: 8082
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
force: true
spring:
devtools:
livereload.enabled: true
restart.enabled: true
build.gradle
server:
port: 8082
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
force: true
spring:
devtools:
livereload.enabled: true
restart.enabled: true
RestApiController
package com.lsy.api2.controller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequiredArgsConstructor
@Slf4j
public class RestApiController {
@GetMapping("")
public String index() {
return "api server 2 request~~~";
}
// product server
@GetMapping("/prod")
public List<String> ms2() {
log.info("product server~~~~~~~~~~~~~~~~");
ArrayList<String> list = new ArrayList<>();
list.add("product server");
list.add("간장");
list.add("마늘");
return list;
}
}
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
Spring Boot + Redis로 세션 공유하기 (테스트 영상 & 소스 코드 포함)
Redis를 활용한 애플리케이션 간 세션 공유 실험! (짧고 간단한 영상)레디스를 공부한지 얼마 안되어서 까먹기 싫어 기록으로 남긴다.동영상소스application.ymlserver: port: 9090 servlet: context-path: / encodin...
yaga.tistory.com
Spring Boot + JWT로 인증 시스템 구현 (테스트 영상 & 소스 코드 포함)
springBoot와 JWT를 이용한 인증 서버를 간단히 구축해봤다.메타코딩님의 "스프링부트 시큐리티 - JWT"를 보고, 이를 바탕으로 스스로 복기하며 학습한 내용을 기록으로 남긴다.동영상 🎬 JwtAuthorizati...
yaga.tistory.com
[AWS] 서버 및 DB 구축/배포 기본 가이드: 무경험자도 쉽게 시작하기
이 포스팅은 AWS 회원가입부터 EC2/RDS 인스턴스 생성 및 웹서버와 연동한 기본 가이드입니다.2025년 2월15일 07:40 기준 아키텍처 버전1은 완료된 상태입니다. 😄2025년 2월17일 22:12 기준 아키텍처 버...
yaga.tistory.com
'IT > Live Coding' 카테고리의 다른 글
RoboPOJOGenerator로 외부 API JSON 쉽게 자바 객체로 변환하기 (테스트 영상 & 소스코드 포함) (0) | 2025.04.07 |
---|---|
Spring Boot + Jasypt를 이용한 암호화 테스트 🔐 (테스트 영상 & 소스코드 포함) (0) | 2025.03.22 |
Spring Boot + JWT로 인증 시스템 구현 (테스트 영상 & 소스 코드 포함) (0) | 2025.03.22 |
[Android, Kotlin] Jetpack Compose와 Glance로 간단한 위젯 구현(영상 & 코드 포함) (0) | 2025.03.16 |
Spring Boot + Redis로 요청 제한 (테스트 영상 & 소스 코드 포함) (1) | 2025.03.09 |
댓글