JBoss EAP 7 ๋์ ์ JSESSIONID ๋ค์ ์์์น ๋ชปํ ๋ฌธ์์ด(์๋ฒ๋ช , ๊ทธ๋ฃน๋ช ๋ฑ)์ด ๋ถ๊ฑฐ๋ ๊ธธ์ด๊ฐ ๋์ด๋๋ ํ์์ ๋ถ์ํฉ๋๋ค. ์ด๋ Undertow ์์ง์
JvmRouteHandler๋์ ๋ฐฉ์ ๋๋ฌธ์ด๋ฉฐ, ์ด๋ฅผ ์ ์ดํ๊ธฐ ์ํ ์ค์ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค.
1. ์ด์ ํ์ ๋ฐ ์์ธ ๋ถ์ (Context)
EAP 6์ EAP 7์ ์ธ์ ID๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ํนํ ํด๋ฌ์คํฐ๋ง ํ๊ฒฝ์์ Sticky Session(์ธ์ ๊ณ ์ )์ ์ํด ID ๋ค์ ๋ถ์ด๋ ์๋ณ์(Route)์ ๊ธฐ๋ณธ ๋์์ด ๋ค๋ฆ ๋๋ค.
๋ฒ์ ๋ณ ์ฐจ์ด์
| ๊ตฌ๋ถ | JBoss EAP 6.x (JBossWeb) | JBoss EAP 7.x (Undertow) |
|---|---|---|
| Engine | Apache Tomcat Fork | Undertow |
| Format | [ID].[jvmRoute] |
[ID].[instance-id] |
| Default | ์ค์ ์์ผ๋ฉด ID๋ง ์์ฑํ๊ฑฐ๋ Hostname ๋ถ์ฐฉ | ๊ฐ์ ๋ก jboss.node.name ๋ถ์ฐฉ |
๊ธฐ์ ์ ์์ธ (Undertow JvmRouteHandler)
EAP 7์ ์น ์์ง์ธ Undertow๋ io.undertow.server.JvmRouteHandler๋ฅผ ํตํด ์ธ์
ID๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ํธ๋ค๋ฌ๋ ํด๋ฌ์คํฐ๋ง ์ค์ ์ฌ๋ถ์ ๊ด๊ณ์์ด, ์ค์ ๋ instance-id๊ฐ ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์ธ์
ID ๋ค์ ๋ถ์ด๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ๋ํ, ์ด ๊ฐ์ null์ด๊ฑฐ๋ ๋นํ์ฑํ(disable)ํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋
ธ๋ ์ด๋ฆ์ ๋ฐ๋ผ๊ฐ๋๋ค.
2. ํด๊ฒฐ ๋ฐ ์ค์ ๋ฐฉ๋ฒ (Configuration)
JSESSIONID ๋ค์ ๋ถ๋ ๊ฐ์ ์ ์ดํ๊ธฐ ์ํด์๋ undertow ์๋ธ์์คํ
์ instance-id ์์ฑ์ ๋ช
์์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์ค์ ํ์ผ ์์ (standalone.xml / domain.xml)
Undertow ์๋ธ์์คํ
์ค์ ์์ instance-id ๊ฐ์ ์ํ๋ ์๋ณ์(๊ธฐ์กด jvmRoute์ ๋์ผํ ์ญํ )๋ก ์ง์ ํฉ๋๋ค.
<subsystem xmlns="urn:jboss:domain:undertow:3.1">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
<ajp-listener name="ajp" socket-binding="ajp"/>
<host name="default-host" alias="localhost">
...
</host>
</server>
<servlet-container name="default" default-session-timeout="30" instance-id="${jboss.node.name}" />
</subsystem>
CLI๋ฅผ ์ด์ฉํ ๋ณ๊ฒฝ
์ด์ ์ค์ธ ํ๊ฒฝ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ด๋ฆฌ CLI๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
# instance-id๋ฅผ 'node1'์ผ๋ก ๋ณ๊ฒฝํ๋ ์์
/subsystem=undertow/servlet-container=default:write-attribute(name=instance-id, value="node1")
# ์ค์ ์ ์ฉ์ ์ํด ๋ฆฌ๋ก๋ ํ์
reload
instance-id๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๊ธฐ์กด์ ๋ฐ๊ธ๋ ์ธ์
ID์ ๋งคํ์ด ๋ฌ๋ผ์ง๋ฏ๋ก, ๊ธฐ์กด ์ฌ์ฉ์๋ค์ ์ธ์
์ด ๋๊ธธ(Invalidate) ์ ์์ต๋๋ค. ์๋น์ค ์ ๊ฒ ์๊ฐ์ ์ํํ์ญ์์ค.
3. ๊ฒ์ฆ (Verification)
์ค์ ๋ณ๊ฒฝ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธ์ถํ์ฌ ์ฟ ํค ๊ฐ์ ํ์ธํฉ๋๋ค.
๊ฐ๋ฐ์ ๋๊ตฌ ํ์ธ
- ๋ธ๋ผ์ฐ์ F12 (๊ฐ๋ฐ์ ๋๊ตฌ) ์คํ
- Application ํญ > Cookies ์ ํ
JSESSIONID์ ๊ฐ ํ์ธ
๊ฒฐ๊ณผ ์์:
- ๋ณ๊ฒฝ ์ :
abcde12345.server-one-instance-group-a(๊ธธ๊ณ ๋ณต์กํจ) - ๋ณ๊ฒฝ ํ:
abcde12345.node1(์ค์ ํ ๊ฐ์ผ๋ก ๊น๋ํด์ง)
Next Step:
๋ง์ฝ ์๋จ์ ์น ์๋ฒ(Apache/IHS)์ mod_cluster ๋๋ mod_jk๋ก ์ฐ๋ ์ค์ด๋ผ๋ฉด, ์น ์๋ฒ ์ค์ ์ jvmRoute ๊ฐ๊ณผ JBoss์ instance-id ๊ฐ์ด ์ ํํ ์ผ์นํด์ผ ์คํฐํค ์ธ์
(Sticky Session)์ด ์ ์ ์๋ํฉ๋๋ค. ๋ฐ๋์ ์์ชฝ ์ค์ ์ ๋ง์ถฐ์ฃผ์ธ์.