일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- dp
- 구간 트리
- 다익스트라
- 스택
- docker-compose
- 트리
- 이분 탐색
- 백트래킹
- 플로이드 와샬
- 유레카
- 달팽이
- 완전 탐색
- Zuul
- 스프링 시큐리티
- BFS
- 구현
- ZuulFilter
- 게이트웨이
- 서비스 디스커버리
- spring boot
- Gradle
- 메모이제이션
- 이분 매칭
- Java
- 도커
- Spring Cloud Config
- 주울
- 비트마스킹
- Logback
- spring cloud
- Today
- Total
Hello, Freakin world!
[Spring boot]도커 컴포즈로 서비스 클러스터 구성하기 본문
도커를 이용해 위 그림처럼 동일한 인스턴스로 구성된 클러스터를 만들어보자.
우선 서비스를 만들기 위해 스프링 이니셜라이저를 이용해 프로젝트를 생성.
build.gradle
plugins {
id 'org.springframework.boot' version '2.4.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'springboot.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
그리고 서비스 인스턴스가 잘 떴는지 확인하기 위한 엔드 포인트도 만들어 두자.
HelloController.class
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloRestController {
@GetMapping("/hello")
public String hello() {
return "Hello!";
}
}
그리고 설정파일도 끄적끄적.
application.yml
server:
port: ${SERVER_PORT:9000}
spring:
datasource:
driver-class-name: org.h2.Driver
url: ${DB_URL:jdbc:h2:tcp://172.30.1.44/~/servicedb}
설정은 변할 수도 있으니까 환경 변수를 참조하도록 하자. ${변수: 기본값} 형태로 구성했다.
h2 데이터베이스를 구성할 때, 위 그림처럼 동작하도록 하려면 h2가 서버모드로 돌아가야한다.
h2는 동작 방식에 따라 인메모리, 서버 등 각종 모드를 지원하는데 더 자세한 사항은 아래 링크를 통해 확인 가능.
그리고 h2 서버가 루프백 주소인 로컬호스트가 아닌 다른 ip에서 접근하는 경우 실행할 때, 옵션을 줘야한다.
h2 데이터베이스를 다운받아 그 안에 h2/bin/h2.sh 파일을 열어보자.
h2.sh
#!/bin/sh
dir=$(dirname "$0")
java -cp "$dir/h2-1.4.199.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Console "$@"
위 파일에 -tcpAllowOthers를 마지막에 추가하면 된다.
h2.sh (수정 후)
#!/bin/sh
dir=$(dirname "$0")
java -cp "$dir/h2-1.4.199.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Console "$@" -tcpAllowOthers
위 작업까지 끝났다면 프로젝트 루트에서 ./gradlew build 명령어를 통해 jar파일을 생성한다.
이제 Dockerfile, docker-compose.yml 파일을 만들어보자.
Dockerfile
FROM openjdk:11
ENV SERVER_PORT=9000
ENV DB_URL='jdbc:h2:tcp://172.30.1.44/~/servicedb'
RUN mkdir /app
WORKDIR /app
COPY serviceinstance-0.0.1-SNAPSHOT.jar /app
CMD [ "java", "-jar" ,"/app/serviceinstance-0.0.1-SNAPSHOT.jar" ]
172.30.1.44는 호스트의 ip 주소다. (데이터베이스는 호스트에서 실행 중)
docker-compose.yml
version: "3.0"
services:
ins1:
build: .
ports:
- 9001:9000
ins2:
build: .
ports:
- 9002:9000
인스턴스는 2개를 생성했고 각각 9001, 9002 포트에 바인딩했다.
docker-compose.yml 이 존재하는 디렉터리로 이동해 docker-compose up 명령어를 이용하면 인스턴스들이 다 띄워진다.
이제 브라우저에서 localhost:9001/hello, localhost:9002/hello 를 각각 호출해보자.
성공!
서버를 종료시키려면 ctrl + c를 누르면 된다.
docker-compose down 명령어를 통해 올라간 인스턴스(컨테이너)들을 모두 삭제해 정리도 가능.
'Spring boot' 카테고리의 다른 글
[Spring] 컨트롤러 메서드 파리미터 JSON 바인딩 여부 테스트 (0) | 2020.08.10 |
---|---|
[Spring AOP] 포인트컷의 종류와 성능 (0) | 2020.07.24 |
Spring AOP 기반 validation 수행하기 (0) | 2020.07.24 |
[Spring AOP] 포인트컷 지시어들(Designators) (0) | 2020.07.18 |
[Spring AOP] 포인트컷 선언하기 (0) | 2020.07.18 |