- 클라우드 기반 애플리케이션 서비스 디스커버리가 중요한 이유
- 서비스 디스커버리와 로드밸런서의 장단점
- 스프링 넷플릭스 유레카 서버 설정
- 유레카에 스프링 부트 마이크로 서비스 등록
- 클라이언트 측 로드 밸런싱을 위한 스프링 클라우드 로드 밸런서 라이브러리 사용
$ docker ps // 현재 실행 중인 컨테이너 확인
$ cd chapter6 // chapter6 들어가기
minhee@DESKTOP-68EJ19D:~/chapter6$ ll
total 28
drwxr-xr-x 4 minhee minhee 4096 Oct 19 10:34 ./
drwxr-x--- 24 minhee minhee 4096 Oct 19 10:34 ../
drwxr-xr-x 7 minhee minhee 4096 Oct 19 10:34 Final/ // 여기에 들어가야 함.
drwxr-xr-x 6 minhee minhee 4096 Oct 19 10:34 Initial/
-rw-r--r-- 1 minhee minhee 3763 Dec 6 2022 README.md
-rw-r--r-- 1 minhee minhee 6474 Dec 6 2022 chapter6.postman_collection.json
minhee@DESKTOP-68EJ19D:~/chapter6$ cd Final/
minhee@DESKTOP-68EJ19D:~/chapter6/Final$ ll
total 36
// 각각 서버로 올릴 프로젝트 파일들이 있음.
drwxr-xr-x 7 minhee minhee 4096 Oct 19 10:34 ./
drwxr-xr-x 4 minhee minhee 4096 Oct 19 10:34 ../
-rw-r--r-- 1 minhee minhee 573 Dec 6 2022 build-for-m1.sh
drwxr-xr-x 5 minhee minhee 4096 Oct 19 10:41 configserver/
drwxr-xr-x 2 minhee minhee 4096 Oct 19 10:34 docker/
drwxr-xr-x 5 minhee minhee 4096 Oct 19 10:43 eurekaserver/
drwxr-xr-x 5 minhee minhee 4096 Oct 19 10:48 licensing-service/
drwxr-xr-x 5 minhee minhee 4096 Oct 19 10:50 organization-service/
-rw-r--r-- 1 minhee minhee 1345 Dec 6 2022 pom.xml
// 정의된 모든 서비스 또는 프로젝트를 한 번에 컨테이너로 올리는 명령
$ docker-compose up
## docker-compose.yml 내용 ##
version: '2.1'
services:
database:
image: postgres:latest
ports:
- "5432:5432"
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
POSTGRES_DB: "public"
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/1-init.sql
- ./data.sql:/docker-entrypoint-initdb.d/2-data.sql
networks:
backend:
aliases:
- "database"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
configserver:
image: ostock/configserver:0.0.1-SNAPSHOT
ports:
- "8071:8071"
environment:
ENCRYPT_KEY: "fje83Ki8403Iod87dne7Yjsl3THueh48jfuO9j4U2hf64Lo"
networks:
backend:
aliases:
- "configserver"
eurekaserver:
image: ostock/eurekaserver:0.0.1-SNAPSHOT
ports:
- "8070:8070"
depends_on:
database:
condition: service_healthy
configserver:
condition: service_started
networks:
backend:
aliases:
- "eurekaserver"
licensingservice:
image: ostock/licensing-service:0.0.3-SNAPSHOT
environment:
PROFILE: "dev"
CONFIGSERVER_URI: "http://configserver:8071"
CONFIGSERVER_PORT: "8071"
DATABASESERVER_PORT: "5432"
ENCRYPT_KEY: "IMSYMMETRIC"
depends_on:
database:
condition: service_healthy
configserver:
condition: service_started
ports:
- "8080:8080"
networks:
- backend
organizationservice:
image: ostock/organization-service:0.0.1-SNAPSHOT
environment:
PROFILE: "dev"
CONFIGSERVER_URI: "http://configserver:8071"
CONFIGSERVER_PORT: "8071"
DATABASESERVER_PORT: "5432"
ENCRYPT_KEY: "IMSYMMETRIC"
depends_on:
database:
condition: service_healthy
configserver:
condition: service_started
ports:
- "8081:8081"
networks:
- backend
networks:
backend:
driver: bridge
위의 코드에서 볼 수 있듯이 docker-compose.yml에는 각각 서비스 및 설정 정보들이 포함되어있다.
따라서 compose up 할때는 docker-compose.yml 파일이 있는
\\wsl.localhost\Ubuntu-22.04\home\minhee\chapter6\Final\docker
이 경로에서 docker-compose up 을 해야한다.
첫번째 오류
두번째 오류
데이터베이스 설정 정보를 잘못 적어서 발생한 오류 이를 public 으로 수정하자 오류 해결
설정의 경우에는 configserver 파일 -> config파일 내부에 organization-service-dev.properties 파일 수정
docker-compose up 이 잘 안될 때
minhee@DESKTOP-68EJ19D:~/chap05/docker$ docker-compose down
minhee@DESKTOP-68EJ19D:~/chap05/docker$ docker-compose up
configserver 컨테이너 생성
minhee@DESKTOP-68EJ19D:~/chapter6/Final/configserver$ ./mvnw package dockerfile:build
유레카 서버에서도 컨테이너 생성 ./mvnw package dockerfile:build
chmod 700 mvnw
minhee@DESKTOP-68EJ19D:~/chapter6/Final/eurekaserver$ ./mvnw package dockerfile:build
dockercompose up
다른 터미널 창 에서 docker ps 로 실행중인 컨테이너 확인
minhee@DESKTOP-68EJ19D:/mnt/c/WINDOWS/system32$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c88adf6d27c ostock/licensing-service:0.0.3-SNAPSHOT "java -cp app:app/li…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp docker_licensingservice_1
90f8d3474bb6 ostock/eurekaserver:0.0.1-SNAPSHOT "java -cp app:app/li…" 2 minutes ago Up 2 minutes 0.0.0.0:8070->8070/tcp, :::8070->8070/tcp docker_eurekaserver_1
ee7da99cfdc4 ostock/organization-service:0.0.1-SNAPSHOT "java -cp app:app/li…" 2 minutes ago Up 2 minutes 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp docker_organizationservice_1
2e06b610ae7a ostock/configserver:0.0.1-SNAPSHOT "java -cp app:app/li…" 2 minutes ago Up 2 minutes 0.0.0.0:8071->8071/tcp, :::8071->8071/tcp docker_configserver_1
663c746cc6d8 postgres:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp docker_database_1
.mvn/과 mvnw는 Maven 프로젝트의 빌드와 관리를 돕는 두 가지 다른 요소입니다.
- .mvn/:
- 이것은 .mvn 디렉토리입니다. 보통 Maven 프로젝트의 루트 디렉토리에 위치합니다.
- 이 디렉토리는 Maven Wrapper 스크립트와 프로젝트 특정 설정을 포함합니다.
- .mvn/wrapper/ 디렉토리에는 Maven Wrapper라는 도구가 포함되어 있으며, 이를 사용하면 Maven을 프로젝트에 설치하지 않고도 프로젝트를 빌드할 수 있습니다. Maven Wrapper는 프로젝트에 대한 Maven 버전을 관리하고 프로젝트에 해당 버전을 사용하도록 보장합니다.
- mvnw:
- mvnw 파일은 Maven Wrapper 스크립트를 나타냅니다. 이 스크립트는 Maven을 로컬 시스템에 설치하지 않고도 프로젝트를 빌드하고 Maven 명령을 실행할 수 있게 해줍니다.
- mvnw 스크립트는 .mvn/wrapper/ 디렉토리에서 가져온 Maven Wrapper와 함께 사용됩니다. 이 스크립트를 실행하면 Maven Wrapper를 사용하여 프로젝트를 빌드하고 Maven 명령을 수행할 수 있습니다.
요약하면, .mvn/ 디렉토리는 Maven 프로젝트의 설정과 Maven Wrapper 스크립트를 포함하며, mvnw는 이러한 Maven Wrapper 스크립트를 실행하는 데 사용됩니다. Maven Wrapper는 프로젝트에 Maven을 설치할 필요 없이 일관된 환경에서 프로젝트를 빌드하도록 도와줍니다.
유레카 -> 서비스에 대한 정보
컨피스서버 -> 초기 세팅 값 받아옴
서비스들이 살아있다고 등록하기 위해 유레카에 등록
어느 서버에 있는지 IP가 나옴.
spring:
application:
name: eureka-server
boot:
admin:
context-path: /admin
server:
port: 8070
eureka:
instance:
hostname: eurekaserver
client:
registerWithEureka: false // endUser에게 공개하지 않겠다는 의미 configserver는 유레카에 등록 안하겠다는 의미
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
waitTimeInMsWhenSyncEmpty: 5
management:
endpoints:
web:
exposure:
include: "*"
package com.optimagrowth.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer // 이걸 써 줘야 함.
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
다운로드 받는 것
리본은 제외
spring:
application:
name: organization-service
profiles:
active: dev // organization-service 로 부터 개발 환경을 받아올 것
cloud:
config:
uri: http://configserver:8071
service : 운영환경
dev : 개발환경
http://localhost:8080/v1/organization/e839ee96-28de-4f67-bb79-870ca89743a0/license/279709ff-e6d5-4a54-8b55-a5c37542025b/feign
\\wsl.localhost\Ubuntu-22.04\home\minhee\chapter6\Final\licensing-service\src\main\java\com\optimagrowth\license
--
서버리스 : 클라우드에서 미리 환경을 만들어놓고 코드만 입력하면 REST API 서비스를 바로 돌려줌.
JAR파일
가상 머신 자원의 할당을 관리해 미리 설정된 서버리스 코드를 실행시키는 기술을 의미
ssh > auth > 1번째 꺼 클릭 > key 파일 선택
ec2-user
public ip로 접속
계정 ec2-user
인스턴스 중지로 멈춰야 함.
종료는 안됨.
중지 누르면
탄력적 IP 데이터베이스는 주소를 고정시키는 것이 좋음
접속할때마다 바뀌면 접속이 안되니까
'👩💻 BackEnd > 🚛 도커 [Docker]' 카테고리의 다른 글
[ docker/oracle ] mac m1 에서 Docker 로 Oracle 데이터베이스 사용하기 대작전 (0) | 2024.04.22 |
---|---|
[따배도] Docker 시리즈 1 (0) | 2023.10.15 |
[Docker] 10/12 Dockerfile 명령어 / Docker build (0) | 2023.10.12 |