[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 ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ์••์ถ•ํ•˜์—ฌ ๋ณ„๋„๋กœ ๋ฐฑ์—…ํ•ด๋‘๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

[WebSphere] ๋””๋ ‰ํ† ๋ฆฌ ๋ฆฌ์ŠคํŒ…(Directory Listing) ์ œ๊ฑฐ ๋ฐ ๋ณด์•ˆ ์„ค์ • (directoryBrowsingEnabled)

์›น ์„œ๋ฒ„๊ฐ€ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ธŒ๋ผ์šฐ์ €์— ๋…ธ์ถœํ•˜๋Š” '๋””๋ ‰ํ† ๋ฆฌ ๋ฆฌ์ŠคํŒ…' ์ทจ์•ฝ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ WebSphere ์„ค์ • ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ(xml) ์ˆ˜์ • ๋ฐฉ์‹๊ณผ ๊ด€๋ฆฌ ์ฝ˜์†”(Admin Console)์„ ํ†ตํ•œ ์ „์—ญ ์„ค์ • ๋ฐฉ์‹์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ๋ฐ ์›์ธ (Context)

๋””๋ ‰ํ† ๋ฆฌ ๋ฆฌ์ŠคํŒ…์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ํŒŒ์ผ ๋ชฉ๋ก(๋ฐฑ์—… ํŒŒ์ผ, ์†Œ์Šค ์ฝ”๋“œ ๋“ฑ)์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด 2์ฐจ ๊ณต๊ฒฉ์˜ ๋นŒ๋ฏธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

WebSphere๋Š” ์ •์  ํŒŒ์ผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ fileServingEnabled ์†์„ฑ๊ณผ ๋ชฉ๋ก ๋…ธ์ถœ์„ ์œ„ํ•œ directoryBrowsingEnabled ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ ์ ˆํžˆ ์ œ์–ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • Web Server: IBM HTTPServer v8.5.0.0
  • WAS: WebSphere Application Server v8.5

1. Method A: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •

๊ฐœ๋ณ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„๋กœ ์„ค์ •์„ ์ ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. WAR/EAR ํŒŒ์ผ ๋‚ด๋ถ€์˜ IBM ํ™•์žฅ ์„ค์ • ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ๋Œ€์ƒ

  • WAS v7.0 ์ด์ƒ: ibm-web-ext.xml
  • WAS v6.1 ์ดํ•˜: ibm-web-ext.xmi (Legacy)

์„ค์ • ๋‚ด์šฉ (ibm-web-ext.xml)

enable-directory-browsing ์†์„ฑ์„ false๋กœ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

<?xml version="1.0" encoding="UTF-8"?>
<web-ext
    xmlns="http://websphere.ibm.com/xml/ns/javaee/web-ext/1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee/web-ext/1.0 http://websphere.ibm.com/xml/ns/javaee/web-ext/1.0/web-ext.xsd">

    <!-- ์ •์  ํŒŒ์ผ ์„œ๋น™ ํ™œ์„ฑํ™” (์ด๋ฏธ์ง€, HTML ๋“ฑ) -->
    <enable-file-serving value="true"/>
    
    <!-- ํ•ต์‹ฌ: ๋””๋ ‰ํ† ๋ฆฌ ๋ฆฌ์ŠคํŒ… ๋น„ํ™œ์„ฑํ™” -->
    <enable-directory-browsing value="false"/>

</web-ext>

2. Method B: ์›น ์ปจํ…Œ์ด๋„ˆ(Web Container) ์ „์—ญ ์„ค์ •

WAS ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ ์„œ๋ฒ„ ๋‹จ์œ„๋กœ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ๋ฐฐํฌํ•˜์ง€ ์•Š๊ณ  ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.

์„ค์ • ๊ฒฝ๋กœ

์„œ๋ฒ„(Servers) > ์„œ๋ฒ„ ์œ ํ˜•(Server Types) > WebSphere application servers > [์„œ๋ฒ„๋ช…] > ์›น ์ปจํ…Œ์ด๋„ˆ ์„ค์ •(Web Container Settings) > ์›น ์ปจํ…Œ์ด๋„ˆ(Web container) > ์‚ฌ์šฉ์ž ์ •์˜ ํŠน์„ฑ(Custom properties)

์ฃผ์š” ์†์„ฑ ๊ฐ’

์•„๋ž˜ ์†์„ฑ์„ ์ƒˆ๋กœ ์ž‘์„ฑ(New)ํ•˜์—ฌ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„ (Name) ๊ฐ’ (Value) ์„ค๋ช…
directoryBrowsingEnabled false ๋””๋ ‰ํ† ๋ฆฌ ๋ชฉ๋ก ์กฐํšŒ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. (๋ณด์•ˆ ํ•„์ˆ˜)
fileServingEnabled true WAS๊ฐ€ ์ •์  ํŒŒ์ผ(html, img ๋“ฑ)์„ ์ฒ˜๋ฆฌํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. (false ์„ค์ • ์‹œ ์ •์  ํŒŒ์ผ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ)
์ฐธ๊ณ : fileServingEnabled๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด ๋””๋ ‰ํ† ๋ฆฌ ๋ฆฌ์ŠคํŒ…๋„ ์ฐจ๋‹จ๋˜์ง€๋งŒ, WAS๊ฐ€ ์ด๋ฏธ์ง€๋‚˜ CSS ๊ฐ™์€ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ „ํ˜€ ์ œ๊ณตํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” directoryBrowsingEnabled๋งŒ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

3. ๊ฒ€์ฆ (Verification)

  1. ์„ค์ • ์ ์šฉ ํ›„ WAS ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ๊ธฐ๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €์—์„œ index.html์ด ์—†๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ(์˜ˆ: http://domain/images/)๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  3. 403 Forbidden ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ณด์•ˆ ์„ค์ •์ด ์ •์ƒ์ ์œผ๋กœ ์ ์šฉ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[OpenSSL/Apache] ์‚ฌ์„ค ์ธ์ฆ์„œ(Self-Signed Certificate) ์ƒ์„ฑ ๋ฐ ์ ์šฉ ์™„๋ฒฝ ๊ฐ€์ด๋“œ

๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์˜ HTTPS ๊ตฌํ˜„์„ ์œ„ํ•ด OpenSSL๋กœ ์‚ฌ์„ค ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค๋ฌด์—์„œ ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฌ์šด Key, CSR, CRT ํŒŒ์ผ์˜ ์ •ํ™•ํ•œ ์—ญํ•  ์ •์˜๋ถ€ํ„ฐ, ๊ฐœ์ธํ‚ค ํŒจ์Šค์›Œ๋“œ ์ œ๊ฑฐ ๋ฐ Apache ์ ์šฉ๊นŒ์ง€์˜ ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ์ง€์‹: ์ธ์ฆ์„œ ํŒŒ์ผ์˜ ์ข…๋ฅ˜์™€ ์—ญํ• 

SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๊ณผ์ •์€ ๊ฐœ์ธํ‚ค ์ƒ์„ฑ → ์ธ์ฆ ์š”์ฒญ(CSR) → ์ธ์ฆ์„œ ๋ฐœ๊ธ‰(CRT)์˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • 1. Private Key (.key):
    • ์„œ๋ฒ„๊ฐ€ ๊ฐ–๋Š” ๋น„๋ฐ€ ์—ด์‡ ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”ํ•˜๋Š” ํ•ต์‹ฌ ํŒŒ์ผ๋กœ, ์ ˆ๋Œ€ ์™ธ๋ถ€๋กœ ์œ ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
    • ์ด ํ‚ค๋ฅผ ๋ถ„์‹คํ•˜๋ฉด ์ธ์ฆ์„œ๋ฅผ ์žฌ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • 2. CSR (.csr - Certificate Signing Request):
    • ์ธ์ฆ ๊ธฐ๊ด€(CA)์— "๋‚ด ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ฌ๋ผ"๊ณ  ๋ณด๋‚ด๋Š” ์‹ ์ฒญ์„œ์ž…๋‹ˆ๋‹ค.
    • ๊ณต๊ฐœํ‚ค(Public Key) ์ •๋ณด์™€ ๋„๋ฉ”์ธ, ํšŒ์‚ฌ ์ •๋ณด(DN)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • 3. Certificate (.crt):
    • ์ตœ์ข…์ ์œผ๋กœ ๋ฐœ๊ธ‰๋œ ์ธ์ฆ์„œ(์‹ ๋ถ„์ฆ)์ž…๋‹ˆ๋‹ค.
    • CSR ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ CA(ํ˜น์€ ๋ณธ์ธ)๊ฐ€ ์ „์ž ์„œ๋ช…์„ ํ•œ ํŒŒ์ผ์ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—๊ฒŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • Web Server: Apache HTTP Server
  • Tool: OpenSSL

1. ๊ฐœ์ธํ‚ค(Private Key) ์ƒ์„ฑ

๊ฐ€์žฅ ๋จผ์ € ๋ชจ๋“  ์•”ํ˜ธํ™” ํ†ต์‹ ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๊ฐœ์ธํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

1) ์•”ํ˜ธํ™”๋œ ๊ฐœ์ธํ‚ค ์ƒ์„ฑ

des3 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ 2048๋น„ํŠธ ๊ธธ์ด์˜ RSA ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์„ค์ •ํ•˜๋Š” ํŒจ์Šค์›Œ๋“œ(Pass Phrase)๋Š” ํ‚ค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

[root@web01 test]# openssl genrsa -des3 -out test.vn.key 2048

Generating RSA private key, 2048 bit long modulus
..........................+++
e is 65537 (0x10001)
Enter pass phrase for test.vn.key: [ํŒจ์Šค์›Œ๋“œ ์ž…๋ ฅ]
Verifying - Enter pass phrase for test.vn.key: [ํŒจ์Šค์›Œ๋“œ ํ™•์ธ]

2) ๊ฐœ์ธํ‚ค ํŒจ์Šค์›Œ๋“œ ์ œ๊ฑฐ (ํ•„์ˆ˜ ๊ถŒ์žฅ)

ํŒจ์Šค์›Œ๋“œ๊ฐ€ ๊ฑธ๋ฆฐ ํ‚ค๋ฅผ ์›น ์„œ๋ฒ„์— ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜๋ฉด, ์„œ๋ฒ„๊ฐ€ ์žฌ๊ธฐ๋™๋  ๋•Œ๋งˆ๋‹ค ๊ด€๋ฆฌ์ž๊ฐ€ ๋งค๋ฒˆ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์šด์˜์„ ์œ„ํ•ด ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ํ‚ค๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# 1. ์›๋ณธ ํ‚ค ๋ฐฑ์—…
cp test.vn.key test.vn.key.orig

# 2. ํŒจ์Šค์›Œ๋“œ๊ฐ€ ์ œ๊ฑฐ๋œ ํ‚ค ์ƒ์„ฑ (๋ฎ์–ด์“ฐ๊ธฐ)
openssl rsa -in test.vn.key.orig -out test.vn.key

# ๊ฒฐ๊ณผ ๋ฉ”์‹œ์ง€
Enter pass phrase for test.vn.key.orig: [๊ธฐ์กด ํŒจ์Šค์›Œ๋“œ ์ž…๋ ฅ]
writing RSA key

2. ์ธ์ฆ ์š”์ฒญ์„œ(CSR) ์ƒ์„ฑ

์ƒ์„ฑ๋œ ๊ฐœ์ธํ‚ค(.key)๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์‹ ์ฒญ์„œ(.csr)๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

CSR ์ƒ์„ฑ ๋ช…๋ น์–ด

openssl req -new -key test.vn.key -out test.vn.csr

์ฃผ์š” ์ž…๋ ฅ ์ •๋ณด (DN: Distinguished Name)

๋ช…๋ น ์‹คํ–‰ ํ›„ ์ž…๋ ฅํ•ด์•ผ ํ•  ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ •๋ณด๋Š” ์ž„์˜๋กœ ์ž…๋ ฅํ•ด๋„ ๋˜์ง€๋งŒ, Common Name์€ ๋ฐ˜๋“œ์‹œ ์ •ํ™•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Country Name: ๊ตญ๊ฐ€ ์ฝ”๋“œ (์˜ˆ: KR, VN)
  • State / Locality: ์ง€์—ญ ์ •๋ณด (์˜ˆ: Seoul)
  • Organization: ํšŒ์‚ฌ๋ช…/๋ถ€์„œ๋ช… (์˜ˆ: IT Team)
  • Common Name (CN): ์„œ๋น„์Šค ๋„๋ฉ”์ธ ์ฃผ์†Œ (๊ฐ€์žฅ ์ค‘์š”! ์˜ˆ: *.test.vn)
Note: ์ถ”๊ฐ€ ์ •๋ณด์ธ 'Challenge password' ๋“ฑ์€ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  Enter๋ฅผ ๋ˆŒ๋Ÿฌ ๋„˜์–ด๊ฐ€๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.

3. ์‚ฌ์„ค ์ธ์ฆ์„œ(CRT) ์ƒ์„ฑ (Self-Signing)

์šฐ๋ฆฌ๋Š” ๊ณต์ธ ์ธ์ฆ ๊ธฐ๊ด€(VeriSign ๋“ฑ)์ด ์—†์œผ๋ฏ€๋กœ, ์ƒ์„ฑํ•œ CSR์— ๋‚ด ๊ฐœ์ธํ‚ค๋กœ ์ง์ ‘ ์„œ๋ช…(Self-Sign)ํ•˜์—ฌ ์ธ์ฆ์„œ(CRT)๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ธ์ฆ์„œ ์ƒ์„ฑ

์œ ํšจ๊ธฐ๊ฐ„์„ 365์ผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ตœ์ข… ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# -req : CSR์„ ์ž…๋ ฅ๋ฐ›์Œ
# -signkey : ์Šค์Šค๋กœ ์„œ๋ช…ํ•  ํ‚ค ์ง€์ •
openssl x509 -req -days 365 -in test.vn.csr -signkey test.vn.key -out test.vn.crt

# ์„ฑ๊ณต ์‹œ ์ถœ๋ ฅ ๋ฉ”์‹œ์ง€
Signature ok
subject=/C=VN/ST=Hanoi/L=lotte/O=admin/OU=admin/CN=*.test.vn
Getting Private key

์ตœ์ข… ํŒŒ์ผ ํ™•์ธ

์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ 3๊ฐœ์˜ ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • test.vn.key: ๊ฐœ์ธํ‚ค (ํŒจ์Šค์›Œ๋“œ ์ œ๊ฑฐ๋จ, ์„œ๋ฒ„ ์„ค์ •์— ์‚ฌ์šฉ)
  • test.vn.crt: ์ธ์ฆ์„œ (์„œ๋ฒ„ ์„ค์ •์— ์‚ฌ์šฉ)
  • test.vn.csr: ์‹ ์ฒญ์„œ (๋ฐœ๊ธ‰ ์™„๋ฃŒ ํ›„์—๋Š” ๋ถˆํ•„์š”)

4. Apache ์„ค์ • ๋ฐ ๊ฒ€์ฆ

์ƒ์„ฑ๋œ ํ‚ค์™€ ์ธ์ฆ์„œ๋ฅผ Apache ์„ค์ • ํŒŒ์ผ(httpd.conf ๋˜๋Š” ssl.conf)์— ๋“ฑ๋กํ•˜์—ฌ HTTPS๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ์ ์šฉ

# SSL ์—”์ง„ ํ™œ์„ฑํ™”
SSLEngine on

# 1. ์ธ์ฆ์„œ ํŒŒ์ผ ๊ฒฝ๋กœ ์ง€์ • (.crt)
SSLCertificateFile /etc/httpd/conf/ssl/test.vn.crt

# 2. ๊ฐœ์ธํ‚ค ํŒŒ์ผ ๊ฒฝ๋กœ ์ง€์ • (.key)
SSLCertificateKeyFile /etc/httpd/conf/ssl/test.vn.key

๊ฒ€์ฆ (Verification)

Apache๋ฅผ ์žฌ๊ธฐ๋™ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘์†ํ•ด ๋ด…๋‹ˆ๋‹ค. ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋ฌป์ง€ ์•Š๊ณ  ๊ธฐ๋™๋˜์–ด์•ผ ์ •์ƒ์ž…๋‹ˆ๋‹ค.

  1. ์žฌ๊ธฐ๋™: systemctl restart httpd
  2. ๋ธŒ๋ผ์šฐ์ € ์ ‘์†: https://test.vn
์ฃผ์˜ (Warning):
์‚ฌ์„ค ์ธ์ฆ์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ ๋ขฐํ•˜๋Š” ๊ธฐ๊ด€(CA) ๋ชฉ๋ก์— ์—†์œผ๋ฏ€๋กœ, ์ ‘์† ์‹œ "์ฃผ์˜ ์š”ํ•จ" ๋˜๋Š” "์•ˆ์ „ํ•˜์ง€ ์•Š์Œ" ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

[JBoss/Apache] mod_cluster ์—ฐ๋™ ์™„๋ฒฝ ๊ฐ€์ด๋“œ: ๋™์  ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฐ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์„ค์ •

JBoss EAP 6์™€ Apache HTTP Server๋ฅผ mod_cluster ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ •์ ์ธ ์„ค์ • ์—†์ด๋„ WAS์˜ ์ถ”๊ฐ€/์‚ญ์ œ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๋Š” ๋™์  ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ(Advertise) ์„ค์ •์„ ์ค‘์‹ฌ์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

  • OS: Windows 10 (ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ)
  • Web Server: Apache 2.2.x (JBoss EWS ํฌํ•จ ๋ฒ„์ „ ๊ถŒ์žฅ)
  • Middleware: JBoss EAP 6.4.x
๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ์ฃผ์˜: Apache ๋ฒ„์ „์— ๋งž๋Š” mod_cluster ๋ชจ๋“ˆ(.so)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JBoss EWS(Enterprise Web Server) ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ ์ตœ์ ํ™”๋œ ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. Apache ์„ค์ • (Web Server)

Apache์— mod_cluster ๊ด€๋ จ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•˜๊ณ , JBoss๊ฐ€ ๋ณด๋‚ธ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

1) ํ•„์ˆ˜ ๋ชจ๋“ˆ ๋ณต์‚ฌ

JBoss EAP ์„ค์น˜ ๊ฒฝ๋กœ์— ํฌํ•จ๋œ mod_cluster ๊ด€๋ จ ๋ชจ๋“ˆ(.so)์„ Apache์˜ modules ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • ์›๋ณธ ์œ„์น˜: [EAP_HOME]/modules/system/layers/base/native/lib64/httpd/modules
  • ๋ณต์‚ฌํ•  ํŒŒ์ผ:
    • mod_advertise.so
    • mod_manager.so
    • mod_proxy_cluster.so
    • mod_slotmem.so

2) mod_cluster.conf ์ž‘์„ฑ

httpd.conf์—์„œ include ํ•  ์„ค์ • ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ VirtualHost ๋‚ด์˜ ServerAdvertise On ์„ค์ •์ž…๋‹ˆ๋‹ค.

# ํ•„์ˆ˜ ๋ชจ๋“ˆ ๋กœ๋“œ (์ˆœ์„œ ์ค‘์š”)
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

# ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ ์œ„์น˜ ์ง€์ •
MemManagerFile "C:/Apache/logs/mod_cluster"


  # JBoss ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ Advertise ์ˆ˜์‹  ํฌํŠธ
  Listen 6666
  
    
      Order deny,allow
      Deny from all
      Allow from 127.0.0.1  # ๋ณด์•ˆ์ƒ ๋กœ์ปฌ ์ ‘๊ทผ๋งŒ ํ—ˆ์šฉ ๊ถŒ์žฅ
    
    
    # ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ด‘๊ณ  ํ™œ์„ฑํ™” (ํ•ต์‹ฌ)
    ServerAdvertise on
    EnableMCPMReceive

    # ๊ด€๋ฆฌ ์ฝ˜์†” URL
    
      SetHandler mod_cluster-manager
      Order deny,allow
      Allow from all
    
  

2. JBoss ์„ค์ • (Middleware)

JBoss๊ฐ€ ๊ธฐ๋™๋  ๋•Œ ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋กœ ์ „ํŒŒํ•˜๊ฑฐ๋‚˜, ํ”„๋ก์‹œ(Apache) ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์•„์˜ค๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

1) Instance ID ์„ค์ • (domain.xml)

Sticky Session์„ ์œ„ํ•ด ๊ฐ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค์— ๊ณ ์œ ํ•œ ID๋ฅผ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ${jboss.server.name} ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" instance-id="${jboss.server.name}" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp"/>
    ...
</subsystem>

2) ์†Œ์ผ“ ๋ฐ”์ธ๋”ฉ (Socket Binding) - ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์ฃผ์†Œ

๋™์ผ ๋„คํŠธ์›Œํฌ ๋‚ด์— ์—ฌ๋Ÿฌ JBoss ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ํ˜ผ์„ ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์ฃผ์†Œ๋‚˜ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

domain.xml ์ˆ˜์ • (socket-binding-group):

<socket-binding-group name="full-ha-sockets" default-interface="public">
    
    ...
</socket-binding-group>
Tip: XML์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋™ ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ(System Property)๋กœ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
-Djboss.modcluster.multicast.address=224.10.1.1

3. ๊ฒ€์ฆ ๋ฐ ํ…Œ์ŠคํŠธ

์„ค์ • ์™„๋ฃŒ ํ›„ Apache -> JBoss ์ˆœ์„œ๋กœ ๊ธฐ๋™ํ•ฉ๋‹ˆ๋‹ค.

1) Apache ๊ด€๋ฆฌ ์ฝ˜์†” ์ ‘์†

๋ธŒ๋ผ์šฐ์ €์—์„œ http://[Apache_IP]:6666/mod_cluster_manager ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

  • ์ •์ƒ: ํ•˜๋‹จ์— ์—ฐ๊ฒฐ๋œ JBoss Node(Node Name, IP, Port) ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • ์‹คํŒจ: ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ํ†ต์‹ ์ด ๋ฐฉํ™”๋ฒฝ์— ๋ง‰ํ˜€์žˆ๊ฑฐ๋‚˜, Advertise ์„ค์ •์ด ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2) ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋™์ž‘ ํ™•์ธ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜ธ์ถœ ์‹œ ์„ธ์…˜์ด ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ํ•œ ์ชฝ ๋…ธ๋“œ๋ฅผ ์…ง๋‹ค์šด ์‹œ์ผฐ์„ ๋•Œ Failover๊ฐ€ ์ผ์–ด๋‚˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

mod_cluster manager screen

[๊ทธ๋ฆผ] mod_cluster ๋งค๋‹ˆ์ € ํ™”๋ฉด (๋…ธ๋“œ ์ธ์‹ ์„ฑ๊ณต)


Next Step:
๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด, mod_cluster ์„ค์ •์„ TCP ์œ ๋‹ˆ์บ์ŠคํŠธ(Proxy List ์ง€์ • ๋ฐฉ์‹)๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒ€ํ† ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

[JBoss EAP 6] Windows Service ๋“ฑ๋ก ๊ฐ€์ด๋“œ (service.bat install)

Windows ํ™˜๊ฒฝ์—์„œ JBoss EAP 6๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋กœ ๋“ฑ๋กํ•˜์—ฌ, ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. JBoss Native ํŒจํ‚ค์ง€์— ํฌํ•จ๋œ service.bat ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

์„œ๋น„์Šค ๋“ฑ๋ก ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ด€๋ฆฌ์ž ๊ถŒํ•œ(Run as Administrator)์œผ๋กœ ์‹คํ–‰๋œ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(CMD)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

JBoss๊ฐ€ ์„œ๋น„์Šค๋กœ ๊ตฌ๋™๋  ๋•Œ ์ฐธ์กฐํ•  ํ•„์ˆ˜ ๋ณ€์ˆ˜๋ฅผ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • JBOSS_HOME: JBoss EAP 6 ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ (์˜ˆ: C:\jboss-eap-6.4)
  • NOPAUSE: ๊ฐ’์„ 1๋กœ ์„ค์ •.
    (※ ์ค‘์š”: ์ด ์„ค์ •์ด ์—†์œผ๋ฉด ์„œ๋น„์Šค ์ข…๋ฃŒ ์‹œ ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ "Press any key..." ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•˜์—ฌ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.)

1. ์„œ๋น„์Šค ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์œ„์น˜

JBoss EAP 6๋Š” Windows ์„œ๋น„์Šค ๋“ฑ๋ก์„ ์œ„ํ•œ Native ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

:: ๊ฒฝ๋กœ ์ด๋™ (์„ค์น˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ)
cd %JBOSS_HOME%\modules\system\layers\base\native\sbin

:: ํŒŒ์ผ ํ™•์ธ
dir service.bat

2. ์„œ๋น„์Šค ๋“ฑ๋ก (Install Command)

service.bat install ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šด์˜ ๋ชจ๋“œ(Standalone / Domain)์— ๋”ฐ๋ผ ์˜ต์…˜์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Case A: Standalone Mode (๋‹จ๋… ์ธ์Šคํ„ด์Šค)

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

service.bat install /loglevel INFO

Case B: Domain Mode (๋„๋ฉ”์ธ ๊ตฌ์„ฑ)

๋„๋ฉ”์ธ ์ปจํŠธ๋กค๋Ÿฌ(Domain Controller)์™€ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ปจํŠธ๋กค๋Ÿฌ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

:: ๊ธฐ๋ณธ ๊ตฌ๋ฌธ
service.bat install /controller [Host:Port] /host [HostName] /loglevel INFO

:: ์‚ฌ์šฉ ์˜ˆ์‹œ (๋กœ์ปฌ์ด ๋งˆ์Šคํ„ฐ์ธ ๊ฒฝ์šฐ)
service.bat install /controller localhost:9990 /host master /loglevel INFO

์ฃผ์š” ์˜ต์…˜ ์„ค๋ช…

์˜ต์…˜ ์„ค๋ช…
/name ์„œ๋น„์Šค ์ด๋ฆ„ ์ง€์ • (๊ธฐ๋ณธ๊ฐ’: JBossEAP6)
/desc ์„œ๋น„์Šค ์„ค๋ช… ์ง€์ •
/serviceuser ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•  Windows ๊ณ„์ • (DOMAIN\User)
/servicepass ์‹คํ–‰ ๊ณ„์ •์˜ ์•”ํ˜ธ

3. ๋“ฑ๋ก ํ™•์ธ ๋ฐ ์ œ์–ด (Verification)

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Windows ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‹คํ–‰ ์ฐฝ(Win+R) > services.msc ์ž…๋ ฅ.
  2. "JBoss Enterprise Application Platform 6" ์„œ๋น„์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘(Start) ํ•˜๊ณ , ์ƒํƒœ๊ฐ€ '์‹คํ–‰ ์ค‘'์œผ๋กœ ๋ฐ”๋€Œ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ €๋กœ JBoss ๊ด€๋ฆฌ ์ฝ˜์†”์ด๋‚˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜์—ฌ ์‹ค์ œ ๊ตฌ๋™ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.

4. ์„œ๋น„์Šค ์‚ญ์ œ (Uninstall)

์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๋กœ๋ฅผ ๋ฐ”๊ฟ€ ๊ฒฝ์šฐ, ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

:: ์„œ๋น„์Šค ์ค‘์ง€ (๋จผ์ € ์ˆ˜ํ–‰ ํ•„์ˆ˜)
service.bat stop

:: ์„œ๋น„์Šค ์‚ญ์ œ
service.bat uninstall
์ฃผ์˜: ์„œ๋น„์Šค ์‚ญ์ œ ํ›„ services.msc ๋ชฉ๋ก์— ์ž”์ƒ์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด, ์œˆ๋„์šฐ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ CMD์—์„œ sc delete [์„œ๋น„์Šค๋ช…]์„ ๊ฐ•์ œ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[IHS/Apache] ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•œ ๋ถˆํ•„์š” HTTP Method(PUT, DELETE, TRACE) ์ฐจ๋‹จ ์„ค์ •

์›น ์„œ๋ฒ„ ์šด์˜ ์‹œ ๋ณด์•ˆ ์ทจ์•ฝ์ (ํŒŒ์ผ ๋ณ€์กฐ, ์ •๋ณด ๋…ธ์ถœ ๋“ฑ)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด GET, POST๋ฅผ ์ œ์™ธํ•œ ๋ถˆํ•„์š”ํ•œ HTTP Method(PUT, DELETE, TRACE, OPTIONS)๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. IBM HTTP Server(Apache) ์„ค์ •๊ณผ WAS(web.xml) ์„ค์ • ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ์ ์œผ๋กœ ์›น ์„œ๋ฒ„๋Š” ๋‹ค์–‘ํ•œ HTTP Method๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ, ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„ GET๊ณผ POST๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์—ด์–ด๋‘˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • PUT, DELETE: ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์˜ ํŒŒ์ผ์„ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ.
  • TRACE: XST(Cross-Site Tracing) ๊ณต๊ฒฉ์— ์•…์šฉ๋˜์–ด ์ฟ ํ‚ค/์„ธ์…˜ ์ •๋ณด๊ฐ€ ํƒˆ์ทจ๋  ์ˆ˜ ์žˆ์Œ.
  • OPTIONS: ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•จ.

Test Environment

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

1. Web Server ๋ ˆ๋ฒจ ์ฐจ๋‹จ (httpd.conf)

๊ฐ€์žฅ ์•ž๋‹จ์˜ ์›น ์„œ๋ฒ„์—์„œ ์›์ฒœ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๋ฅผ ๋ง‰๊ณ  ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ์ ์šฉํ•˜์‹ญ์‹œ์˜ค.

Method A: LimitExcept ์ง€์‹œ์–ด ์‚ฌ์šฉ (๊ถŒ์žฅ)

ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ๋‚˜ URL ํŒจํ„ด์— ๋Œ€ํ•ด ํ—ˆ์šฉํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ฑฐ๋ถ€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

# 1. ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ์ค€ ์ฐจ๋‹จ
<Directory "/WAS/htdocs">
    Options FollowSymLinks
    AllowOverride None
    
    # GET, POST๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ ๊ฑฐ๋ถ€
    <LimitExcept GET POST>
        Order allow,deny
        Deny from all
    </LimitExcept>
</Directory>

# 2. ์ „์—ญ(URL) ๊ธฐ์ค€ ์ฐจ๋‹จ (Directory ์„ค์ •์ด ๋ชจํ˜ธํ•  ๋•Œ)
<Location "/*">
    <LimitExcept GET POST>
        Order allow,deny
        Deny from all
    </LimitExcept>
</Location>
๋ฒ„์ „๋ณ„ ๋ฌธ๋ฒ• ์ฃผ์˜ (Note):
IHS v8.5(Apache 2.2)๋Š” Order/Deny๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, IHS v9.0(Apache 2.4) ์ด์ƒ์—์„œ๋Š” Require all denied ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Method B: Mod_Rewrite ์‚ฌ์šฉ

mod_rewrite ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๊ฐ•์ œ๋กœ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

LoadModule rewrite_module modules/mod_rewrite.so

<IfModule mod_rewrite.c>
    RewriteEngine On
    
    # ์กฐ๊ฑด: ์š”์ฒญ ๋ฉ”์†Œ๋“œ๊ฐ€ GET ๋˜๋Š” POST๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
    RewriteCond %{REQUEST_METHOD} !^(GET|POST)
    
    # ๊ทœ์น™: 405 (Method Not Allowed) ์—๋Ÿฌ ๋ฐ˜ํ™˜
    RewriteRule .* - [R=405,L]
</IfModule>

2. WAS ๋ ˆ๋ฒจ ์ฐจ๋‹จ (web.xml)

์›น ์„œ๋ฒ„ ์„ค์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(WAR) ๋‹จ์œ„๋กœ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ‘œ์ค€ ๋ฐฐํฌ ์„œ์ˆ ์ž(web.xml)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ๋ฐฉ๋ฒ•

web.xml์— security-constraint๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํŠน์ • ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Restricted Methods</web-resource-name>
        <url-pattern>/*</url-pattern>
        
        <!-- ์ฐจ๋‹จํ•  ๋ฉ”์†Œ๋“œ ๋ช…์‹œ -->
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>TRACE</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>HEAD</http-method>
    </web-resource-collection>
    
    <!-- ์ค‘์š”: auth-constraint๋ฅผ ๋น„์›Œ๋‘๋ฉด ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ๊ถŒํ•œ์„ ์ฃผ์ง€ ์•Š์Œ(์ฐจ๋‹จ) -->
    <auth-constraint />
</security-constraint>

3. ๊ฒ€์ฆ (Verification)

์„ค์ • ์ ์šฉ ํ›„ ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ฐจ๋‹จ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. telnet ๋˜๋Š” curl์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Telnet์„ ์ด์šฉํ•œ ํ…Œ์ŠคํŠธ

$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.

# OPTIONS ๋ฉ”์†Œ๋“œ ์š”์ฒญ ์ž…๋ ฅ
OPTIONS / HTTP/1.0
Host: localhost
(์—”ํ„ฐ ๋‘ ๋ฒˆ)

# ๊ฒฐ๊ณผ ํ™•์ธ (403 Forbidden ๋˜๋Š” 405 Method Not Allowed ํ™•์ธ)
HTTP/1.1 403 Forbidden
Date: Wed, 04 Jul 2018 01:44:40 GMT
...

Curl์„ ์ด์šฉํ•œ ํ…Œ์ŠคํŠธ (๊ฐ„ํŽธ)

# -X ์˜ต์…˜์œผ๋กœ ๋ฉ”์†Œ๋“œ ์ง€์ •, -I ์˜ต์…˜์œผ๋กœ ํ—ค๋”๋งŒ ํ™•์ธ
curl -v -X OPTIONS http://localhost/

# ๊ฒฐ๊ณผ: < HTTP/1.1 403 Forbidden ํ™•์ธ

Next Step:
๋ฉ”์†Œ๋“œ ์ฐจ๋‹จ ์™ธ์—๋„ ServerTokens Prod ์„ค์ •์„ ํ†ตํ•ด ํ—ค๋”์— ๋…ธ์ถœ๋˜๋Š” ์›น ์„œ๋ฒ„ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๋Š” ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ์ถ”๊ฐ€๋กœ ๊ฒ€ํ† ํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

[IBM HTTP Server ] IBM HTTP Server v8.5 vs v9.0: Apache Base Version ํ™•์ธ ๋ฐ ์ฐจ์ด์  (Apache 2.2 vs 2.4)

IBM HTTP Server(IHS)๋Š” Apache HTTP Server๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. IHS v8.5(Apache 2.2 ๊ธฐ๋ฐ˜)์™€ IHS v9.0(Apache 2.4 ๊ธฐ๋ฐ˜)์˜ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ , ์—”์ง„ ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋”ฐ๋ฅธ ์„ค์ • ํŒŒ์ผ(httpd.conf) ํ˜ธํ™˜์„ฑ ์ฃผ์˜์‚ฌํ•ญ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1. ๋ฒ„์ „ ํ™•์ธ ๋ฐฉ๋ฒ• (Check Version)

IHS์˜ ์‹คํ–‰ ํŒŒ์ผ(apache.exe ๋˜๋Š” httpd)์— -V ์˜ต์…˜์„ ์ฃผ์–ด ์ปดํŒŒ์ผ ์˜ต์…˜๊ณผ ๊ธฐ๋ฐ˜ ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์–ด

# Windows
cd [IHS_HOME]\bin
.\apache.exe -V

# Linux/Unix
cd [IHS_HOME]/bin
./apachectl -V

2. ๋ฒ„์ „๋ณ„ ์ƒ์„ธ ์ •๋ณด (Output Analysis)

IHS v8.5 (Apache 2.2 Base)

IHS 8.5.5๋Š” Apache 2.2.8 ๋ฒ„์ „์„ ๋ฒ ์ด์Šค๋กœ ํ•˜์—ฌ IBM์˜ ์ถ”๊ฐ€์ ์ธ ํŒจ์น˜์™€ ๋ณด์•ˆ ์ˆ˜์ •์ด ์ ์šฉ๋œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

PS E:\app\was\HTTPServer\bin> .\apache.exe -V
Server version: IBM_HTTP_Server/8.5.5.0 (Win32)
Apache version: 2.2.8 (with additional fixes)  <-- Check Point
Server built:   Feb 20 2013 13:50:05
Architecture:   32-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
  forked:       no
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/winnt"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D HTTPD_ROOT="/apache"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

IHS v9.0 (Apache 2.4 Base)

IHS 9.0์€ Apache 2.4.12 ๋ฒ„์ „์„ ๋ฒ ์ด์Šค๋กœ ํ•ฉ๋‹ˆ๋‹ค. Apache 2.4๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ์„ฑ๋Šฅ ๊ฐœ์„ (Event MPM ๋“ฑ)๊ณผ ์„ค์ • ๋ฌธ๋ฒ•์˜ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

PS E:\software\IBM\HTTPServer9\bin> .\apache.exe -V
Server version: IBM_HTTP_Server/9.0.0.0-PI56034 (Win32)
Apache version: 2.4.12 (with additional fixes) <-- Check Point
Server built:   Apr 18 2016 20:28:53
Architecture:   32-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
  forked:       no
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/apache"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

3. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฃผ์˜์‚ฌํ•ญ (Apache 2.2 vs 2.4)

IHS v8.5์—์„œ v9.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ ๊ฐ€์žฅ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ์ ‘๊ทผ ์ œ์–ด(Access Control) ๊ตฌ๋ฌธ์˜ ๋ณ€ํ™”์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด httpd.conf๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ ์  ๋น„๊ต

๊ตฌ๋ถ„ IHS v8.5 (Apache 2.2) IHS v9.0 (Apache 2.4)
๋ชจ๋“  ์š”์ฒญ ํ—ˆ์šฉ Order allow,deny
Allow from all
Require all granted
๋ชจ๋“  ์š”์ฒญ ๊ฑฐ๋ถ€ Order deny,allow
Deny from all
Require all denied
ํŠน์ • IP ํ—ˆ์šฉ Order deny,allow
Deny from all
Allow from 127.0.0.1
Require ip 127.0.0.1
Warning: IHS 9.0์—์„œ ๊ธฐ์กด 2.2 ๋ฌธ๋ฒ•(Order/Allow)์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด mod_access_compat ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ์‹ ๊ทœ ๋ฌธ๋ฒ•(Require)์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Next Step:
IHS ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ณ„ํš์ด๋ผ๋ฉด, ์šด์˜ ์ค‘์ธ httpd.conf ํŒŒ์ผ ๋‚ด์˜ ์ ‘๊ทผ ์ œ์–ด ๊ตฌ๋ฌธ์„ ๋ฏธ๋ฆฌ ์ „์ˆ˜ ์กฐ์‚ฌํ•˜์—ฌ Apache 2.4 ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

[WebSphere] Liberty Core ์„ค์น˜ ๋ฐ ํ•„์ˆ˜ ์„ค์ • ๊ฐ€์ด๋“œ (CLI Install, server.xml, Plugin)

IBM WebSphere Liberty Core๋ฅผ GUI ์—†์ด Command Line(CLI) ํ™˜๊ฒฝ์—์„œ ์„ค์น˜ํ•˜๊ณ , ์„œ๋ฒ„ ์ƒ์„ฑ ๋ฐ ๊ธฐ๋™, ํ•ต์‹ฌ ์„ค์ •(server.xml, JVM), ๊ทธ๋ฆฌ๊ณ  ์›น ์„œ๋ฒ„ ์—ฐ๋™์„ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ(pluginUtility) ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1. ์ œํ’ˆ ์„ค์น˜ (CLI Mode)

Liberty๋Š” Installation Manager(IM)์˜ imcl ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. GUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ํ•„์ˆ˜์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์„ค์น˜ ๋ช…๋ น์–ด (imcl)

-repositories ์˜ต์…˜์—๋Š” ์„ค์น˜ ํŒŒ์ผ(Repository)์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฝค๋งˆ(,)๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ WAS์™€ JDK ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋™์‹œ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์„ค์น˜ ์˜ˆ์‹œ (Windows ๊ธฐ์ค€, Linux๋Š” ๊ฒฝ๋กœ๋งŒ ๋ณ€๊ฒฝ)
imcl install com.ibm.websphere.liberty.v85_8.5.16002.20160526_2338 \
com.ibm.websphere.liberty.IBMJAVA.v80_8.0.3020.20161124_1304 \
-repositories "D:\Liberty\16.0.0.2-WS-LIBERTY-CORE,D:\work_file\was_install\v8.5.5\SDK\8.0.3.20" \
-installationDirectory "F:\app\IBM\wlpcore\AppServer" \
-acceptLicense \
-showProgress -sP
Tip: ํŒจํ‚ค์ง€ ID(com.ibm...)๋ฅผ ๋ชจ๋ฅผ ๊ฒฝ์šฐ imcl listAvailablePackages -repositories [๊ฒฝ๋กœ] ๋ช…๋ น์–ด๋กœ ๋ฏธ๋ฆฌ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ์„œ๋ฒ„ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ (Server Lifecycle)

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด bin ๋””๋ ‰ํ† ๋ฆฌ์˜ server ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

1) ์„œ๋ฒ„ ์ƒ์„ฑ (Create)

cd [WLP_HOME]/bin
# ๊ตฌ๋ฌธ: server create [์„œ๋ฒ„๋ช…]
server.bat create test01

์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด [WLP_HOME]/usr/servers/test01 ๊ฒฝ๋กœ์— ์„ค์ • ํŒŒ์ผ๋“ค์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

2) ์„œ๋ฒ„ ๊ธฐ๋™ ๋ฐ ์ƒํƒœ ํ™•์ธ (Start/Status)

# ์„œ๋ฒ„ ๊ธฐ๋™
server.bat start test01

# ์ƒํƒœ ํ™•์ธ (ํ•„์ˆ˜ ๊ฒ€์ฆ ๋‹จ๊ณ„)
server.bat status test01

3. ํ•ต์‹ฌ ์„ค์ • (server.xml)

Liberty์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์€ server.xml ํŒŒ์ผ ํ•˜๋‚˜์— ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ธฐ๋Šฅ(Feature)๋งŒ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ์œ„์น˜

  • [WLP_HOME]/usr/servers/[์„œ๋ฒ„๋ช…]/server.xml

์ฃผ์š” ์„ค์ • ์˜ˆ์‹œ

<?xml version="1.0" encoding="UTF-8"?>
<server description="Test Server">

    <!-- 1. Feature Manager: ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ ๋กœ๋“œ -->
    <featureManager>
        <feature>jsp-2.2</feature>
        <feature>jdbc-4.0</feature>
        <feature>localConnector-1.0</feature> <!-- ๋กœ์ปฌ ๊ด€๋ฆฌ์šฉ -->
        <feature>adminCenter-1.0</feature>    <!-- ์›น ๊ด€๋ฆฌ ์ฝ˜์†” -->
    </featureManager>

    <!-- 2. HTTP Endpoint: ํฌํŠธ ์„ค์ • -->
    <!-- host="*"๋Š” ๋ชจ๋“  IP ๋Œ€์—ญ์—์„œ์˜ ์ ‘์†์„ ํ—ˆ์šฉํ•จ -->
    <httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" httpsPort="9443">
        <tcpOptions soReuseAddr="true" />
    </httpEndpoint>

    <!-- 3. Web Server Plugin ์„ค์ • -->
    <pluginConfiguration webserverPort="80" webserverSecurePort="443"/>

    <!-- 4. Application ๋ฐฐํฌ ์„ค์ • (์ž๋™ ์ธ์‹์ด ํŽธํ•จ) -->
    <applicationManager autoExpand="true"/>
    
    <!-- 5. DB Connection (Oracle ์˜ˆ์‹œ) -->
    <dataSource id="WorklightDS" jndiName="jdbc/WorklightDS">
        <jdbcDriver libraryRef="OracleLib"/>
        <properties.oracle 
            driverType="thin" 
            databaseName="ORCL" 
            serverName="localhost" 
            portNumber="1521" 
            user="SCOTT" 
            password="{xor}KDAtNDM2ODcr"/> <!-- securityUtility๋กœ ์•”ํ˜ธํ™” ๊ถŒ์žฅ -->
    </dataSource>

    <!-- 6. Logging ์„ค์ • -->
    <logging maxFiles="5" consoleLogLevel="INFO"/>

</server>
์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ Tip:
์„ค์ • ํŒŒ์ผ์˜ password="{xor}..." ๋ถ€๋ถ„์€ ํ‰๋ฌธ์„ ๊ทธ๋Œ€๋กœ ๋„ฃ์ง€ ์•Š๊ณ , Liberty๊ฐ€ ์ œ๊ณตํ•˜๋Š” bin/securityUtility encode [์•”ํ˜ธ] ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’์„ ๋„ฃ์–ด์•ผ ๋ณด์•ˆ์ƒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

4. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ JVM ์˜ต์…˜ ์„ค์ •

๋ฉ”๋ชจ๋ฆฌ(Heap) ์„ค์ •์ด๋‚˜ ๋กœ๊ทธ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ ๋“ฑ์€ ๋ณ„๋„์˜ ์„ค์ • ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1) JVM ์˜ต์…˜ (jvm.options)

Heap Size๋‚˜ GC ๋กœ๊ทธ ์„ค์ •์€ jvm.options ํŒŒ์ผ์— ๋ผ์ธ ๋‹จ์œ„๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์œ„์น˜: [WLP_HOME]/usr/servers/[์„œ๋ฒ„๋ช…]/jvm.options
# Heap Memory ์„ค์ •
-Xms512m
-Xmx1024m

# GC ๋กœ๊ทธ ์„ค์ •
-verbose:gc
-Xverbosegclog:verbosegc.log
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC

2) ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (server.env)

JAVA_HOME ์ง€์ •์ด๋‚˜ ์ปค์Šคํ…€ ๋กœ๊ทธ ๊ฒฝ๋กœ๋Š” server.env์— ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

# Java ๋ฒ„์ „ ์ง€์ •
JAVA_HOME=C:\Java\jdk1.8.0

# ๋กœ๊ทธ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ (Optional)
WLP_OUTPUT_DIR=F:\app\IBM\wlpcore\AppServer\usr\logs\test02

5. ์›น ์„œ๋ฒ„ ํ”Œ๋Ÿฌ๊ทธ์ธ (Plugin) ์ƒ์„ฑ

Liberty ์„œ๋ฒ„ ์•ž๋‹จ์— IHS(Apache)๋ฅผ ๋‘”๋‹ค๋ฉด, plugin-cfg.xml์„ ์ƒ์„ฑํ•˜์—ฌ ์›น ์„œ๋ฒ„์— ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ ๋„๊ตฌ (pluginUtility)

Liberty 16.0.0.4 ๋ฒ„์ „๋ถ€ํ„ฐ pluginUtility ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

cd [WLP_HOME]/bin

# 1. ๋กœ์ปฌ ์„œ๋ฒ„์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ
pluginUtility generate --server=test01 --targetpath=./plugin-cfg.xml

# 2. ์›๊ฒฉ ์„œ๋ฒ„์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ (Admin Center ๊ธฐ๋Šฅ ํ•„์š”)
pluginUtility generate --server=admin:password@remoteHost:9443 --targetpath=./plugin-cfg.xml

# 3. ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ณ‘ํ•ฉ (Merge)
pluginUtility merge --sourcepath=../usr/plugin --targetpath=../usr/merged_plugin.xml

์›น ์„œ๋ฒ„(httpd.conf) ์ ์šฉ

์ƒ์„ฑ๋œ xml ํŒŒ์ผ์„ ์›น ์„œ๋ฒ„๋กœ ๋ณต์‚ฌํ•œ ํ›„ httpd.conf์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

# Windows ์˜ˆ์‹œ
LoadModule was_ap22_module "C:\IBM\HTTPServer\plugins\bin\mod_was_ap22_http.dll"
WebSpherePluginConfig "C:\IBM\HTTPServer\plugins\config\webserver1\plugin-cfg.xml"

# Linux/Unix ์˜ˆ์‹œ
LoadModule was_ap22_module "/opt/IBM/HTTPServer/plugins/bin/mod_was_ap22_http.so"
WebSpherePluginConfig "/opt/IBM/HTTPServer/plugins/config/webserver1/plugin-cfg.xml"

Next Step:
๊ธฐ๋ณธ ์„ค์น˜์™€ ์„ค์ •์ด ๋๋‚ฌ๋‹ค๋ฉด, adminCenter ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €(https://localhost:9443/adminCenter)๋กœ ์ ‘์†ํ•˜์—ฌ GUI ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด ๋ณด์‹ญ์‹œ์˜ค.

[JBoss EAP 6] Context Root๋ฅผ ๋ฃจํŠธ(/)๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ: Welcome Page ๋น„ํ™œ์„ฑํ™” ์„ค์ •

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ๋•Œ, URL ๋’ค์— ๋ถ™๋Š” ํ”„๋กœ์ ํŠธ๋ช…(์˜ˆ: /MyApp) ์—†์ด ๋„๋ฉ”์ธ ์ž์ฒด(์˜ˆ: http://localhost:8080/)๋กœ ์ ‘์†ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • ๋ณ€๊ฒฝ๊ณผ JBoss ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ Welcome Page ๋น„ํ™œ์„ฑํ™” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ์ ์œผ๋กœ JBoss EAP๋Š” ๋ฃจํŠธ ๊ฒฝ๋กœ(/)์— "Welcome to JBoss"๋ผ๋Š” ๊ธฐ๋ณธ ํ™˜์˜ ํŽ˜์ด์ง€๊ฐ€ ๋งคํ•‘๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฃจํŠธ ๊ฒฝ๋กœ์— ๋ฐฐํฌํ•˜๋ ค๋ฉด, ์ด ๊ธฐ๋ณธ ํ™˜์˜ ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ์„ ๋„๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ทธ ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • WAS: JBoss EAP 6.4

1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • (jboss-web.xml)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(WAR) ๋‚ด๋ถ€์˜ ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด "์ด ์•ฑ์€ ๋ฃจํŠธ ์ปจํ…์ŠคํŠธ(/)๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค"๊ณ  ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •

  • ์œ„์น˜: [WAR_FILE]/WEB-INF/jboss-web.xml
  • ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <!-- Context Root๋ฅผ / ๋กœ ์ง€์ • -->
    <context-root>/</context-root>
</jboss-web>

2. ์„œ๋ฒ„ ์„ค์ • (domain.xml / standalone.xml)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. JBoss ์›น ์„œ๋ธŒ์‹œ์Šคํ…œ(Web Subsystem) ์„ค์ •์—์„œ enable-welcome-root ์˜ต์…˜์„ false๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ์„ ํƒ

  • Domain Mode: [EAP_HOME]/domain/configuration/domain.xml
  • Standalone Mode: [EAP_HOME]/standalone/configuration/standalone.xml

์ˆ˜์ • ๋‚ด์šฉ

๋„๋ฉ”์ธ ๋ชจ๋“œ์˜ ๊ฒฝ์šฐ, ํ˜„์žฌ ์„œ๋ฒ„ ๊ทธ๋ฃน์ด ์‚ฌ์šฉ ์ค‘์ธ ํ”„๋กœํŒŒ์ผ(Profile)(์˜ˆ: ha, full, full-ha)์„ ์ •ํ™•ํžˆ ์ฐพ์•„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<!-- ํ•ด๋‹น ํ”„๋กœํŒŒ์ผ ๋‚ด์˜ web ์„œ๋ธŒ์‹œ์Šคํ…œ ๊ฒ€์ƒ‰ -->
<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
    
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    
    <!-- ํ•ต์‹ฌ ์ˆ˜์ • ๋ถ€๋ถ„: enable-welcome-root๋ฅผ false๋กœ ๋ณ€๊ฒฝ -->
    <virtual-server name="default-host" enable-welcome-root="false">
        <alias name="localhost"/>
        <alias name="example.com"/>
    </virtual-server>

</subsystem>
์ฃผ์˜ (Warning):
enable-welcome-root="true"์ธ ์ƒํƒœ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Context Root๋ฅผ /๋กœ ์„ค์ •ํ•˜๊ณ  ๋ฐฐํฌํ•˜๋ฉด, JBoss ๊ธฐ๋™ ์‹œ "Context / is already in use" ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ฐฐํฌ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

3. ์ ์šฉ ๋ฐ ๊ฒ€์ฆ (Verification)

์„ค์ • ๋ณ€๊ฒฝ ํ›„์—๋Š” ์„œ๋ฒ„ ์žฌ๊ธฐ๋™์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ธฐ๋™ ๋ฐ ์ ‘์† ํ…Œ์ŠคํŠธ

  1. JBoss ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— http://[์„œ๋ฒ„IP]:8080/ ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. JBoss ๊ธฐ๋ณธ ํ™˜์˜ ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹Œ, ๋‚ด๊ฐ€ ๋ฐฐํฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”์ธ ํŽ˜์ด์ง€๊ฐ€ ๋œจ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Next Step:
๋ฃจํŠธ ์ปจํ…์ŠคํŠธ ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, Apache ์›น ์„œ๋ฒ„์™€์˜ ์—ฐ๋™ ์‹œ mod_jk์˜ JkMount ์„ค์ •๋„ /*๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ชจ๋“  ์š”์ฒญ์„ WAS๋กœ ๋„˜๊ธฐ๋„๋ก ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[JBoss EAP 6] Session Clustering ์™„๋ฒฝ ๊ฐ€์ด๋“œ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •๋ถ€ํ„ฐ TCP ์œ ๋‹ˆ์บ์ŠคํŠธ ์ „ํ™˜๊นŒ์ง€

JBoss EAP 6์˜ HA(High Availability) ํ”„๋กœํŒŒ์ผ ํ™˜๊ฒฝ์—์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. <distributable/> ์„ ์–ธ๋ถ€ํ„ฐ ๋ณต์ œ ํŠธ๋ฆฌ๊ฑฐ ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ์›น ์„œ๋ฒ„(Apache)์™€์˜ ์—ฐ๋™์„ ์œ„ํ•œ jvmRoute ๋ฐ JGroups ๋„คํŠธ์›Œํฌ ์„ค์ •๊นŒ์ง€ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Test Environment

  • Middleware: JBoss EAP 6.4 (Domain Mode)
  • Profile: ha ๋˜๋Š” full-ha (ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ชจ๋“ˆ์ด ํฌํ•จ๋œ ํ”„๋กœํŒŒ์ผ ํ•„์ˆ˜)

1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • (Application Config)

์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ๋จผ์ € ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด "๋‚˜๋Š” ๋ถ„์‚ฐ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) web.xml ์„ค์ • (ํ•„์ˆ˜)

<distributable/> ํƒœ๊ทธ๊ฐ€ ์—†์œผ๋ฉด JBoss๋Š” ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ธ์…˜์„ ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์ €์žฅํ•˜๊ณ  ๋ณต์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" ...>
    
    <distributable/>

    <session-config>
        <session-timeout>30</session-timeout> </session-config>

</web-app>

2) jboss-web.xml ์„ค์ • (์˜ต์…˜/์ƒ์„ธ ํŠœ๋‹)

์„ธ์…˜ ๋ณต์ œ์˜ ๋นˆ๋„์™€ ๋ฒ”์œ„๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋ ค๋ฉด WEB-INF/jboss-web.xml ํŒŒ์ผ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

<jboss-web>
    <replication-config>
        <cache-name>web</cache-name>
        <!-- ๋ณต์ œ ์‹œ์  ๊ฒฐ์ • -->
        <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
        <!-- ๋ณต์ œ ๋‹จ์œ„ ๊ฒฐ์ • (SESSION: ์ „์ฒด / ATTRIBUTE: ๋ณ€๊ฒฝ๋œ ์†์„ฑ๋งŒ) -->
        <replication-granularity>SESSION</replication-granularity>
    </replication-config>
</jboss-web>
Replication Trigger ์„ค๋ช…:
  • SET: ์„ธ์…˜ ์†์„ฑ์ด ๋ณ€๊ฒฝ(setAttribute)๋  ๋•Œ๋งŒ ๋ณต์ œ (์„ฑ๋Šฅ ์šฐ์ˆ˜).
  • SET_AND_GET: ์„ธ์…˜์„ ์ฝ๊ธฐ๋งŒ ํ•ด๋„ ๋ณต์ œ (๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์ตœ์šฐ์„ ).
  • SET_AND_NON_PRIMITIVE_GET: (Default) ๊ธฐ๋ณธํ˜•์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ๋•Œ ๋ณต์ œ.

2. Sticky Session ์„ค์ • (jvmRoute)

์›น ์„œ๋ฒ„(Apache mod_jk/mod_cluster)๊ฐ€ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•  ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์ ‘์†ํ•œ JBoss ์„œ๋ฒ„๋กœ ๊ณ„์† ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ํ•˜๋ ค๋ฉด(Sticky Session), ์„ธ์…˜ ID ๋’ค์— ์„œ๋ฒ„ ์‹๋ณ„์ž(jvmRoute)๋ฅผ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) host.xml ์„ค์ • (์„œ๋ฒ„๋ณ„ ์‹๋ณ„์ž ๋ถ€์—ฌ)

๊ฐ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค์— ๊ณ ์œ ํ•œ jvmRoute ๊ฐ’์„ ์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

<servers>
    <server name="Server01" group="main-server-group" auto-start="true">
        <system-properties>
            <!-- ์ด ๊ฐ’์€ workers.properties์˜ ์›Œ์ปค ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ -->
            <property name="jvmRoute" value="Server01" boot-time="true"/>
        </system-properties>
    </server>
    
    <server name="Server02" ...>
        <system-properties>
            <property name="jvmRoute" value="Server02" boot-time="true"/>
        </system-properties>
    </server>
</servers>

2) domain.xml ์„ค์ • (Web Subsystem ์ ์šฉ)

์ •์˜ํ•œ ์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ(${jvmRoute})๋ฅผ ์›น ์„œ๋ธŒ์‹œ์Šคํ…œ์˜ instance-id๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" instance-id="${jvmRoute}" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <!-- AJP ์ปค๋„ฅํ„ฐ ํ•„์ˆ˜ (mod_jk ์—ฐ๋™ ์‹œ) -->
    <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp"/>
    ...
</subsystem>

3. JGroups ๋„คํŠธ์›Œํฌ ์„ค์ • (UDP vs TCP)

JBoss ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฉค๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ UDP(Multicast)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์žฅ๋น„์—์„œ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋• TCP(Unicast)๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

domain.xml ์ˆ˜์ •

jgroups ์„œ๋ธŒ์‹œ์Šคํ…œ์˜ default-stack ์†์„ฑ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

<!-- ๊ธฐ์กด UDP ์„ค์ • -->
<subsystem xmlns="urn:jboss:domain:jgroups:1.1" default-stack="udp">

<!-- TCP๋กœ ๋ณ€๊ฒฝ -->
<subsystem xmlns="urn:jboss:domain:jgroups:1.1" default-stack="tcp">
    <stack name="tcp">
        <transport type="TCP" socket-binding="jgroups-tcp"/>
        ...
    </stack>
</subsystem>
์ฃผ์˜: TCP๋กœ ๋ณ€๊ฒฝ ์‹œ, MPING(๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋ฉค๋ฒ„ ๊ฒ€์ƒ‰) ๋Œ€์‹  TCPPING์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ ์œผ๋กœ IP ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ด์•ผ ์„œ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

4. ๊ฒ€์ฆ (Verification)

  1. ์„œ๋ฒ„ ๊ธฐ๋™ ํ™•์ธ: ์„œ๋ฒ„ ์‹œ์ž‘ ๋กœ๊ทธ์— Received new cluster view ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉฐ ๋ฉค๋ฒ„๋“ค์ด ์„œ๋กœ๋ฅผ ์ธ์‹ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ธ์…˜ ID ํ™•์ธ: ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ(F12)์—์„œ JSESSIONID ์ฟ ํ‚ค ๊ฐ’ ๋’ค์— .Server01 ์ฒ˜๋Ÿผ jvmRoute ๊ฐ’์ด ๋ถ™๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. Failover ํ…Œ์ŠคํŠธ: ํ•œ ์ชฝ ์„œ๋ฒ„๋ฅผ ๊ฐ•์ œ๋กœ ๋‚ด๋ฆฐ ํ›„(Shutdown), ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ๋กœ๊ทธ์ธ ํ’€๋ฆผ ์—†์ด ์„ธ์…˜์ด ์œ ์ง€๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.