[Linux] ์„œ๋ฒ„ ๊ด€๋ฆฌ ํ•„์ˆ˜ ๋ช…๋ น์–ด ๋ชจ์Œ: ๋กœ๊ทธ ์ •๋ฆฌ(find), ๋„คํŠธ์›Œํฌ(netstat), ๋ฉ”๋ชจ๋ฆฌ ์ ๊ฒ€

๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ ์šด์˜ ์ค‘ ๋กœ๊ทธ ํŒŒ์ผ ์ •๋ฆฌ, ๋””์Šคํฌ ์šฉ๋Ÿ‰ ํ™•๋ณด, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ƒํƒœ ์ ๊ฒ€, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ํ™•์ธ์„ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด ํŒจํ„ด(One-Liner)์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. RedHat/CentOS 7 ํ™˜๊ฒฝ์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7, RedHat 7.2
  • Shell: Bash

1. ํŒŒ์ผ ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ฆฌ (File Management)

์„œ๋ฒ„ ์šด์˜ ์ค‘ ๊ฐ€์žฅ ํ”ํ•œ ์ด์Šˆ๋Š” ๋กœ๊ทธ ํŒŒ์ผ๋กœ ์ธํ•œ ๋””์Šคํฌ ํ’€(Disk Full)์ž…๋‹ˆ๋‹ค. find ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ž˜๋œ ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์ตœ๊ทผ ์ˆ˜์ •๋œ ํŒŒ์ผ ์ฐพ๊ธฐ

์„ค์ • ํŒŒ์ผ(xml ๋“ฑ)์ด ์ตœ๊ทผ์— ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# ์ตœ๊ทผ 7์ผ ์ด๋‚ด(-7)์— ์ˆ˜์ •๋œ xml ํŒŒ์ผ ๊ฒ€์ƒ‰
find . -type f -name "*.xml" -mtime -7 -print

์˜ค๋ž˜๋œ ๋กœ๊ทธ ํŒŒ์ผ ์‚ญ์ œ

๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ผ์ • ๊ธฐ๊ฐ„์ด ์ง€๋‚œ ํŒŒ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œ ๋ช…๋ น(rm)์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „, ๋ฐ˜๋“œ์‹œ ์กฐํšŒ(ls)๋ฅผ ๋จผ์ € ์ˆ˜ํ–‰ํ•˜์—ฌ ๋Œ€์ƒ์„ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# 1. ๋Œ€์ƒ ํ™•์ธ (7์ผ์ด ์ง€๋‚œ ๋กœ๊ทธ ํŒŒ์ผ ์กฐํšŒ)
find /log/server1 -name "*.log" -mtime +7 -print

# 2. ์‚ญ์ œ ์‹คํ–‰ (๋ฐฉ๋ฒ• A: -delete ์˜ต์…˜ ์‚ฌ์šฉ)
find /log/server1 -name "*.log" -mtime +7 -delete

# 2. ์‚ญ์ œ ์‹คํ–‰ (๋ฐฉ๋ฒ• B: -exec rm ์‚ฌ์šฉ, ๊ฐ€์žฅ ๋ฒ”์šฉ์ )
find /log/server1 -name "*.log" -mtime +7 -exec rm -f {} \;

# 3. 30์ผ ์ด์ƒ ๋œ ๋กœ๊ทธ ํŒŒ์ผ๋งŒ ๊ฐ•์ œ ์‚ญ์ œ
find /log/server1 -type f -name "*.log" -ctime +30 -exec rm -rf {} \;

๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ๊ฒ€์ƒ‰

๋””์Šคํฌ ์šฉ๋Ÿ‰์„ ๋งŽ์ด ์ฐจ์ง€ํ•˜๋Š” ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

# 3GB ์ด์ƒ์ธ ํŒŒ์ผ์„ ์ฐพ์•„ ์šฉ๋Ÿ‰๊ณผ ํ•จ๊ป˜ ์ถœ๋ ฅ
find . -size +3000000k -exec ls -lh {} \+

๋‚ ์งœ์ˆœ ํŒŒ์ผ ์ •๋ ฌ ๋ณด๊ธฐ

๊ธฐ๋ณธ ls -l์˜ ๋‚ ์งœ ํฌ๋งท์ด ๋ณด๊ธฐ ํž˜๋“ค ๋•Œ ISO ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ls --time-style="+%Y-%m-%d %H:%M:%S" -altr | grep ^- | more

2. ๋„คํŠธ์›Œํฌ ์ƒํƒœ ์ ๊ฒ€ (Network Monitoring)

์›น ์„œ๋ฒ„๋‚˜ DB ์„œ๋ฒ„์˜ ํ˜„์žฌ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ์ŠคํŒŒ์ดํฌ๋‚˜ ์—ฐ๊ฒฐ ๋ˆ„์ˆ˜(Leak)๋ฅผ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

๋™์‹œ ์ ‘์†์ž ์ˆ˜ ํ™•์ธ (Web Server)

ESTABLISHED ์ƒํƒœ๋Š” ํ˜„์žฌ ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

# 80 ํฌํŠธ ๋™์‹œ ์ ‘์†์ž ์ˆ˜ ์นด์šดํŠธ
netstat -nap | grep :80 | grep ESTABLISHED | wc -l

# 8080 ํฌํŠธ(WAS) ๋™์‹œ ์ ‘์†์ž ์ˆ˜ ์นด์šดํŠธ
netstat -nap | grep :8080 | grep ESTABLISHED | wc -l

DB ์—ฐ๊ฒฐ ํ’€(Connection Pool) ํ™•์ธ

WAS์—์„œ DB๋กœ ๋งบ์€ ์—ฐ๊ฒฐ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํฌํŠธ ๋ฒˆํ˜ธ๋กœ grepํ•˜์—ฌ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

# ํŠน์ • ํฌํŠธ์™€ ์—ฐ๊ฒฐ๋œ ์†Œ์ผ“ ์ •๋ณด ํ™•์ธ
netstat -anp | grep {port_number}

# ์—ฐ๊ฒฐ ๊ฐœ์ˆ˜ ์นด์šดํŠธ
netstat -anp | grep {port_number} | wc -l

3. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ์ ๊ฒ€ (Memory Check)

๋ฆฌ๋ˆ…์Šค์˜ free ๋ช…๋ น์–ด๋Š” ๋ฒ„ํผ/์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ(Actual Used)๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ณ„์‚ฐ ์Šคํฌ๋ฆฝํŠธ (Shell)

์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๋Œ€๋น„ ์‹ค์ œ ์‚ฌ์šฉ๋ฅ ์„ ๋ฐฑ๋ถ„์œจ(%)๋กœ ๊ณ„์‚ฐํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

#!/bin/sh
# free ๋ช…๋ น์–ด์˜ ์ถœ๋ ฅ ์ปฌ๋Ÿผ ์œ„์น˜๋Š” OS ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ™•์ธ ํ•„์š” (awk $2, $3...)

# Total Memory
TOTAL=`free | grep ^Mem | awk '{print $2}'`

# Used Memory (OS ๊ด€์ )
USED1=`free | grep ^Mem | awk '{print $3}'`

# Used Memory (Buffer/Cache ์ œ์™ธ, CentOS 6 ์ดํ•˜ ๊ตฌ๋ฒ„์ „ ๋ฐฉ์‹)
# USED2=`free | grep ^-/+ | awk '{print $3}'`

# CentOS 7 ์ด์ƒ (available ์ปฌ๋Ÿผ ๋“ฑ ๊ณ ๋ ค ํ•„์š”ํ•˜๋‚˜ ๋‹จ์ˆœ ๊ณ„์‚ฐ ์‹œ)
# ๋ฒ„ํผ/์บ์‹œ๋ฅผ ํฌํ•จํ•œ ๋‹จ์ˆœ ์‚ฌ์šฉ๋ฅ 
NOMINAL=$((100*USED1/TOTAL))

echo "Memory Usage: ${NOMINAL}%"

One-Liner (๊ฐ„ํŽธ ๊ณ„์‚ฐ)

awk๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ์ค„๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

# ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๋Œ€๋น„ ์‚ฌ์šฉ๋Ÿ‰(Used) ๋น„์œจ
awk '/^Mem/ {printf("Used: %u%%", 100*$3/$2);}' <(free -m)

# (์ฐธ๊ณ ) ๋ฒ„ํผ/์บ์‹œ๋ฅผ ์ œ์™ธํ•œ ์‹ค ์‚ฌ์šฉ๋ฅ  ๊ณ„์‚ฐ์€ free -m์˜ available ์ปฌ๋Ÿผ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
free -m | awk 'NR==2{printf "Memory Usage: %.2f%%\n", ($3/$2)*100 }'

Next Step:
๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์œ„ ๋ช…๋ น์–ด๋“ค์„ ~/.bash_profile์— alias๋กœ ๋“ฑ๋กํ•ด๋‘๋ฉด, ๊ธด ๋ช…๋ น์–ด๋ฅผ ํƒ€์ดํ•‘ํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ๊ณ  ์˜คํƒ€๋กœ ์ธํ•œ ์‚ฌ๊ณ ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[WebSphere] Liberty Profile & Eclipse ์—ฐ๋™ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๊ฐ€์ด๋“œ (WDT ์„ค์น˜)

IBM WebSphere Liberty Profile(WLP)์„ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ธ Eclipse์— ์—ฐ๋™ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ, ๋ฐฐํฌ, ๋””๋ฒ„๊น… ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. IBM WebSphere Developer Tools(WDT) ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋ฐ ์„œ๋ฒ„ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ๊ณผ์ •์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: Windows 10
  • IDE: Eclipse IDE for Enterprise Java Developers (2020-06 ์ด์ƒ ๊ถŒ์žฅ)
  • Middleware: WebSphere Liberty Profile (Kernel or Core)

1. ์‚ฌ์ „ ์ค€๋น„ (Prerequisites)

Liberty ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Java SDK์™€ Eclipse๊ฐ€ ๋ฏธ๋ฆฌ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • JDK: 1.8 ์ด์ƒ ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜(JAVA_HOME) ์„ค์ •.
  • Eclipse: 'Eclipse IDE for Enterprise Java and Web Developers' ํŒจํ‚ค์ง€ ์‚ฌ์šฉ ๊ถŒ์žฅ.

2. WebSphere Developer Tools (WDT) ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

Eclipse์—์„œ Liberty ์„œ๋ฒ„๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ „์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ์ ˆ์ฐจ

  1. Eclipse ๋ฉ”๋‰ด์—์„œ Help > Eclipse Marketplace...๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฒ€์ƒ‰์ฐฝ์— IBM Liberty ๋˜๋Š” WebSphere Developer Tools๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. "IBM Liberty Developer Tools" ํ•ญ๋ชฉ์„ ์ฐพ์•„ Install ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ผ์ด์„ ์Šค ๋™์˜ ํ›„ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, ์™„๋ฃŒ ํ›„ Eclipse๋ฅผ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

3. Liberty ๋Ÿฐํƒ€์ž„(Runtime) ๋“ฑ๋ก

์ด๋ฏธ ์„ค์น˜๋œ Liberty Core๋ฅผ Eclipse์— ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜, Eclipse๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๋“ฑ๋ก ๊ณผ์ •

  1. Servers ๋ทฐ์—์„œ ์šฐํด๋ฆญ > New > Server ์„ ํƒ.
  2. ์„œ๋ฒ„ ํƒ€์ž…์—์„œ IBM > WebSphere Liberty ์„ ํƒ.
  3. Server's host name์€ localhost, Server name์€ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„ ์ž…๋ ฅ.
  4. Runtime Environment ์„ค์ • ๋‹จ๊ณ„:
    • ๊ธฐ์กด ์„ค์น˜๋œ ๊ฒฝ์šฐ: 'Choose an existing installation' ์„ ํƒ ํ›„ Liberty ์„ค์น˜ ๊ฒฝ๋กœ(wlp ํด๋”) ์ง€์ •.
    • ์ƒˆ๋กœ ์„ค์น˜ํ•  ๊ฒฝ์šฐ: 'Install from an archive or a repository' ์„ ํƒ ํ›„ ์›ํ•˜๋Š” ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ.
  5. Finish๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„ค์ •์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

4. ์„œ๋ฒ„ ๊ตฌ๋™ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด Eclipse ๋‚ด์—์„œ ์„œ๋ฒ„๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ œ์–ด

  • Start: Servers ๋ทฐ์—์„œ ์„œ๋ฒ„ ์šฐํด๋ฆญ > Start (๋˜๋Š” Debug).
  • Console ํ™•์ธ: CWWKF0011I: The server defaultServer is ready to run a smarter planet. ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋ฉด ์ •์ƒ ๊ตฌ๋™๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ

  1. Dynamic Web Project ์ƒ์„ฑ.
  2. ํ”„๋กœ์ ํŠธ ์šฐํด๋ฆญ > Run As > Run on Server.
  3. ๋“ฑ๋กํ•œ Liberty ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•˜๊ณ  Finish.
  4. server.xml์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜๋ฉฐ ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

5. ์ฐธ๊ณ  ์˜์ƒ (Reference Video)

์‹ค์ œ ์„ค์น˜ ๋ฐ ๊ตฌ๋™ ๊ณผ์ •์— ๋Œ€ํ•œ ๋ฐ๋ชจ ์˜์ƒ์ž…๋‹ˆ๋‹ค.


Next Step:
๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, server.xml ํŒŒ์ผ์˜ <featureManager> ์„น์…˜์„ ์ˆ˜์ •ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ(JSP, Servlet, JDBC ๋“ฑ)์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ด ๋ณด์‹ญ์‹œ์˜ค.

[Tomcat] Windows ํ™˜๊ฒฝ Apache Tomcat 9 ์„ค์น˜ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ

Windows 10 ํ™˜๊ฒฝ์—์„œ Java ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์ธ Apache Tomcat 9์„ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. JDK ์„ค์น˜ ํ™•์ธ๋ถ€ํ„ฐ ๋‹ค์šด๋กœ๋“œ, ์••์ถ• ํ•ด์ œ, ๊ทธ๋ฆฌ๊ณ  ์ฃผ์š” ๋””๋ ‰ํ† ๋ฆฌ(bin, conf, logs)์˜ ์—ญํ• ๊ณผ ๊ตฌ๋™ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

0. ์‚ฌ์ „ ์ค€๋น„ (Prerequisites)

Tomcat์€ Java๋กœ ๊ตฌ๋™๋˜๋ฏ€๋กœ JDK(Java Development Kit)๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์„ค์น˜ ์ „ ๋ฐ˜๋“œ์‹œ Java ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Java ์„ค์น˜ ํ™•์ธ

:: CMD ์ฐฝ์—์„œ ํ™•์ธ
java -version
javac -version
Check Point: ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด JDK๋ฅผ ๋จผ์ € ์„ค์น˜ํ•˜๊ณ , ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜(JAVA_HOME, PATH)๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Tomcat์€ ์‹คํ–‰ ์‹œ JAVA_HOME์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

1. ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜ (Download & Install)

์„ค์น˜ํ˜•(Installer)๋ณด๋‹ค๋Š” ์••์ถ•ํ˜•(Zip)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๊ณ , ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ

  • ๊ณต์‹ ์‚ฌ์ดํŠธ: http://tomcat.apache.org/
  • ๋ฒ„์ „ ์„ ํƒ: Tomcat 9 (Latest Stable) > Binary Distributions > Core: zip (64-bit/32-bit Windows)

์„ค์น˜ (์••์ถ• ํ•ด์ œ)

๋‹ค์šด๋กœ๋“œํ•œ Zip ํŒŒ์ผ์„ ์›ํ•˜๋Š” ๊ฒฝ๋กœ์— ์••์ถ• ํ•ด์ œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์„ค์น˜๋Š” ๋๋‚ฉ๋‹ˆ๋‹ค.

  • ์„ค์น˜ ๊ฒฝ๋กœ ์˜ˆ์‹œ: E:\APP\WAS\TOMCAT9

2. ์ฃผ์š” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ (Directory Structure)

์••์ถ•์„ ํ•ด์ œํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํด๋”์˜ ์—ญํ• ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด WAS ์šด์˜์˜ ์ฒซ๊ฑธ์Œ์ž…๋‹ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ ์—ญํ•  ๋ฐ ์ฃผ์š” ํŒŒ์ผ
/bin ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐ ์ข…๋ฃŒ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
- startup.bat: ์„œ๋ฒ„ ์‹œ์ž‘ (Windows)
- shutdown.bat: ์„œ๋ฒ„ ์ค‘์ง€ (Windows)
- catalina.bat: ์‹คํ–‰ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ์˜ต์…˜ ์„ค์ •
/conf ์„œ๋ฒ„ ์ „์ฒด ์„ค์ • ํŒŒ์ผ์ด ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
- server.xml: ํฌํŠธ(8080, 8009), ์—”์ง„ ์„ค์ •
- web.xml: ์„ธ์…˜ ํƒ€์ž„์•„์›ƒ, MIME ํƒ€์ž… ๋“ฑ ๊ณตํ†ต ์„ค์ •
/lib Tomcat ๊ตฌ๋™์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Jar) ์ €์žฅ์†Œ (JDBC ๋“œ๋ผ์ด๋ฒ„ ๋“ฑ ํฌํ•จ)
/logs ์„œ๋ฒ„ ๋กœ๊ทธ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
- catalina.yyyy-mm-dd.log: ์—”์ง„ ๋กœ๊ทธ
- localhost_access_log: ์ ‘์† ๋กœ๊ทธ
/webapps ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(WAR ํŒŒ์ผ)์„ ๋ฐฐํฌํ•˜๋Š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

3. ๊ตฌ๋™ ๋ฐ ๊ฒ€์ฆ (Start & Verify)

์„ค์น˜๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์—ˆ๋Š”์ง€ ์„œ๋ฒ„๋ฅผ ์ผœ์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๊ตฌ๋™

:: bin ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd E:\APP\WAS\TOMCAT9\bin

:: ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ๋™์ž‘
startup.bat

์ƒˆ๋กœ์šด CMD ์ฐฝ์ด ๋œจ๋ฉด์„œ ๋กœ๊ทธ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ , ๋งˆ์ง€๋ง‰์— Server startup in [xxx] ms ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด๋ฉด ๊ตฌ๋™ ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

์ ‘์† ํ…Œ์ŠคํŠธ

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  http://localhost:8080 ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์–‘์ด ๊ทธ๋ฆผ์ด ์žˆ๋Š” Tomcat ๊ธฐ๋ณธ ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


Next Step:
๊ธฐ๋ณธ ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” server.xml์„ ์ˆ˜์ •ํ•˜์—ฌ HTTP ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์ธ์ฝ”๋”ฉ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋Š” Tomcat ๊ธฐ๋ณธ ์„ค์ • ํŠœ๋‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

[IHS] SSL/TLS ๋ณด์•ˆ ๊ฐ•ํ™”: Protocol ๋น„ํ™œ์„ฑํ™” ๋ฐ Cipher Suite ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์„ค์ •

IBM HTTP Server(IHS)๋Š” Apache ๊ธฐ๋ฐ˜์ด์ง€๋งŒ, SSL ๋ชจ๋“ˆ์€ ๋ณ„๋„์˜ mod_ibm_ssl์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ Apache(mod_ssl)์™€ ํ”„๋กœํ† ์ฝœ ์„ค์ • ๋ฌธ๋ฒ•์ด ์ƒ์ดํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์„œ๋ฒ„ ๊ฐ„์˜ ์„ค์ • ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ณ , IHS v8.5 ํ™˜๊ฒฝ์—์„œ์˜ ๋ณด์•ˆ ๊ฐ•ํ™” ์„ค์ •์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

[Image of SSL TLS handshake process]

1. Apache vs IHS ์„ค์ • ์ฐจ์ด์  (Comparison)

๋‘ ์›น ์„œ๋ฒ„๋Š” SSL/TLS ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—”์ง„๊ณผ ๋ชจ๋“ˆ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, httpd.conf์— ์ž‘์„ฑํ•˜๋Š” ์ง€์‹œ์–ด(Directive)๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋‚˜ ์šด์˜ ์‹œ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ถ„ Apache HTTP Server (Community) IBM HTTP Server (IHS)
์‚ฌ์šฉ ๋ชจ๋“ˆ mod_ssl (OpenSSL ๊ธฐ๋ฐ˜) mod_ibm_ssl (IBM GSKit ๊ธฐ๋ฐ˜)
ํ”„๋กœํ† ์ฝœ ์„ค์ • SSLProtocol (ํ•œ ์ค„๋กœ ์ œ์–ด) SSLProtocolDisable
SSLProtocolEnable (๊ฐœ๋ณ„ ์ œ์–ด)
Cipher ์„ค์ • SSLCipherSuite SSLCipherSpec

์„ค์ • ๋ฌธ๋ฒ• ๋น„๊ต ์˜ˆ์‹œ

Apache (mod_ssl)

# ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ์—์„œ SSLv2, SSLv3 ์ œ์™ธ
SSLProtocol all -SSLv2 -SSLv3

# Cipher Suite ์„ค์ • (OpenSSL ๋ช…๋ช…๊ทœ์น™ ์‚ฌ์šฉ)
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

IHS (mod_ibm_ssl)

# ๊ฐœ๋ณ„์ ์œผ๋กœ ํ™œ์„ฑ/๋น„ํ™œ์„ฑ ์ง€์ •
SSLProtocolDisable SSLv2
SSLProtocolDisable SSLv3
SSLProtocolEnable TLSv12

# Cipher Spec ์„ค์ • (Long Name ์‚ฌ์šฉ, ์ดˆ๊ธฐํ™” ํ›„ ์ถ”๊ฐ€ ๋ฐฉ์‹ ๊ถŒ์žฅ)
SSLCipherSpec ALL NONE
SSLCipherSpec ALL +TLS_RSA_WITH_AES_128_CBC_SHA

2. IHS ๋ณด์•ˆ ์„ค์ • ๊ฐ€์ด๋“œ (Configuration)

IHS v8.5 ์ด์ƒ ํ™˜๊ฒฝ์—์„œ ์ทจ์•ฝํ•œ ํ”„๋กœํ† ์ฝœ์„ ์ฐจ๋‹จํ•˜๊ณ  ์•ˆ์ „ํ•œ Cipher๋งŒ ํ—ˆ์šฉํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
Listen 443

# IP ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ํ™œ์„ฑํ™” (IHS 8.5 ์ดํ•˜ ํ•„์ˆ˜)
NameVirtualHost *:443

<VirtualHost *:443>
    ServerName www.example.com
    DocumentRoot /app/EAR/SSL
    
    # SSL ์—”์ง„ ํ™œ์„ฑํ™”
    SSLEnable
    
    # 1. ์ทจ์•ฝ ํ”„๋กœํ† ์ฝœ ๋ช…์‹œ์  ๋น„ํ™œ์„ฑํ™”
    # (TLS 1.0, 1.1๋„ ๋ณด์•ˆ ์ •์ฑ…์— ๋”ฐ๋ผ ์ฐจ๋‹จ ๊ณ ๋ ค)
    SSLProtocolDisable SSLv2
    SSLProtocolDisable SSLv3
    SSLProtocolDisable TLSv10
    SSLProtocolDisable TLSv11
    
    # 2. ์•ˆ์ „ํ•œ ํ”„๋กœํ† ์ฝœ ํ™œ์„ฑํ™”
    SSLProtocolEnable TLSv12
    
    # 3. Cipher Suite ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์„ค์ •
    # ์ค‘์š”: 'ALL NONE'์œผ๋กœ ๊ธฐ์กด ์„ค์ • ์ดˆ๊ธฐํ™”
    SSLCipherSpec ALL NONE
    
    # Forward Secrecy(PFS)๋ฅผ ์ง€์›ํ•˜๋Š” ECDHE ๊ณ„์—ด ์šฐ์„  ๋ฐฐ์น˜
    SSLCipherSpec ALL +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 +TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    SSLCipherSpec ALL +TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 +TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    
    # ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ RSA/AES ๊ณ„์—ด ์ถ”๊ฐ€
    SSLCipherSpec ALL +TLS_RSA_WITH_AES_256_CBC_SHA +TLS_RSA_WITH_AES_128_CBC_SHA
</VirtualHost>

KeyFile /SW/web/HTTPServer/key/key.kdb
SSLDisable

3. ์„ค์ • ๊ฒ€์ฆ (Verification)

์„ค์ • ์ ์šฉ ํ›„ IHS๋ฅผ ์žฌ๊ธฐ๋™ํ•˜๊ธฐ ์ „, ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ ์šฉ๋œ Cipher ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ ์šฉ๋œ Cipher ํ™•์ธ

cd [IHS_HOME]/bin
./apachectl -t -D DUMP_SSL_CONFIG

์ ‘์† ํ…Œ์ŠคํŠธ (nmap)

์™ธ๋ถ€์—์„œ ์Šค์บ”ํ•˜์—ฌ ์ทจ์•ฝํ•œ ํ”„๋กœํ† ์ฝœ(SSLv3 ๋“ฑ)์ด ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”์ง€ ๊ต์ฐจ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

nmap --script ssl-enum-ciphers -p 443 [Target_IP]

Next Step:
IHS 9.0 (Apache 2.4 ๊ธฐ๋ฐ˜)์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ฒฝ์šฐ, SSLProtocol ์ง€์‹œ์–ด๋ฅผ Apache ์Šคํƒ€์ผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ง€๋งŒ, ๊ธฐ์กด IHS ์„ค์ •๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด IBM ๋ฌธ์„œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

[Apache/IHS] IP ์ ‘์† ๋ฐ ๋ฏธ๋“ฑ๋ก ๋„๋ฉ”์ธ ์š”์ฒญ ์ฐจ๋‹จ ์„ค์ • (Default VirtualHost)

Apache(IHS) ์›น ์„œ๋ฒ„์—์„œ ๋„๋ฉ”์ธ๋ช…์ด ์•„๋‹Œ IP ์ฃผ์†Œ๋กœ ์ ‘์†ํ•˜๊ฑฐ๋‚˜, ServerName์— ์ •์˜๋˜์ง€ ์•Š์€ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์ด๋ฅผ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋จผ์ € ๋กœ๋”ฉ๋˜๋Š” Dummy VirtualHost๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ์ง€์‹ (Context)

Apache๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์˜ Host ํ—ค๋”์™€ ์ผ์น˜ํ•˜๋Š” ServerName(๋˜๋Š” ServerAlias)์„ ์ฐพ์ง€ ๋ชปํ•  ๊ฒฝ์šฐ, ์„ค์ • ํŒŒ์ผ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์ •์˜๋œ VirtualHost๋ฅผ ๊ธฐ๋ณธ๊ฐ’(Default)์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด ์›๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ, ์ตœ์ƒ๋‹จ์— ์•„๋ฌด๋Ÿฐ ServerName์„ ๊ฐ–์ง€ ์•Š๋Š”(ํ˜น์€ ๋”๋ฏธ ๊ฐ’์„ ๊ฐ€์ง„) VirtualHost๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  403 Forbidden ๋“ฑ์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜๋ฉด, ์ง€์ •๋œ ๋„๋ฉ”์ธ ์™ธ์˜ ๋ชจ๋“  ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • Web Server: IBM HTTPServer v8.5 (Apache 2.2 Base)

1. httpd.conf ์„ค์ • (VirtualHost ๊ตฌ์„ฑ)

ํ•ต์‹ฌ์€ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. ์ฐจ๋‹จ์šฉ(Dummy) ์„ค์ •์„ ์ •์ƒ ์„œ๋น„์Šค ์„ค์ •๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ์œ„์ชฝ์— ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) ๊ธฐ๋ณธ ์„ค์ • ๋ฐ ํฌํŠธ ๋ฆฌ์Šจ

Listen 80
Listen 4958

# Apache 2.2 / IHS 8.5 ์ดํ•˜ ํ•„์ˆ˜ (IP ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ˜ธ์ŠคํŠธ ํ™œ์„ฑํ™”)
NameVirtualHost *:80
NameVirtualHost *:4958

2) ์ฐจ๋‹จ์šฉ Dummy VirtualHost (์ตœ์ƒ๋‹จ ๋ฐฐ์น˜)

์ด ๋ธ”๋ก์—๋Š” ServerName์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์˜๋ฏธ ์—†๋Š” ๊ฐ’์„ ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด๊ณณ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์€ ๋ชจ๋‘ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

# [80 ํฌํŠธ] ๋ฏธ๋“ฑ๋ก ๋„๋ฉ”์ธ/IP ์ ‘์† ์ฐจ๋‹จ
<VirtualHost *:80>
    DocumentRoot /app/was/htdocs
    
    # ์ ‘๊ทผ ๊ฑฐ๋ถ€ ๋ฉ”์‹œ์ง€ ์„ค์ • (๋ณด์•ˆ์ƒ ์ƒ์„ธ ์ •๋ณด ์ˆจ๊น€ ๊ถŒ์žฅ)
    ErrorDocument 403 "Forbidden: Access is denied."
    ErrorDocument 404 "Not Found."
    ErrorDocument 500 "Internal Server Error."
    
    # ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด 403 Forbidden ๊ฐ•์ œ ๋ฐ˜ํ™˜ (mod_rewrite ์‚ฌ์šฉ ์‹œ)
    # RewriteEngine On
    # RewriteRule .* - [R=403,L]
    
    # ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์ ‘๊ทผ ๊ถŒํ•œ ์ œ์–ด
    <Directory "/app/was/htdocs">
        Order allow,deny
        Deny from all
    </Directory>
</VirtualHost>

# [4958 ํฌํŠธ] ๋ฏธ๋“ฑ๋ก ๋„๋ฉ”์ธ/IP ์ ‘์† ์ฐจ๋‹จ
<VirtualHost *:4958>
    DocumentRoot /app/was/htdocs
    ErrorDocument 403 "Forbidden: Access is denied."
    # ... (์ƒ๋™)
</VirtualHost>

3) ์‹ค์ œ ์„œ๋น„์Šค VirtualHost

์ •์ƒ์ ์ธ ๋„๋ฉ”์ธ(ServerName)์„ ๊ฐ€์ง„ ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ธ”๋ก์ž…๋‹ˆ๋‹ค. Proxy ์„ค์ •์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

# Reverse Proxy ์‚ฌ์šฉ ์‹œ Open Relay ๋ฐฉ์ง€
ProxyRequests Off

# [80 ํฌํŠธ] ์ •์ƒ ์„œ๋น„์Šค
<VirtualHost *:80>
    ServerName test.apache.com
    
    # WAS ๋˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ํ”„๋ก์‹œ
    ProxyPass / http://172.31.98.155/ Keepalive=on
    ProxyPassReverse / http://172.31.98.155/
    
    # Host ํ—ค๋” ์œ ์ง€ (WAS๊ฐ€ ๋„๋ฉ”์ธ์„ ์ธ์‹ํ•˜๋„๋ก ํ•จ)
    ProxyPreserveHost On
    
    ErrorLog /app/was/HTTPServer/logs/test_proxy_error.log
    CustomLog /app/was/HTTPServer/logs/test_proxy_access.log combined
</VirtualHost>

# [4958 ํฌํŠธ] ์ •์ƒ ์„œ๋น„์Šค
<VirtualHost *:4958>
    ServerName test.httpserver.com
    
    ProxyPass / http://172.31.98.209/ Keepalive=on
    ProxyPassReverse / http://172.31.98.209/
    ProxyPreserveHost On
    
    ErrorLog /app/was/HTTPServer/logs/http_proxy_error.log
    CustomLog /app/was/HTTPServer/logs/http_proxy_access.log combined
</VirtualHost>
Tip: ProxyPreserveHost On ์˜ต์…˜์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋„๋ฉ”์ธ ์ •๋ณด(Host Header)๋ฅผ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„(WAS)๊นŒ์ง€ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. WAS์—์„œ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ํ•„์ˆ˜ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

2. ๊ฒ€์ฆ (Verification)

์„ค์ • ์ ์šฉ ํ›„ ์›น ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™ํ•˜๊ณ  curl์„ ์ด์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

1) ์ •์ƒ ๋„๋ฉ”์ธ ์ ‘์† ํ…Œ์ŠคํŠธ

# ์ •์ƒ ์‘๋‹ต(200 OK)์ด ์™€์•ผ ํ•จ
curl -v -H "Host: test.apache.com" http://localhost:80/

2) IP ์ ‘์† ๋ฐ ๋ฏธ๋“ฑ๋ก ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ

# 1. IP๋กœ ์ง์ ‘ ์š”์ฒญ -> 403 ๋˜๋Š” ์„ค์ •ํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•จ
curl -v http://localhost:80/

# 2. ์—‰๋šฑํ•œ ๋„๋ฉ”์ธ ์š”์ฒญ -> 403 ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•จ
curl -v -H "Host: unknown.com" http://localhost:80/

Next Step:
Apache 2.4 (IHS 9.0 ์ด์ƒ)๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, NameVirtualHost ์ง€์‹œ์–ด๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ญ์ œํ•˜๊ณ , ์ ‘๊ทผ ์ œ์–ด ๊ตฌ๋ฌธ์„ Require all denied ๋“ฑ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[Linux] CentOS 7 ํ˜ธ์ŠคํŠธ๋„ค์ž„(Hostname) ์˜๊ตฌ ๋ณ€๊ฒฝ ๋ฐ ํ•„์ˆ˜ ํ›„์† ์กฐ์น˜ (hostnamectl)

CentOS 7 ๋ฐ systemd ๊ธฐ๋ฐ˜ ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์—์„œ hostnamectl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŠธ๋„ค์ž„์„ ์˜๊ตฌ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ํ›„ ์‰˜ ํ”„๋กฌํ”„ํŠธ์— ์ฆ‰์‹œ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ /etc/hosts ํŒŒ์ผ ์ˆ˜์ •์˜ ์ค‘์š”์„ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ์ง€์‹ (Context)

ํ˜ธ์ŠคํŠธ๋„ค์ž„์€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋ฒ„๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” /etc/sysconfig/network ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์žฌ๋ถ€ํŒ…ํ•ด์•ผ ํ–ˆ์œผ๋‚˜, CentOS 7๋ถ€ํ„ฐ๋Š” hostnamectl ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์žฌ๋ถ€ํŒ… ์—†์ด ์ฆ‰์‹œ ์„ค์ •์„ ์˜๊ตฌ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • System: systemd based

1. ํ˜ธ์ŠคํŠธ๋„ค์ž„ ๋ณ€๊ฒฝ (hostnamectl)

hostnamectl ๋ช…๋ น์€ ์ปค๋„ ํ˜ธ์ŠคํŠธ๋„ค์ž„ ์„ค์ •๊ณผ /etc/hostname ํŒŒ์ผ ์ˆ˜์ •์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ ํ™•์ธ

hostnamectl status

๋ณ€๊ฒฝ ๋ช…๋ น์–ด

# ๊ตฌ๋ฌธ: hostnamectl set-hostname [์ƒˆ๋กœ์šด_์ด๋ฆ„]
hostnamectl set-hostname web-server-01

2. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ™•์ธ ๋ฐ ์ ์šฉ (Verification)

๋ช…๋ น์–ด ์‹คํ–‰ ์ฆ‰์‹œ ์‹œ์Šคํ…œ ์„ค์ •์€ ๋ณ€๊ฒฝ๋˜์ง€๋งŒ, ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ ํ„ฐ๋ฏธ๋„์˜ ํ”„๋กฌํ”„ํŠธ(Shell Prompt)์—๋Š” ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ํ™•์ธ

# 1. ์„ค์ •๊ฐ’ ํ™•์ธ
hostname

# 2. ์ƒ์„ธ ํ™•์ธ
hostnamectl status

ํ„ฐ๋ฏธ๋„ ํ”„๋กฌํ”„ํŠธ ๊ฐฑ์‹ 

๋กœ๊ทธ์•„์›ƒ ํ›„ ๋‹ค์‹œ ๋กœ๊ทธ์ธ(Reconnect)ํ•˜๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์žฌ์ ‘์† ์—†์ด ๋ฐ”๋กœ ํ™•์ธํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

# ํ˜„์žฌ ์‰˜ ์„ธ์…˜ ๊ฐฑ์‹ 
exec bash

๊ฒฐ๊ณผ: [root@old-name ~]# ์—์„œ [root@web-server-01 ~]# ๋กœ ๋ณ€๊ฒฝ๋จ.


3. ํ•„์ˆ˜ ํ›„์† ์กฐ์น˜: /etc/hosts ์ˆ˜์ •

ํ˜ธ์ŠคํŠธ๋„ค์ž„์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๋ฉด, ์„œ๋ฒ„ ์ž์‹ ์ด ์ž์‹ ์˜ ์ด๋ฆ„์„ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ปฌ DNS ์„ค์ • ํŒŒ์ผ์ธ /etc/hosts๋„ ๋ฐ˜๋“œ์‹œ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ˆ„๋ฝํ•˜๋ฉด sudo ๋ช…๋ น์–ด ์‹คํ–‰์ด ๋А๋ ค์ง€๊ฑฐ๋‚˜ ์ผ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋™ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ˆ˜์ •

vi /etc/hosts

์ˆ˜์ • ๋‚ด์šฉ

๊ธฐ์กด ํ˜ธ์ŠคํŠธ๋„ค์ž„์ด ์ ํžŒ ๋ถ€๋ถ„์„ ์ƒˆ๋กœ์šด ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# ๋ณ€๊ฒฝ๋œ ํ˜ธ์ŠคํŠธ๋„ค์ž„ ์ถ”๊ฐ€ (์ž์‹ ์˜ IP ๋˜๋Š” Loopback์— ๋งคํ•‘)
127.0.0.1   web-server-01
Tip: ํด๋Ÿฌ์Šคํ„ฐ๋ง(Cluster) ํ™˜๊ฒฝ์ด๋‚˜ WAS(WebSphere, JBoss) ํ™˜๊ฒฝ์—์„œ๋Š” 127.0.0.1 ๋Œ€์‹  ์‹ค์ œ ์„œ๋ฒ„์˜ ๊ณต์ธ IP(๋˜๋Š” ์‚ฌ์„ค IP)์— ํ˜ธ์ŠคํŠธ๋„ค์ž„์„ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

[IBM HTTPServer] SSL/TLS ์•”ํ˜ธํ™” ์ŠˆํŠธ(Cipher Suite) ํ™•์ธ ๋ฐ ์ ๊ฒ€ ๋ฐฉ๋ฒ• (DUMP_SSL_CIPHERS)

IBM HTTP Server(IHS)์—์„œ ํ˜„์žฌ ์ ์šฉ๋œ SSL/TLS ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „๊ณผ ์ง€์›ํ•˜๋Š” ์•”ํ˜ธํ™” ์ŠˆํŠธ(Cipher Suite) ๋ชฉ๋ก์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. apachectl์˜ ์ง„๋‹จ ์˜ต์…˜์„ ํ†ตํ•ด ์„œ๋ฒ„์— ์„ค์ •๋œ ๋ณด์•ˆ ์ˆ˜์ค€์„ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ์ง€์‹ (Context)

๋ณด์•ˆ ์ทจ์•ฝ์  ์ ๊ฒ€ ์‹œ "SSLv3๋‚˜ RC4 ๊ฐ™์€ ์•ฝํ•œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ผ"๋Š” ๊ถŒ๊ณ ๋ฅผ ์ž์ฃผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ธฐ ์ „์—, ํ˜„์žฌ ์›น ์„œ๋ฒ„๊ฐ€ ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ž…๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • Web Server: IBM HTTPServer v8.5.0.0

1. Cipher Suite ํ™•์ธ ๋ช…๋ น์–ด

IHS๋Š” apachectl ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ์— -t(๋ฌธ๋ฒ• ๊ฒ€์‚ฌ) ์˜ต์…˜๊ณผ ํ•จ๊ป˜ -D DUMP_SSL_CIPHERS ์ •์˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ํ˜„์žฌ ์„ค์ •๋œ SSL ๊ตฌ์„ฑ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด ์‹คํ–‰

cd [IHS_HOME]/bin

# SSL Cipher ์„ค์ • ๋คํ”„
./apachectl -t -D DUMP_SSL_CIPHERS

๊ฒฐ๊ณผ ์ถœ๋ ฅ ์˜ˆ์‹œ (Default ์ƒํƒœ)

๋ณ„๋„์˜ ๋ณด์•ˆ ์„ค์ •(Hardening)์ด ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด IHS ๋ฒ„์ „์˜ ๊ธฐ๋ณธ๊ฐ’(Default)๋“ค์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

SSL default cipher lists:
SSL protocol SSLV2, FIPS off, defaults = (None)
SSL protocol SSLV3, FIPS off, defaults = TLS_RSA_WITH_AES_128_CBC_SHA(2F), ...
SSL protocol TLSv10, FIPS off, defaults = TLS_RSA_WITH_AES_128_CBC_SHA(2F), ...
SSL protocol TLSv11, FIPS off, defaults = TLS_RSA_WITH_AES_128_CBC_SHA(2F), ...
SSL protocol TLSv12, FIPS off, defaults = TLS_RSA_WITH_AES_128_GCM_SHA256(9C), ...
Syntax OK
ํ•ด์„ ์ฃผ์˜ (Analysis):
์œ„ ์ถœ๋ ฅ ๊ฒฐ๊ณผ์— SSLV3 ํ•ญ๋ชฉ์ด ๋ณด์ธ๋‹ค๋ฉด, ํ˜„์žฌ ์„œ๋ฒ„๋Š” ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ SSLv3 ํ”„๋กœํ† ์ฝœ ํ†ต์‹ ์„ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๋น„ํ™œ์„ฑํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ์™ธ๋ถ€ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•œ ๊ต์ฐจ ๊ฒ€์ฆ (Verification)

์„œ๋ฒ„ ๋‚ด๋ถ€ ์„ค์ •๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์™ธ๋ถ€์—์„œ ์‹ค์ œ๋กœ ์ ‘์†์„ ์‹œ๋„ํ•˜์—ฌ ์–ด๋–ค Cipher๊ฐ€ ๋…ธ์ถœ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

1) nmap ์‚ฌ์šฉ (Linux)

nmap์˜ ์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์›ํ•˜๋Š” Cipher ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

nmap --script ssl-enum-ciphers -p 443 [์„œ๋ฒ„IP]

2) OpenSSL ์‚ฌ์šฉ

ํŠน์ • ํ”„๋กœํ† ์ฝœ๋กœ ์ ‘์†์ด ๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

# SSLv3 ์ ‘์† ์‹œ๋„ (์ ‘์† ์‹คํŒจํ•ด์•ผ ์•ˆ์ „ํ•จ)
openssl s_client -connect [์„œ๋ฒ„IP]:443 -ssl3

3. ๋ณด์•ˆ ์„ค์ • ๊ฐ•ํ™” (Next Step)

์ทจ์•ฝํ•œ ํ”„๋กœํ† ์ฝœ๊ณผ Cipher๋ฅผ ํ™•์ธํ–ˆ๋‹ค๋ฉด, httpd.conf ํŒŒ์ผ์—์„œ ์ด๋ฅผ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ์˜ˆ์‹œ (httpd.conf)

IHS์—์„œ๋Š” SSLCipherSpec ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • Cipher๋ฅผ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

<VirtualHost *:443>
    SSLEnable
    
    # 1. ์ทจ์•ฝํ•œ ํ”„๋กœํ† ์ฝœ ๋น„ํ™œ์„ฑํ™” (TLS 1.2๋งŒ ํ—ˆ์šฉ ๊ถŒ์žฅ)
    SSLProtocolDisable SSLv2 SSLv3 TLSv10 TLSv11
    SSLProtocolEnable TLSv12

    # 2. ๊ฐ•๋ ฅํ•œ Cipher Suite๋งŒ ํ—ˆ์šฉ (์˜ˆ์‹œ)
    # 128๋น„ํŠธ ๋ฏธ๋งŒ ์ฐจ๋‹จ, RC4/MD5 ์ฐจ๋‹จ
    SSLCipherSpec TLS_RSA_WITH_AES_128_CBC_SHA
    SSLCipherSpec TLS_RSA_WITH_AES_256_CBC_SHA
    # ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€...
</VirtualHost>

4. ์ฐธ๊ณ  ์ž๋ฃŒ (References)

[JBoss EAP 6] ์ปค์Šคํ…€ ๊ธฐ๋™/์ •์ง€ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ๊ฐ€์ด๋“œ (Config ๋ถ„๋ฆฌ ๋ฐ JVM ํŠœ๋‹)

JBoss EAP 6 Standalone ๋ชจ๋“œ์˜ ์šด์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด, JVM ์˜ต์…˜๊ณผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ณ„๋„์˜ ์„ค์ • ํŒŒ์ผ(Config Shell)๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์ด๋ฅผ ๋กœ๋“œํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์ œ์–ด(Start/Stop/Status)ํ•˜๋Š” ์ปค์Šคํ…€ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ๋ฒ•์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • Middleware: JBoss EAP 6.4

1. ์Šคํฌ๋ฆฝํŠธ ๊ตฌ์กฐ ๋ฐ ์ „๋žต

์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. Config Script (config1.sh): JVM ์˜ต์…˜, ๊ฒฝ๋กœ, IP, ํฌํŠธ ๋“ฑ ๋ณ€์ˆ˜ ์ •์˜.
  2. Control Script (jboss_ctl.sh): Config๋ฅผ ๋กœ๋“œํ•˜์—ฌ ์‹ค์ œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ๋กœ์ง.

2. ์„ค์ • ์Šคํฌ๋ฆฝํŠธ (config1.sh)

์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ณ„ ๊ณ ์œ ํ•œ ์„ค์ •์„ ์ด๊ณณ์— ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. JAVA_OPTS๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ฐ GC ๋กœ๊ทธ ์„ค์ •์„ ์ƒ์„ธํ•˜๊ฒŒ ํŠœ๋‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#!/bin/sh
DATE=`date +%Y%m%d%H%M%S`

##### 1. Basic Configuration #####
export JBOSS_HOME=/SW/was/JBoss
export SERVER_HOME=/SW/was/JBoss/TEST/TESTServer11
export LOG_PATH=/app/logs/was
export NODE_NAME=TESTServer11
export CONFIG_FILE=standalone-ha.xml

# Network & Port Offset
export SERVER_IP=10.252.16.25
export PORT_OFFSET=750
export MGMT_ADDR=$SERVER_IP

# Controller Port Calculation (Base 9999 + Offset)
let CONTROLLER_PORT=9999+$PORT_OFFSET
export CONTROLLER_PORT

# Admin User (Shutdown์šฉ)
export USER=admin

##### 2. JVM Options (Memory & GC) #####
# Heap Memory
export JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MaxPermSize=256m"

# GC Logging
export JAVA_OPTS=" $JAVA_OPTS -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails "
export JAVA_OPTS=" $JAVA_OPTS -Xloggc:$LOG_PATH/log/gclog/gc_$DATE.log "

# GC Algorithm (ParallelGC)
export JAVA_OPTS=" $JAVA_OPTS -XX:+UseParallelGC -XX:+ExplicitGCInvokesConcurrent"

# Heap Dump on OOM
export JAVA_OPTS=" $JAVA_OPTS -XX:-HeapDumpOnOutOfMemoryError "
export JAVA_OPTS=" $JAVA_OPTS -XX:HeapDumpPath=$LOG_PATH/heap/$NODE_NAME "

##### 3. System Properties (-D options) #####
export JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true"
export JAVA_OPTS=" $JAVA_OPTS -Dorg.jboss.resolver.warning=true"
export JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true"
export JAVA_OPTS=" $JAVA_OPTS -DjvmRoute=$NODE_NAME"

# JBoss Path & Binding
export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.base.dir=$SERVER_HOME"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.server.log.dir=$LOG_PATH/$NODE_NAME"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.socket.binding.port-offset=$PORT_OFFSET"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.node.name=$NODE_NAME"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address.management=$MGMT_ADDR"
export JAVA_OPTS=" $JAVA_OPTS -Djboss.bind.address=$SERVER_IP"

# Clustering (Multicast)
export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.jgroups.stack=tcp"
# export JAVA_OPTS=" $JAVA_OPTS -Djboss.default.multicast.address=230.1.0.1"

echo "Configuration Loaded: $NODE_NAME"

3. ์ œ์–ด ์Šคํฌ๋ฆฝํŠธ (jboss_ctl.sh)

์‹ค์ œ ๊ธฐ๋™ ๋ฐ ์ •์ง€๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ฉ”์ธ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ./config/config1.sh๋ฅผ ๋กœ๋“œํ•˜์—ฌ ๋ณ€์ˆ˜๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

#!/bin/sh

# Config ํŒŒ์ผ ๋กœ๋“œ (๊ฒฝ๋กœ ์ฃผ์˜)
. ./config/config1.sh

start(){
    # ํ”„๋กœ์„ธ์Šค ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€
    PID=`ps -ef | grep java | grep "jboss.node.name=$NODE_NAME " | awk '{print $2}'`
    
    if [ "x$PID" != "x" ]; then
        echo "###############################################"
        echo "ERROR: JBoss SERVER ($NODE_NAME) is already RUNNING (PID=$PID)"
        echo "###############################################"
        exit 1
    fi

    echo "#######################"
    echo "   Starting JBoss EAP  "
    echo "#######################"
    
    # nohup์œผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰, ๋กœ๊ทธ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
    nohup $JBOSS_HOME/bin/standalone.sh --server-config=$CONFIG_FILE >> $LOG_PATH/console.log 2>&1 &

    echo "Starting... Wait for checking status..."
    sleep 5
    status
}

stop(){
    echo "#######################"
    echo "    Stopping JBoss     "
    echo "#######################"
    
    # ๋ณด์•ˆ์„ ์œ„ํ•ด ํŒจ์Šค์›Œ๋“œ๋Š” ์ž…๋ ฅ๋ฐ›๋„๋ก ์ฒ˜๋ฆฌ (์ž๋™ํ™” ์‹œ ๋ณ€์ˆ˜๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ)
    echo -n "Enter Controller Password: "
    read -s PASSWORD
    echo ""

    # CLI๋ฅผ ์ด์šฉํ•œ ์•ˆ์ „ํ•œ ์ข…๋ฃŒ (Graceful Shutdown)
    $JBOSS_HOME/bin/jboss-cli.sh --connect --controller=$SERVER_IP:$CONTROLLER_PORT --command=:shutdown --user=$USER --password=$PASSWORD
}

status() {
    # ํฌํŠธ ๋ฆฌ์Šจ ์ƒํƒœ๋กœ ๊ตฌ๋™ ์—ฌ๋ถ€ ํ™•์ธ
    _up=`netstat -an | grep $CONTROLLER_PORT | grep LISTEN | wc -l`
    
    if [ "$_up" -ne 0 ]; then
        PID=`ps -ef | grep java | grep "jboss.node.name=$NODE_NAME " | awk '{print $2}'`
        echo "###############################################"
        echo " JBoss Server is RUNNING !! "
        echo " Node: $NODE_NAME (PID: $PID)"
        echo " Port: $CONTROLLER_PORT (Management)"
        echo "###############################################"
    else
        echo "##################################"
        echo " JBoss Server is STOPPED !! "
        echo " Node: $NODE_NAME "
        echo "##################################"
    fi
}

# ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  restart)
    stop
    sleep 5
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
esac
exit 0

4. ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

์‚ฌ์šฉ๋ฒ•

# ์‹คํ–‰ ๊ถŒํ•œ ๋ถ€์—ฌ
chmod +x jboss_ctl.sh

# ๊ธฐ๋™
./jboss_ctl.sh start

# ์ƒํƒœ ํ™•์ธ
./jboss_ctl.sh status

# ์ •์ง€ (ํŒจ์Šค์›Œ๋“œ ์ž…๋ ฅ ํ•„์š”)
./jboss_ctl.sh stop
Tip: config1.sh ํŒŒ์ผ ๋‚ด์˜ PORT_OFFSET ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ ์„œ๋ฒ„์—์„œ ํฌํŠธ ์ถฉ๋Œ ์—†์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: 0, 100, 200...)

[Linux/Java] High CPU ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: OS ์Šค๋ ˆ๋“œ์™€ Java ์Šค๋ ˆ๋“œ ๋งคํ•‘ ๋ถ„์„ ๊ฐ€์ด๋“œ

Java ํ”„๋กœ์„ธ์Šค(JVM)๊ฐ€ ๊ณ ๋ถ€ํ•˜ ์ƒํƒœ์ผ ๋•Œ, CPU๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ๋ฒ”์ธ(ํŠน์ • ์Šค๋ ˆ๋“œ)์„ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. OS ๋ช…๋ น์–ด(ps, top)๋กœ ๋ฌธ์ œ์˜ ์Šค๋ ˆ๋“œ ID(TID)๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์ด๋ฅผ 16์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Java Thread Dump์™€ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Test Environment

  • OS: RedHat Linux (CentOS ํ˜ธํ™˜)
  • Target: Java Process (WebSphere/Tomcat ๋“ฑ)

1. ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ ์‹๋ณ„ (Identify Usage)

๋จผ์ € CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Java ํ”„๋กœ์„ธ์Šค์˜ PID(Process ID)๋ฅผ ์ฐพ๊ณ , ๊ทธ ๋‚ด๋ถ€์—์„œ ์‹ค์ œ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•˜๋Š” ์Šค๋ ˆ๋“œ(LWP, Light Weight Process)๋ฅผ ์‹๋ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด ํ”„๋กœ์„ธ์Šค ํ™•์ธ

# Java ํ”„๋กœ์„ธ์Šค PID ํ™•์ธ
ps -ef | grep java

์Šค๋ ˆ๋“œ๋ณ„ CPU ์ ์œ ์œจ ํ™•์ธ (top)

-H ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์˜ ์Šค๋ ˆ๋“œ ๋‹จ์œ„๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

# PID๊ฐ€ 12345์ธ ๊ฒฝ์šฐ
top -H -p 12345

์ถœ๋ ฅ ํ™”๋ฉด์—์„œ PID(์‹ค์ œ๋กœ๋Š” TID/LWP) ์ปฌ๋Ÿผ๊ณผ %CPU ์ปฌ๋Ÿผ์„ ํ™•์ธํ•˜์—ฌ ๊ฐ€์žฅ ์ƒ๋‹จ์— ์žˆ๋Š” ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ๋ณ„ CPU ์ ์œ ์œจ ํ™•์ธ (ps)

ps ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ๋„ ์Šค๋ ˆ๋“œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -lmT ์˜ต์…˜์ด๋‚˜ -L ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# LWP(Light Weight Process) ํ™•์ธ
ps -lmT [PID]

# ๋˜๋Š” ์ปค์Šคํ…€ ํฌ๋งท ์‚ฌ์šฉ
ps -eLo pid,lwp,pcpu,comm | grep [PID]

2. ์Šค๋ ˆ๋“œ ID ๋ณ€ํ™˜ (Decimal to Hex)

OS์—์„œ ํ™•์ธํ•œ ์Šค๋ ˆ๋“œ ID๋Š” 10์ง„์ˆ˜(Decimal)์ด์ง€๋งŒ, Java Thread Dump ํŒŒ์ผ(Javacore ๋“ฑ)์—์„œ๋Š” ์Šค๋ ˆ๋“œ ID๊ฐ€ 16์ง„์ˆ˜(Hexadecimal)๋กœ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งคํ•‘์„ ์œ„ํ•ด ๋ณ€ํ™˜ ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€ํ™˜ ์˜ˆ์‹œ

  • OS TID: 9091 (10์ง„์ˆ˜)
  • Hex TID: 0x2383 (16์ง„์ˆ˜)

๋ณ€ํ™˜ ๋ช…๋ น์–ด

# ์‰˜์—์„œ ๋ฐ”๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ (์˜ˆ: 9091 -> 2383)
printf '%x\n' 9091

3. ์Šค๋ ˆ๋“œ ๋คํ”„ ์ƒ์„ฑ ๋ฐ ๋ถ„์„ (Thread Dump)

ํ˜„์žฌ JVM์˜ ์ƒํƒœ๋ฅผ ์Šค๋ƒ…์ƒท์œผ๋กœ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•ด ์Šค๋ ˆ๋“œ ๋คํ”„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋คํ”„ ์ƒ์„ฑ (Kill -3)

kill -3 ์‹œ๊ทธ๋„์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ํ‘œ์ค€ ์ถœ๋ ฅ(stdout)์ด๋‚˜ ๋กœ๊ทธ ํŒŒ์ผ๋กœ ์Šค๋ ˆ๋“œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

kill -3 [PID]
  • IBM JDK (WebSphere): javacore.YYYYMMDD.HHMMSS.pid.txt ํŒŒ์ผ ์ƒ์„ฑ
  • Oracle/Open JDK: catalina.out ๋˜๋Š” ์ง€์ •๋œ ๋กœ๊ทธ ํŒŒ์ผ์— ์ถœ๋ ฅ

๋กœ๊ทธ ๋งคํ•‘ ๋ถ„์„

์ƒ์„ฑ๋œ ๋คํ”„ ํŒŒ์ผ์—์„œ ์•ž์„œ ๋ณ€ํ™˜ํ•œ 16์ง„์ˆ˜ ๊ฐ’(์˜ˆ: 0x2383)์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. IBM JDK์˜ ๊ฒฝ์šฐ nid(Native ID) ๋˜๋Š” native_thread_id ํ•ญ๋ชฉ๊ณผ ๋งค์นญ๋ฉ๋‹ˆ๋‹ค.

/* Javacore ์˜ˆ์‹œ */
"WebContainer : 5" (TID:0x12345600, sys_thread_t:0x789abc00, state:R, native ID:0x2383) prio=5
    at com.example.MyClass.infiniteLoop(MyClass.java:45)
    at ...

๋ถ„์„ ํฌ์ธํŠธ:

  1. 16์ง„์ˆ˜ ID๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  2. ํ•ด๋‹น ์Šค๋ ˆ๋“œ์˜ ์ƒํƒœ(Runnable, Waiting ๋“ฑ)๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. Stack Trace๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์–ด๋–ค ์ฝ”๋“œ(๋ฉ”์†Œ๋“œ)๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํŒŒ์•…ํ•˜์—ฌ ๋ณ‘๋ชฉ ์ง€์ ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

Next Step:
์ฃผ๊ธฐ์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ํ•„์š”ํ•˜๋‹ค๋ฉด top -H์™€ jstack์„ ๊ฒฐํ•ฉํ•œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ, CPU ์ž„๊ณ„์น˜ ์ดˆ๊ณผ ์‹œ ์ž๋™์œผ๋กœ ๋คํ”„๋ฅผ ๋‚จ๊ธฐ๋„๋ก ์ž๋™ํ™”ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

[JBoss EAP 6] CLI ๊ธฐ๋ฐ˜ ํŒจ์น˜ ์ ์šฉ(Apply) ๋ฐ ๋กค๋ฐฑ(Rollback) ์™„๋ฒฝ ๊ฐ€์ด๋“œ

JBoss EAP 6 ํ™˜๊ฒฝ์—์„œ Management CLI(jboss-cli)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ ํŒจ์น˜๋‚˜ ๋ฒ„๊ทธ ํ”ฝ์Šค๋ฅผ ์ ์šฉ(Apply)ํ•˜๊ณ , ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๋กค๋ฐฑ(Rollback) ์ ˆ์ฐจ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŒจ์น˜ ์ด๋ ฅ ๊ด€๋ฆฌ์™€ ์„ค์ • ์ดˆ๊ธฐํ™” ์˜ต์…˜์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ์ง€์‹ (Context)

JBoss EAP 6์˜ ํŒจ์น˜ ์‹œ์Šคํ…œ์€ ๋ˆ„์ (Cumulative) ๋ฐฉ์‹๊ณผ ๋‹จ์ผ(One-off) ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ํŒจ์น˜๋ฅผ ์ ์šฉํ•˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ .installation ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณ€๊ฒฝ ๋‚ด์—ญ์ด ์ €์žฅ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์–ธ์ œ๋“  ์ด์ „ ์‹œ์ ์œผ๋กœ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Test Environment

  • OS: Windows 10 (Linux ๋ช…๋ น์–ด ํฌํ•จ)
  • Middleware: JBoss EAP 6.4
  • Patch File: jboss-eap-6.4.19-patch.zip

1. ํŒจ์น˜ ์ ์šฉ (Patch Apply)

ํŒจ์น˜ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„, JBoss๊ฐ€ ๊ฐ€๋™๋œ ์ƒํƒœ(๋˜๋Š” Embed ๋ชจ๋“œ)์—์„œ CLI๋ฅผ ํ†ตํ•ด ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด ๊ตฌ๋ฌธ

# ๊ธฐ๋ณธ ๊ตฌ๋ฌธ
patch apply [ํŒจ์น˜ํŒŒ์ผ_๊ฒฝ๋กœ]

OS๋ณ„ ์‹คํ–‰ ์˜ˆ์‹œ

Linux

$JBOSS_HOME/bin/jboss-cli.sh --connect
[standalone@localhost:9999 /] patch apply /was/img/fix/jboss-eap-6.4.19-patch.zip

Windows

%JBOSS_HOME%\bin\jboss-cli.bat --connect
[standalone@localhost:9999 /] patch apply F:\app\was\jboss-eap-6.4.19-patch.zip
Note: ํŒจ์น˜ ์ ์šฉ ํ›„์—๋Š” ๋ณ€๊ฒฝ๋œ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™(Restart)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ํŒจ์น˜ ์ด๋ ฅ ํ™•์ธ (Verification)

ํŒจ์น˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ ์šฉ๋˜์—ˆ๋Š”์ง€, ํ˜น์€ ๋กค๋ฐฑ์„ ์œ„ํ•ด ๋Œ์•„๊ฐˆ ์‹œ์ (ID)์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CLI์—์„œ ํ™•์ธ

# ํŒจ์น˜ ์ •๋ณด ์กฐํšŒ
[standalone@localhost:9999 /] patch history

# ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ
[standalone@localhost:9999 /] patch info

ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํ™•์ธ

JBoss ์„ค์น˜ ๊ฒฝ๋กœ ๋‚ด์˜ ์ˆจ๊น€ ํด๋”๋ฅผ ํ†ตํ•ด์„œ๋„ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฝ๋กœ: {JBoss_HOME}/.installation/patches

3. ํŒจ์น˜ ๋กค๋ฐฑ (Patch Rollback)

ํŒจ์น˜ ์ ์šฉ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค๋ฉด ์ฆ‰์‹œ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ค€๋น„: Patch ID ํ™•์ธ

๋กค๋ฐฑํ•  ๋Œ€์ƒ ID๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. patch history ๋ช…๋ น์–ด๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ ์šฉ๋œ ํŒจ์น˜ ID๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋กค๋ฐฑ ๋ช…๋ น์–ด

# ๊ตฌ๋ฌธ
patch rollback --patch-id=[PATCH_ID] --reset-configuration=[TRUE|FALSE]

ํ•ต์‹ฌ ์˜ต์…˜ ์„ค๋ช… (--reset-configuration)

  • TRUE (๊ถŒ์žฅ): ํŒจ์น˜ ์ ์šฉ ์‹œ ๋ณ€๊ฒฝ๋˜์—ˆ๋˜ ์„ค์ • ํŒŒ์ผ(standalone.xml ๋“ฑ)๋„ ํŒจ์น˜ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.
  • FALSE: ์„ค์ • ํŒŒ์ผ์€ ํ˜„ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ชจ๋“ˆ(Jar)๋งŒ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ์ถฉ๋Œ๋กœ ์ธํ•ด ์„œ๋ฒ„ ๊ธฐ๋™์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ์˜ˆ์‹œ

# ์„ค์ •๊นŒ์ง€ ์™„๋ฒฝํ•˜๊ฒŒ ์ด์ „์œผ๋กœ ๋ณต๊ตฌ
[standalone@localhost:9999 /] patch rollback --patch-id=CP19 --reset-configuration=true

4. ๊ด€๋ฆฌ ์ฝ˜์†”(GUI)์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•

CLI ์‚ฌ์šฉ์ด ์–ด๋ ต๋‹ค๋ฉด ์›น ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ ‘์†: http://localhost:9990/console
  2. ๋ฉ”๋‰ด: ์ƒ๋‹จ Patching ํƒญ ์„ ํƒ
  3. ์ž‘์—…: ํŒจ์น˜ ๋งˆ๋ฒ•์‚ฌ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ ์šฉ (๋กค๋ฐฑ ๊ธฐ๋Šฅ ํฌํ•จ)
JBoss Management Console Patching Screen

[๊ทธ๋ฆผ] JBoss ๊ด€๋ฆฌ ์ฝ˜์†”์˜ ํŒจ์น˜ ๊ด€๋ฆฌ ํ™”๋ฉด


Next Step:
ํŒจ์น˜ ์ž‘์—… ์ „์—๋Š” ๋งŒ์•ฝ์„ ๋Œ€๋น„ํ•ด standalone ๋˜๋Š” domain ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ์••์ถ•ํ•˜์—ฌ ๋ณ„๋„๋กœ ๋ฐฑ์—…ํ•ด๋‘๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.