docker-compose를 사용하여 Spring Boot 컨테이너와 Node.js 컨테이너를 동시에 실행하고, API 통신을 완성하는 것이 목표입니다.
- Node.js 컨테이너는 미들웨어 역할을 하며, API Gateway 또는 Web Gateway로 동작합니다. 이 컨테이너는 Spring Boot의 H2 메모리 데이터베이스에 접근하여 데이터를 읽고 쓸 수 있고, HTML을 통해 조작 가능한 인터페이스도 제공합니다.
- Spring Boot 컨테이너는 백엔드 서버 역할로, 데이터베이스와 REST API를 제공합니다. Spring Boot의 RestController를 통해 Node.js에서 URI 요청을 받아 REST 통신을 수행합니다.
이 구조를 통해 Node.js는 프론트엔드 요청을 처리하고, Spring Boot는 데이터베이스와 API 요청을 관리하여, 완전한 다중 컨테이너 환경에서 원활한 데이터 통신과 관리를 가능하게 합니다.
- 두가지 마이크로서비스를 사용할 것입니다. 아래 게시물을 참고해주세요!
1. Node 마이크로서비스를 Docker 컨테이너화 해보자 [REST]
https://rexondex.tistory.com/38
2. Docker로 스프링부트 JAR을 컨테이너화 해보자 [H2DB]
https://rexondex.tistory.com/36
1. docker-compose.yml 내용 작성
version: '3.8'
services:
userservice:
build:
context: ./springboot # Spring Boot 서비스 디렉터리에서 Dockerfile 빌드
ports:
- "8080:8080" # Spring Boot 포트 설정
networks:
- my-network # 네트워크 설정
webgateway:
build:
context: ./node # Node.js 서비스 디렉터리에서 Dockerfile 빌드
ports:
- "3000:3000" # Node.js 포트 설정
depends_on:
- userservice # Node.js 서비스가 Spring Boot 서비스에 의존
networks:
- my-network # 동일 네트워크에 배치
networks:
my-network: # 네트워크 설정
driver: bridge
2. 콘솔(파워쉘 등)에서 docker-compose 실행합니다
docker-compose up --build
# 두 마이크로서비스가 동시에 실행되었는지 확인해봅니다.
[ localhost:3000 접속 ]
[ localhost:8080 접속 ]
# 두 컨테이너 모두 제대로 실행된 것을 확인했습니다.
:: 후기 ::
Spring Boot 컨테이너에서는 Create(생성), Read(읽기), Delete(삭제) 작업을 수행할 수 있고, Node.js 컨테이너에서는 Create와 Read 작업만 수행할 수 있습니다.
localhost:8080에 접속하면 기본적인 REST 기능을 테스트할 수 있는 index.html 파일이 반환되어 인터페이스를 통해 조작할 수 있습니다. 그러나 실제 데이터 작업은 Spring Boot의 RestController 클래스에 매핑된 URI를 통해 처리됩니다.
index.html은 주로 테스트 화면 역할을 하며, 실질적인 데이터 처리 기능은 RestController 클래스가 맡고 있습니다.
Node.js 컨테이너는 Spring Boot의 RestController로 URI 요청을 보내어 Spring Boot 컨테이너가 데이터베이스 작업을 수행하도록 요청합니다. Node.js 컨테이너에서 할 수 있는 작업은 데이터 읽기(새로고침)와 데이터 생성(Create)이며, Spring Boot 컨테이너는 Read, Create, Delete 작업을 모두 지원합니다.
만약 Node.js 컨테이너에서 Delete 작업도 가능하게 하려면, index.js에 필요한 엔드포인트 요청을 추가하여, 적절한 URI로 Delete 요청을 보낼 수 있도록 설정하면 됩니다.
:: 결과 ::
docker-compose를 사용해 Spring Boot와 Node.js 두 컨테이너를 동시 실행한 후,
서로 다른 언어로 작성된 서비스 간의 상호작용을 확인할 수 있었습니다.
각 컨테이너가 서로 다른 포트(8080 / 3000)에서 실행되지만,
올바른 엔드포인트 요청이 전달되면 의도한 동작을 성공적으로 수행한다는 점을 확인했습니다.
'Docker' 카테고리의 다른 글
Node 마이크로서비스를 Docker 컨테이너화 해보자 [REST] (0) | 2024.11.14 |
---|---|
Docker로 스프링부트 JAR을 컨테이너화 해보자 [H2DB] (3) | 2024.11.13 |