Spring Microservices in Action Chapter05 프로젝트 종합 테스트

2025. 3. 13. 22:52Spring Microservice

💪 Spring Microservices in Action Chapter05 프로젝트 종합 테스트

이  챕터는 Spring Microservices in Action - Chapter05 프로젝트의 Docker Compose 기반 실행 및 개별 서비스 테스트를 수행하는 방법을 정리한 테스트 개요입니다.
테스트는 Docker Compose를 이용한 전체 서비스 기동, 개별 컨테이너 확인, License Service의 Actuator 및 컨트롤러 동작 테스트로 구성됩니다. 🚀

🔄 Docker Compose 실행

docker-compose -f docker/docker-compose.yml up

 

🖥️ docker-compose 실행 결과를 아래처럼 콘솔에서 확인할 수 있습니다.

📖 아래 콘솔은 터미널로 gitBash를 선택하였을 경우 예입니다

 

🔄 각 서비스의 컨테이너 실행 체크

도커 데스크탑에서 docker compose 커맨드 실행 결과로 각 서비스들의 도커 이미지가 생성되었음을 다음과 같이 확인할 수 있습니다.

 

📌 docker project 확인

docker 라는 이름의 docker compose 프로젝트가 생성되었음을 확인할 수 있습니다

⚠️ 이 docker 라는 이름은 docker-compose.yml이 위치한 디렉토리 이름입니다.

 

🔍 컨테이너 확인

✅ 각 서비스들의 각각의 컨테이너에서 정상적으로 실행되고 있음을 다음과 같이 확인할 수 있습니다.

 

🐘 데이터베이스 서비스 확인

🐚 PostgreSQL 데이터베이스에 접속하는 psql CLI 커맨드 실행

⚠️ 아래 그림처럼 Exec 탭에서 해당 컨테이너의 터미널을 사용할 수 있습니다.

psql -U postgress -d ostock_dev

 

🗄️ PostgreSQL 데이터베이스가 실행될 때 수행되는 sql 쿼리들

💾 init.sql

CREATE TABLE IF NOT EXISTS public.organizations
(
    organization_id text COLLATE pg_catalog."default" NOT NULL,
    name text COLLATE pg_catalog."default",
    contact_name text COLLATE pg_catalog."default",
    contact_email text COLLATE pg_catalog."default",
    contact_phone text COLLATE pg_catalog."default",
    CONSTRAINT organizations_pkey PRIMARY KEY (organization_id)
)

TABLESPACE pg_default;

ALTER TABLE public.organizations
    OWNER to postgres;


CREATE TABLE IF NOT EXISTS public.licenses
(
    license_id text COLLATE pg_catalog."default" NOT NULL,
    organization_id text COLLATE pg_catalog."default" NOT NULL,
    description text COLLATE pg_catalog."default",
    product_name text COLLATE pg_catalog."default" NOT NULL,
    license_type text COLLATE pg_catalog."default" NOT NULL,
    comment text COLLATE pg_catalog."default",
    CONSTRAINT licenses_pkey PRIMARY KEY (license_id),
    CONSTRAINT licenses_organization_id_fkey FOREIGN KEY (organization_id)
        REFERENCES public.organizations (organization_id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID
)

TABLESPACE pg_default;

ALTER TABLE public.licenses
    OWNER to postgres;

 

💾 data.sql

INSERT INTO public.organizations VALUES ('e6a625cc-718b-48c2-ac76-1dfdff9a531e', 'Ostock', 'Illary Huaylupo', 'illaryhs@gmail.com', '888888888');
INSERT INTO public.organizations VALUES ('d898a142-de44-466c-8c88-9ceb2c2429d3', 'OptimaGrowth', 'Admin', 'illaryhs@gmail.com', '888888888');
INSERT INTO public.organizations VALUES ('e839ee96-28de-4f67-bb79-870ca89743a0', 'Ostock', 'Illary Huaylupo', 'illaryhs@gmail.com', '888888888');

INSERT INTO public.licenses VALUES ('f2a9c9d4-d2c0-44fa-97fe-724d77173c62', 'd898a142-de44-466c-8c88-9ceb2c2429d3', 'Software Product', 'Ostock', 'complete', 'I AM DEV');
INSERT INTO public.licenses VALUES ('279709ff-e6d5-4a54-8b55-a5c37542025b', 'e839ee96-28de-4f67-bb79-870ca89743a0', 'Software Product', 'Ostock', 'complete', 'I AM DEV');

 

☑️ 위 두 개의 *.sql 파일의 적용 여부 상태를 다음 쿼리로 확인할 수 있습니다.

SELECT * FROM orgnizations;

 

SELECT * FROM licenses;

 

🔐 vault 서버 서비스

 

☑️ vault-init.sh 파일 적용 여부를 확인합니다.

#!/bin/bash

echo "==> 스크립트 실행 중"
echo "==> 서버 dev 모드로 실행"
# vault server 시작 // -config=/vault/config/config.hcl
vault server -dev -dev-root-token-id="myroot" -dev-listen-address="0.0.0.0:8200"&

# 대기 시간 추가 (예: 5초)
echo "==> 서버가 제대로 동작할 때까지 대기 5초"
sleep 5

# Vault 서버에 접근할 주소 설정
export VAULT_ADDR='http://0.0.0.0:8200'

# root 토큰 설정
export VAULT_TOKEN='myroot'

echo "==> application 데이터 저장"
VAULT_TOKEN=myroot vault kv put secret/application @/vault/data/application.json

echo "==> application/dev 데이터 저장"
VAULT_TOKEN=myroot vault kv put secret/application/dev @/vault/data/application_dev.json

echo "==> default 데이터 저장"
VAULT_TOKEN=myroot vault kv put secret/licensing-service @/vault/data/default.json

echo "==> dev 데이터 저장"
VAULT_TOKEN=myroot vault kv put secret/licensing-service/dev @/vault/data/dev.json

echo "==> prod 데이터 저장"
VAULT_TOKEN=myroot vault kv put secret/licensing-service/prod @/vault/data/prod.json

# 스크립트 종료까지 서버를 계속 유지
echo "==> Vault 서버를 유지합니다. Ctrl+C로 스크립트를 종료하세요."
wait

 

토큰을 통해 로그인합니다

 

application, application/, licensing-servic, licensing-servic/ 시크릿 생성 유무를 확인합니다  

 

각 시크릿의 내용을 체크합니다

⚠️ 이 글에서는 단지 몇 개의 체크 이미지만 업로드하였습니다.

 

 

🗄️ config server 서비스

config server 서비스가 성공적으로 시작된다면, 아래 이미지의 빨간색 하이라이트처럼, vault 서버로부터 해당 정보를 정상적으로 얻어 오는 것을 확인할 수 있습니다.

 

🗄️ licensing Service server 서비스

licensing Service server 서비스가 성공적으로 시작된다면, 아래 이미지의 빨간색 하이라이트처럼, config 서버로부터 해당 정보를 정상적으로 얻어 오는 것을 확인할 수 있습니다.

 

Postman에서 licensing 서비스 인스턴스에게 actuator 리스트를 가져오는 request를 전송합니다