๐ง ATMS - JEUS ๋งค๋์ง๋ ์๋ฒ 6๊ฐ ๊ตฌ์ฑ๊ธฐ(๊ฒ์ดํธ์จ์ด๋ฅผ ๊ฑท์ด๋ธ ์ด์ )
์ง๋ ๊ธ๊น์ง๋ ์ ์ฒด ๊ฐ๋ฐ ์๋ฒ์์ docker compose๋ก 7๊ฐ ์๋น์ค๋ฅผ ๋์ฐ๊ณ , CI/CD์ ์ ๋ ๊ฒ์ ํ์ดํ๋ผ์ธ์ ๋ถ์ธ ์ด์ผ๊ธฐ์๋ค.
์ด๋ฒ ๊ธ๋ถํฐ๋ ๋ฌด๋๊ฐ ์ํ ๊ฐ๋ฐ ์๋ฒ๋ก ์ฎ๊ฒจ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ ์ง๋ฌธ์ ์์ธ๋ก ๋จ์ํ๋ค โ "์ด 6๊ฐ ๋ชจ๋์ ์ํ WAS์ ์ด๋ป๊ฒ ์ฌ๋ฆฌ์ง?"
์ ์ฒด ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋ชจ๋๋ง๋ค ์ปจํ ์ด๋ ํ๋์ฉ, ๋ด์ฅ ํฐ์บฃ์ผ๋ก ๋ ์์๋ค. ๊ทธ๋ฐ๋ฐ ์ํ ๊ฐ๋ฐ ์๋ฒ๋ ์กฐ๊ฑด์ด ์์ ํ ๋ฌ๋๋ค.
| ๊ตฌ๋ถ | ์ญํ | ์ต์ํ ๊ฒ์ ๋น์ ํ๋ฉด |
|---|---|---|
| JEUS | WAS (์๋ธ๋ฆฟ ์ปจํ ์ด๋) | Tomcat |
| WebtoB | ์น์๋ฒ (์ ์ ํ์ผ + WAS ์ฐ๋) | Apache / nginx |
| JSV | WebtoB โ JEUS ์ ์ฉ ์ฐ๊ฒฐ | AJP / ๋ฆฌ๋ฒ์ค ํ๋ก์ |
ํน์ดํ ์ ์ JSV ์ฐ๊ฒฐ์ ๋ฐฉํฅ์ด๋ค. JEUS ์๋ฒ๊ฐ WebtoB์ JSV ํฌํธ๋ก ์ ์ํด ์จ๋ค. nginx์ฒ๋ผ ์น์๋ฒ๊ฐ WAS๋ฅผ ์ฐพ์๊ฐ๋ ๊ตฌ์กฐ๊ฐ ์๋๋ค.
๊ทธ๋์ ๋น๋ ์ฐ์ถ๋ฌผ๋ถํฐ ๋ฐ๊ฟจ๋ค. ์คํํ JAR(bootJar) ๋์ WAR(bootWar -Pjeus)๋ฅผ ๋ง๋ค๊ณ , ๋ชจ๋ Application ํด๋์ค๊ฐ SpringBootServletInitializer๋ฅผ ์์ํ๊ฒ ํ๋ค. -Pjeus๋ฅผ ์ค ๋๋ง WAR๋ก ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ์ bootRun๊ณผ ๊ธฐ์กด JAR ๋น๋๋ ๊ทธ๋๋ก๋ค.
// ๋ฃจํธ build.gradle โ -Pjeus ๋ก ๋น๋ํ ๋๋ง WAR ๋ก ์ ํ
pluginManager.withPlugin('org.springframework.boot') {
if (project.hasProperty('jeus')) {
apply plugin: 'war'
dependencies {
// ๋ด์ฅ ํฐ์บฃ์ WAR ์์ ์ ์ธ (JEUS ๊ฐ ์๋ธ๋ฆฟ ์ปจํ
์ด๋ ์ญํ )
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
tasks.named('bootWar') {
from(rootProject.file('jeus/web.xml')) {
into 'WEB-INF'
expand(profile: 'jeus', moduleName: project.name)
}
}
}
}
ํ JVM์ WAR ์ฌ๋ฌ ๊ฐ๊ฐ ์ฌ๋ผ๊ฐ ์ ์์ผ๋, -Dspring.profiles.active๋ฅผ JVM ์ต์
์ผ๋ก ๋ฃ์ผ๋ฉด ๋ชจ๋ ์ฑ์ด ๊ฐ์ ๊ฐ์ ๊ณต์ ํด๋ฒ๋ฆฐ๋ค. ๊ทธ๋์ ๊ฐ WAR์ WEB-INF/web.xml์ spring.profiles.active๋ฅผ context-param์ผ๋ก ๋ฃ์ด WAR๋ง๋ค ํ๋กํ์ผ์ ๋ค๊ณ ๋ค๋๊ฒ ํ๋ค.
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="5.0" metadata-complete="false">
<display-name>${moduleName}</display-name>
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>${profile}</param-value>
</context-param>
</web-app>
์ฒ์์๋ ๊ฐ์ฅ ๋จ์ํด ๋ณด์ด๋ ๋ฐฉ๋ฒ์ ํํ๋ค. JEUS ์๋ฒ(=JVM) ํ๋์ WAR 6๊ฐ๋ฅผ ์ฌ๋ฆฌ๊ณ , ์ปจํ ์คํธ ๊ฒฝ๋ก๋ก ๊ตฌ๋ถํ๋ ๋ฐฉ์์ด๋ค.
| ๋ชจ๋ | ์ปจํ ์คํธ |
|---|---|
| atms-web | / |
| atms-journal | /journal |
| atms-batch | /batch |
| atms-file | /file |
| atms-if-internal | /ifin |
| atms-if-external | /ifex |
๋ฌธ์ ๋ ๋ฐ๊ฟ ์ ์๋ ์ฃผ์๋ค์ด์๋ค. ATM ์์ด์ ํธ๋ /api/journal/..., /atmf/... ๊ฐ์ ๊ณ ์ ๊ฒฝ๋ก๋ก ์ ๋๊ณผ ํ์ผ์ ๋ณด๋ด๊ณ , ๋๋ดยท๋์ธ ๊ธฐ๊ด๋ ์ ํด์ง ๊ฒฝ๋ก๋ก ํธ์ถํ๋ค. ์ด ์์ฒญ๋ค์ /journal ๊ฐ์ ์ปจํ
์คํธ๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ ๋ถ ๋ฃจํธ(/) = atms-web์ผ๋ก ๋จ์ด์ง๋ค.
๊ทธ๋์ atms-web ๋งจ ์์ ๊ฒ์ดํธ์จ์ด ํํฐ๋ฅผ ํ๋ ๋๋ค. ๊ฒฝ๋ก ์ ๋์ด๋ฅผ ๋ณด๊ณ , ๊ฐ์ JEUS ์์ ํด๋น ์ปจํ ์คํธ๋ก HTTP ์์ฒญ์ ๋ค์ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
graph TD
A[ATM ์์ด์ ํธ POST /api/journal/...]
B[WebtoB]
C[JEUS ์๋ฒ 1๊ฐ - ์ปจํ
์คํธ / = atms-web]
D[ModuleGatewayFilter - ์ ๋์ด ๋งค์นญ]
E[๊ฐ์ JEUS ์ /journal ์ปจํ
์คํธ๋ก HTTP ์ฌ์์ฒญ]
F[atms-journal ์ฒ๋ฆฌ]
A --> B --> C --> D --> E --> F
gateway:
enabled: true
routes:
- prefix: /api/journal
target: ${jeus.base-url}/journal
- prefix: /api/batch
target: ${jeus.base-url}/batch
- prefix: /atmf
target: ${jeus.base-url}/file
# ... /api/agent, /api/file, /api/if/internal, /api/if/external
Tomcat์ ์ฌ๋ ค ๊ฒ์ฆ๊น์ง ๋ง์ณค๊ณ , ๋์ ์์ฒด๋ ๋ฌธ์ ์์๋ค. ๋ค๋ง ์ด ๊ตฌ์กฐ์์ ์ปจํ ์คํธ ๊ฒฝ๋ก ๋๋ฌธ์ ์๊ธด ๋ฒ๊ทธ ๋ ๊ฐ๋ฅผ ๋ง๋ฌ๋ค.
์ ๋ ์์ ์ ๊ฒ์ฆํ๋ HMAC ํํฐ๊ฐ getRequestURI()๋ก /api/journal ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ ์์๋ค. ์ปจํ
์คํธ๊ฐ /์ผ ๋๋ ๋ง์์ง๋ง, JEUS์์๋ URI๊ฐ /journal/api/journal/...์ด ๋๋ฉด์ ๋งค์นญ ์คํจ โ ๊ฒ์ฆ ์์ฒด๋ฅผ ๊ฑด๋๋ฐ์๋ค. ์๋ฌ๊ฐ ์๋๋ผ "ํต๊ณผ"๋ก ๋ํ๋์ ๋ ์ํํ๋ค. ๊ฒฝ๋ก๋ฅผ ๋น๊ตํ ๋๋ getContextPath()๋ฅผ ๋บ ๊ฒฝ๋ก๋ก ํ๋จํ๋๋ก ๊ณ ์ณค๋ค.
๊ฒ์ดํธ์จ์ด๊ฐ ์ฐ๊ฒฐ์ ์คํจํ๋ฉด sendError(502)๋ฅผ ํธ์ถํ๋๋ฐ, /error๋ก ์ฌ๋์คํจ์น๋ ์์ฒญ์๋ ์ธ์ฆ ์ ๋ณด๊ฐ ์์ด์ Spring Security๊ฐ ์ด๋ฅผ 401๋ก ๋ฐ๊ฟ๋ฒ๋ ธ๋ค. ํ๋ก ํธ๋ 401์ ๋ฐ์ผ๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋ณด๋ด๋, ๋ชจ๋ ํ๋๊ฐ ์ฃฝ์ผ๋ฉด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์๋๋ ์
์ด์๋ค. sendError ๋์ 502 ์ํ์ JSON ๋ณธ๋ฌธ์ ์ง์ ์จ์ ์๋ตํ๋๋ก ๋ฐ๊ฟจ๋ค.
"๊ฒ์ดํธ์จ์ด ํ๋ ๋ ๊ฑฐ์น๋ ๊ฒ ๊ทธ๋ ๊ฒ ํฐ ๋น์ฉ์ผ๊น?" ๊ฐ์ผ๋ก ํ๋จํ์ง ์๊ณ Claude Code์ ํจ๊ป ์ง์ ์ฌ๋ณด๊ธฐ๋ก ํ๋ค. ์ํ JEUS์์ ๋ถํ ํ ์คํธ๋ฅผ ํ ์๋ ์์ด์, Tomcat 10.1์ webยทfile ๋ ๋ชจ๋์ ์ฌ๋ ค ์ฐธ๊ณ ์น๋ก ์ธก์ ํ๋ค.
| ํญ๋ชฉ | ์ง์ ํธ์ถ | ๊ฒ์ดํธ์จ์ด ๊ฒฝ์ | ์ฐจ์ด |
|---|---|---|---|
| ์์ JSON ์์ฐจ 300ํ (p50) | 5.3ms | 7.9ms | ๊ฑด๋น ์ฝ +2.6ms |
| ์ฒ๋ฆฌ๋ (๋์ 20) | 690 req/s | 518 req/s | ์ฝ -25% |
| 50MB ๋ค์ด๋ก๋ | 596ms | 883ms | ์ฝ -32% |
ํ๋ฉด ์์ค์ ํธ๋ํฝ์์๋ ์ฒด๊ฐํ๊ธฐ ์ด๋ ค์ด ์ฐจ์ด๋ค. ํ์ง๋ง ์ด ์์คํ ์๋ ์์ฒ ๋์ ATM์ด ๊ณ์ ๋ณด๋ด๋ ์ ๋๊ณผ ๋์ฉ๋ ํ์ผ ๋ค์ด๋ก๋๊ฐ ์๊ณ , 2์ฝ์ด ์๋ฒ์์ ์ ๋ฌ ์์ฒญ์ CPU๋ฅผ ์ฝ 1.5๋ฐฐ ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ง์ง ๋ฌธ์ ๋ ์ซ์๋ณด๋ค ๊ตฌ์กฐ์ ์์๋ค.
atms-web์ ์ค๋ ๋๊ฐ ๋์ ๋ชจ๋์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๋์, ๋์ ๋ชจ๋๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ค๋ ๋๊ฐ ํ์ํ๋ค. ๋์ด ๊ฐ์ ์ค๋ ๋ ํ์์ ๋์ค๋ฉด ์๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฉ์ถ ์ ์๋ค.
์ค์ ๋ก ์ฌํํด๋ดค๋ค. ์ค๋ ๋ ํ์ 4๊ฐ๋ก ์ค์ด๊ณ ๋์ 16๊ฑด์ฉ 32๊ฑด์ ๋ณด๋๋ค.
| ํธ์ถ ๋ฐฉ์ | ๊ฒฐ๊ณผ |
|---|---|
| ์ง์ ํธ์ถ | 32๊ฑด ๋ชจ๋ ์ฑ๊ณต (0.5์ด) |
| ๊ฒ์ดํธ์จ์ด ๊ฒฝ์ | 32๊ฑด ๋ชจ๋ ํ์์์ โ ์ฝ๊ธฐ ํ์์์(120์ด)๊น์ง ์๋ฒ ์ ์ฒด ๋ฌด์๋ต |
์ค๋ ๋ ๋คํ๋ฅผ ๋ ๋ณด๋ 4๊ฐ ์ค๋ ๋๊ฐ ๋ชจ๋ ModuleGatewayFilter์์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์๊ณ , ์ ์ ๋์ ์ฑ์ ์ค๋ ๋๋ฅผ ํ๋๋ ๋ฐ์ง ๋ชปํ๊ณ ์์๋ค.
graph TD
A[์์ฒญ 4๊ฑด ๋์ฐฉ - ์ค๋ ๋ 4๊ฐ ๋ชจ๋ ์ฌ์ฉ]
B[๊ฐ ์ค๋ ๋๊ฐ ๊ฒ์ดํธ์จ์ด์์ /journal ๋ก ์ฌ์์ฒญ]
C[์ฌ์์ฒญ์ด ๊ฐ์ ํ์์ ๋น ์ค๋ ๋๋ฅผ ๊ธฐ๋ค๋ฆผ]
D[๋น ์ค๋ ๋ ์์ - ์๋ฌด๋ ๋๋์ง ์์]
A --> B --> C --> D
D -->|ํ์์์๊น์ง ๋๊ธฐ| A
JEUS์์๋ ์ธ๋ถ ์์ฒญ(WebtoB ์ปค๋ฅํฐ)๊ณผ ์ฌ์์ฒญ(HTTP ๋ฆฌ์ค๋)์ด ์๋ก ๋ค๋ฅธ ํ์ ์ฐ๋ ๊ตฌ์กฐ๋ผ ๋น์ฅ ํฐ์ง ๊ฐ๋ฅ์ฑ์ ๋ฎ์๋ค. ํ์ง๋ง "ํ ์ค์ ์ ๋ฐ๋ผ ์๋ฒ ์ ์ฒด๊ฐ ๋ฉ์ถ ์ ์๋ ๊ตฌ์กฐ" ๋ฅผ ์ด์๊น์ง ๊ฐ์ ธ๊ฐ๊ณ ์ถ์ง๋ ์์๋ค.
๊ฒฐ์ ์ ์ธ ๊ณ๊ธฐ๊ฐ ํ๋ ๋ ์์๋ค. ์๋ฒ๋ฅผ ์ ๊ฒํด๋ณด๋ 6๊ฐ ์ฑ ์ค 1๊ฐ๋ง ๋ฑ๋ก๋์ด ์์๊ณ , ๋๋จธ์ง 5๊ฐ ๋ฑ๋ก์ ์ด์ฐจํผ WAS ๋ด๋น์๊ฒ ์์ฒญํด์ผ ํ๋ค. ์ด์ฐจํผ ์์ฒญํ ๊ฑฐ๋ผ๋ฉด ๊ตฌ์ฑ ์์ฒด๋ฅผ ๋ค์ ์ ํ์๊ณ ํ๋จํ๋ค.
๊ทธ๋ฐ๋ฐ "๋ชจ๋๋ง๋ค ํฌํธ๋ฅผ ๋ฐ๋ก ๊ฐ๊ฒ ํด ์ฃผ์ธ์"๋ฅผ JEUS์ ์ธ์ด๋ก ๋ฐ๊พธ๋ ค๋ ์ฉ์ด๋ถํฐ ํท๊ฐ๋ ธ๋ค. ๊ทธ๋์ Claude Code์๊ฒ ์ง๋ฌธ์ ํ๋์ฉ ์ชผ๊ฐ์ ๋์ง๋ฉฐ ๊ฐ๋ ๋ถํฐ ๋ง์ท๋ค.
| ์์ | ์ง๋ฌธ | ์ ๋ฆฌ๋ ๋ต |
|---|---|---|
| 1 | JEUS ํ๋์์ 6๊ฐ๋ฅผ ๊ฐ์ ํฌํธ๋ก ๋์ธ ์ ์๋? | ์๋ฒ 1๊ฐ(=JVM 1๊ฐ)์์๋ WAR๊ฐ ํฌํธ๋ฅผ ๊ฐ์ง ์๋๋ค. ์๋ฒ์ ๋ฆฌ์ค๋๋ฅผ ๊ณต์ ํ๊ณ ์ปจํ ์คํธ๋ก ๊ตฌ๋ถํ ๋ฟ์ด๋ค |
| 2 | "JEUS 6๊ฐ"๊ฐ ๊ฐ๋ฆฌํฌ ์ ์๋ ๊ตฌ์ฑ์? | โ ์๋ฒ 1๊ฐ + ๋ฆฌ์ค๋ 6๊ฐ โก ๋๋ฉ์ธ 1๊ฐ + ๋งค๋์ง๋ ์๋ฒ 6๊ฐ โข JEUS(๋๋ฉ์ธ) 6๊ฐ โ ์ฐจ์ด์ ํต์ฌ์ JVM ์ |
| 3 | ๋ด์ฅ ํฐ์บฃ 6๊ฐ๋ฅผ ๋์ฐ๋ ์ ์ฒด ๊ตฌ์ฑ์ ์ ์ค ๋ฌด์๊ณผ ๊ฐ๋? | ๊ตฌ์กฐ(JVM 6๊ฐยทํฌํธ 6๊ฐยท์ฅ์ ๊ฒฉ๋ฆฌ)๋ โก์ ๊ฐ๋ค |
| 4 | ํฐ์บฃ๊ณผ JEUS๋ ๊ฐ์ ๊ฐ๋ ์๋๊ฐ? | ๋ง๋ค โ ๋ ๋ค ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ค. ์ฐจ์ด๋ JEUS ์ชฝ์ ๊ด๋ฆฌ ์ธต(DASยทNodeManager)์ด ๋ถ๋๋ค๋ ๊ฒ๋ฟ |
JEUS์ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์ด๋ ๋ค.
๋ฌผ๋ฆฌ ์๋ฒ (2์ฝ์ด)
โโ JEUS ์ค์น
โโ ๋๋ฉ์ธ (domain.xml ํ๋)
โโ DAS โ ๊ด๋ฆฌ ์ ์ฉ JVM. ์ค์ ๋ณด๊ดยท๋ฐฐํฌยท์๋ฒ ๊ธฐ๋/์ ์ง ๋ช
๋ น
โโ NodeManager โ ์๋ฒ ํ๋ก์ธ์ค๋ฅผ ๋์ฐ๊ณ ๊ฐ์ํ๋ ๋ฐ๋ชฌ
โโ ๋งค๋์ง๋ ์๋ฒ ร N โ ์ค์ ์ฑ์ด ๋๋ JVM. ๊ฐ์ ๋ฆฌ์ค๋(ํฌํธ)ยทํยท๋ก๊ทธ
โโ ์ ํ๋ฆฌ์ผ์ด์
(WAR)
| ๊ตฌ์ฑ | JVM ์ | ํ๋จ |
|---|---|---|
| โ ์๋ฒ 1๊ฐ + ๋ฆฌ์ค๋ 6๊ฐ | 1 | ํฌํธ๋ง ๋๋๊ณ ์ฅ์ ๊ฒฉ๋ฆฌ๋ ์์, ์ง์ ์ฌ๋ถ๋ ๋ฏธํ์ธ |
| โก ๋๋ฉ์ธ 1๊ฐ + ๋งค๋์ง๋ ์๋ฒ 6๊ฐ | 6 (+DAS) | ์ฑํ |
| โข JEUS(๋๋ฉ์ธ) 6๊ฐ | 12 | ๊ด๋ฆฌ ์ธต์ด 6๋ฒ โ 2์ฝ์ด ์๋ฒ์ ๋ถ์ ํฉ |
| ๋ด์ฅ ํฐ์บฃ (๋ก์ปฌ) | JEUS |
|---|---|
java -jar atms-journal.jar ํ๋ก์ธ์ค 1๊ฐ |
๋งค๋์ง๋ ์๋ฒ 1๊ฐ (JVM) |
server.port=8081 |
์๋ฒ์ HTTP ๋ฆฌ์ค๋ ํฌํธ |
| ์ฑ์ด ํฐ์บฃ์ ํ์ (JAR) | ์๋ฒ๊ฐ ์ฑ์ ํ์ (WAR ๋ฑ๋ก) |
| ํ๋ก์ธ์ค๋ฅผ ์ง์ ์คํยท์ ์ง | DASยทNodeManager๊ฐ ์๋ฒ๋ค์ ๊ด๋ฆฌ |
๊ฒฐ๊ตญ "๋งค๋์ง๋ ์๋ฒ 6๊ฐ" = "๋ด์ฅ ํฐ์บฃ 6๊ฐ" ์ ์คํ ๋จ์๊ฐ ๊ฐ๋ค. ๋๊ณ ๋์ ์ ์ฒด ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์กฐ(๋ชจ๋๋น ํ๋ก์ธ์ค ํ๋)๋ก ๋์๊ฐ๋ ์ ์ด์๋ค.
graph TD
PC[์ด์์ PC ๋ธ๋ผ์ฐ์ ] --> W[WebtoB]
W -->|/index.html, /assets/| S[์ ์ ํ์ผ - ํ๋ฉด]
W -->|/api/journal/, /api/agent/| J[journal ์๋ฒ :8081]
W -->|/api/batch/| B[batch ์๋ฒ :8082]
W -->|/api/file/, /atmf/| F[file ์๋ฒ :8083]
W -->|/api/if/internal/| I[if-internal ์๋ฒ :8084]
W -->|/api/if/external/| E[if-external ์๋ฒ :8085]
W -->|๋๋จธ์ง /api/| WEB[web ์๋ฒ :8080]
/์ด๊ณ , ๊ฒ์ดํธ์จ์ด๋ ๊ป๋ค. ๊ฒฝ๋ก ๋ถ๋ฐฐ๋ WebtoB๊ฐ ๊ฐ ์๋ฒ๋ก ์ง์ ํ๋ค./api/journal/์ด /api/๋ณด๋ค ์)| ์ป๋ ๊ฒ | ๊ฐ์ํ๋ ๊ฒ |
|---|---|
| ๋ชจ๋๋ณ ์ฅ์ ๊ฒฉ๋ฆฌ (ํ ๋ชจ๋์ OOMยท์ค๋ ๋ ๊ณ ๊ฐ์ด ๋ค๋ฅธ ๋ชจ๋๋ก ๋ฒ์ง์ง ์์) | JVM 6๊ฐ๋ถ ๋ฉ๋ชจ๋ฆฌยทCPU โ ์๋ฒ๋น ํ์ 512m~768m๋ก ์๊ฒ |
| ๋ชจ๋๋ง ๋ฐ๋ก ์ฌ๊ธฐ๋ (์ด์ ์๋ 6๊ฐ๊ฐ ํจ๊ป ๋ด๋ ค๊ฐ) | ์๋ฒ ์์ฑยทWebtoB ์ปค๋ฅํฐ ๋ฑ๋ก ๊ฐ์ WAS ๋ด๋น ์์ |
| ๋ก์ปฌ๊ณผ ๊ฐ์ ์ฃผ์ ์ฒด๊ณ (8080~8085, ์ปจํ ์คํธ /) | ์๋ฒ๋ง๋ค ๋ก๊ทธยท์ฌ๊ธฐ๋ ๋ฉ๋ดยท๋ชจ๋ํฐ๋ง์ด ๋ฐ๋ก |
| ๊ฒ์ดํธ์จ์ด ์ ๊ฑฐ โ ์ง์ฐยท์ฒ๋ฆฌ๋ ์ํด์ ๊ต์ฐฉ ์ํ์ด ์ฌ๋ผ์ง | WebtoB ๊ฒฝ๋ก ๊ท์น์ด 6๊ฐ ์๋ฒ๋ก ๋์ด๋จ |
๊ตฌ์ฑ์ ํฌ๊ฒ ๋ฐ๋์์ง๋ง ์์ค ๋ณ๊ฒฝ์ ์์ธ๋ก ์์๋ค. ๋ชจ๋ ๊ฐ ํธ์ถ ์ฃผ์๋ฅผ ํ ๊ณณ์ ๋ชจ์ผ๊ณ , ๊ฐ ๋ชจ๋์ด ๊ทธ ๊ฐ์ ์ฐธ์กฐํ๊ฒ ํ๋ค.
โ ๊ณตํต ์ค์ jeus-common.yml โ ๋ชจ๋๋ณ ์ฃผ์๋ฅผ ํ ๊ณณ์
jeus:
host: 10.0.20.15 # ๋ฆฌ์ค๋๊ฐ ์ค์ ๋ก LISTEN ํ๋ ์ฃผ์
url:
web: http://${jeus.host}:8080
journal: http://${jeus.host}:8081
batch: http://${jeus.host}:8082
file: http://${jeus.host}:8083
ifin: http://${jeus.host}:8084
ifex: http://${jeus.host}:8085
โก ๋ชจ๋๋ณ application-jeus.yml โ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋๊ณ ์ฃผ์๋ ์ฐธ์กฐ๋ง
spring:
config:
import: classpath:jeus-common.yml
# ๋ ๊ฑฐ์ ์์ด์ ํธ .do ๊ฒฝ๋ก โ atms-journal
agent:
proxy:
journal-base-url: ${jeus.url.journal}
# ๋ชจ๋ ๊ฒฝ๋ก๋ WebtoB ๊ฐ ๊ฐ ์๋ฒ๋ก ๋ฐ๋ก ๋ณด๋ธ๋ค โ atms-web ์ด ์ ๋ฌํ์ง ์์
gateway:
enabled: false
โข ๋ฐฐํฌ ์คํฌ๋ฆฝํธ โ ๋ชจ๋ โ ํฌํธ, ์ฌ๊ธฐ๋์ ๊ทธ ์๋ฒ๋ง
http://<์๋ฒ>:<ํฌํธ>/v3/api-docs๊ฐ 200์ธ์ง๋ก ๋ณธ๋ค. (actuator health๋ DB๊ฐ ๋ถ๊ธฐ ์ ์๋ 503์ด๋ผ ๋์ ์ฌ์ฉ)์ด์ ๊ตฌ์ฑ์์ ๋ฆฌ์ค๋๊ฐ ์๋ฒ IP์๋ง LISTENํ๊ณ ์์ด์, 127.0.0.1๋ก ์ํ๋ฅผ ํ์ธํ๋ ์คํฌ๋ฆฝํธ๊ฐ ํญ์ 000์ ๋ฐ์ ์ ์ด ์๋ค. ๋ชจ๋ ๊ฐ ํธ์ถ ์ฃผ์์ ํฌ์ค์ฒดํฌ ์ฃผ์๋ ๋ฆฌ์ค๋๊ฐ ์ค์ ๋ก LISTENํ๋ ์ฃผ์์ ๊ฐ์์ผ ํ๋ค. ss -ltn์ผ๋ก ๋จผ์ ํ์ธํ์.
๊ฒฐ๋ก
์ฒ์ ๊ตฌ์ฑ์ "JEUS ํ๋์ ๋ค ์ฌ๋ฆฐ๋ค"๋ ์ง๊ด์์ ์ถ๋ฐํ๊ณ , ๊ทธ ์ง๊ด์ ์งํค๋ ค๊ณ ๊ฒ์ดํธ์จ์ด๋ผ๋ ์ฐํ๋ก๋ฅผ ๋ง๋ค์๋ค. ๊ทธ๋ฐ๋ฐ ์ง์ ์ฌ ๋ณด๋ ๊ทธ ์ฐํ๋ก๊ฐ ์ฑ๋ฅ๊ณผ ์์ ์ฑ ๋ชจ๋์์ ๋น์ฉ์ ๋ง๋ค๊ณ ์์๋ค. ๊ฒฐ๊ตญ ๋ต์ ์ ์ฒด ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๊ฐ์ ๊ตฌ์กฐ(๋ชจ๋๋น ํ๋ก์ธ์ค ํ๋)๋ฅผ WAS์ ์ธ์ด๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด์๋ค.
AI์์ ํ์ ์์ ๊ฐ์ฅ ๋์์ด ๋ ๊ฑด ์ ๋ต์ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ, "JEUS 6๊ฐ"์ฒ๋ผ ๋ชจํธํ ๋ง์ ์ง๋ฌธ ๋จ์๋ก ์ชผ๊ฐ ๊ฐ๋ ๋ถํฐ ๋ง์ถ ๊ฒ์ด์๋ค. ์ฉ์ด๊ฐ ์ ๋ฆฌ๋์ WAS ๋ด๋น์๊ฒ ๋ณด๋ผ ์์ฒญ์๋ ํ ์ฅ์ผ๋ก ์ ๋ฆฌ๋๋ค.
๋ค์์๋ ์ธํฐ๋ท์ด ๋งํ ํ์๋ง์์ Gitea + Jenkins๋ก CI/CD๋ฅผ ๋ค์ ๊ตฌ์ฑํ ์ด์ผ๊ธฐ๋ฅผ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.