[Linux] find ๋ช…๋ น์–ด ์‹ค๋ฌด ํŒจํ„ด 3๊ฐ€์ง€: ํŒŒ์ผ๋ช…, ์ˆ˜์ • ์‹œ๊ฐ„, ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰(grep) ํ™œ์šฉ

๋ฆฌ๋ˆ…์Šค(CentOS 7) ํ™˜๊ฒฝ์—์„œ ์›ํ•˜๋Š” ํŒŒ์ผ์„ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•œ find ๋ช…๋ น์–ด์˜ ํ•„์ˆ˜ ์˜ต์…˜์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๊ฒ€์ƒ‰, ์ตœ๊ทผ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ํƒ์ƒ‰, ๊ทธ๋ฆฌ๊ณ  xargs๋ฅผ ์กฐํ•ฉํ•œ ํŒŒ์ผ ๋‚ด์šฉ ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7 (3.10.0-957.el7.x86_64)
  • Shell: Bash

1. ํŒŒ์ผ๋ช…์œผ๋กœ ๊ฒ€์ƒ‰ (By Name)

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์ž…๋‹ˆ๋‹ค. -name ์˜ต์…˜์€ ์ •ํ™•ํ•œ ์ด๋ฆ„์„, -iname ์˜ต์…˜์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฒ€์ƒ‰

# ์ „์ฒด ๊ฒฝ๋กœ(/)์—์„œ Mem.sh ํŒŒ์ผ ์ฐพ๊ธฐ
find /sw -name "Mem.sh"

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ(.)์—์„œ ์ฐพ๊ธฐ
find . -name "Mem.sh"

๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ ๊ฒ€์ƒ‰ (Insensitive)

ํŒŒ์ผ๋ช…์˜ ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

# Mem.sh, MEM.sh ๋ชจ๋‘ ๊ฒ€์ƒ‰๋จ
find /sw -iname "Mem.sh"
Tip (์—๋Ÿฌ ์ˆจ๊ธฐ๊ธฐ):
๊ฒ€์ƒ‰ ๋„์ค‘ Permission denied ๋ฉ”์‹œ์ง€๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ๋œฌ๋‹ค๋ฉด ๋ช…๋ น์–ด ๋’ค์— 2>/dev/null์„ ๋ถ™์—ฌ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ: find / -name "test" 2>/dev/null

2. ์ˆ˜์ • ์‹œ๊ฐ„์œผ๋กœ ๊ฒ€์ƒ‰ (By Time)

์žฅ์•  ๋ฐœ์ƒ ์‹œ์ ์ด๋‚˜ ๋กœ๊ทธ ๋ถ„์„ ์‹œ, ํŠน์ • ์‹œ๊ฐ„ ๋‚ด์— ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ์ฐพ์„ ๋•Œ -mtime(Modification Time) ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

# ์ตœ๊ทผ 1์ผ(24์‹œ๊ฐ„) ์ด๋‚ด์— ์ˆ˜์ •๋œ .sh ํŒŒ์ผ ๊ฒ€์ƒ‰
find /sw -name "*.sh" -mtime -1

์˜ต์…˜ ์ƒ์„ธ ์„ค๋ช…

  • -mtime -n: ์ตœ๊ทผ n์ผ ์ด๋‚ด์— ๋ณ€๊ฒฝ๋จ (Today)
  • -mtime +n: n์ผ ์ด์ „์— ๋ณ€๊ฒฝ๋จ (Old files)
  • -mtime n: ์ •ํ™•ํžˆ n์ผ ์ „์— ๋ณ€๊ฒฝ๋จ

3. ํŒŒ์ผ ๋‚ด์šฉ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ (With Grep)

find๋กœ ์ฐพ์€ ํŒŒ์ผ๋“ค์˜ ๋‚ด์šฉ(Content)์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ํŒŒ์ดํ”„(|)์™€ xargs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ grep์œผ๋กœ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ ํŒŒ์ดํ”„๋ผ์ธ

[ํŒŒ์ผ ์ฐพ๊ธฐ][๋ชฉ๋ก ์ „๋‹ฌ][๋‚ด์šฉ ๊ฒ€์ƒ‰]์˜ ํ๋ฆ„์ž…๋‹ˆ๋‹ค.

# 1์ผ ์ด๋‚ด ์ˆ˜์ •๋œ sh ํŒŒ์ผ๋“ค ์ค‘์—์„œ "Mem"์ด๋ผ๋Š” ๊ธ€์ž๊ฐ€ ํฌํ•จ๋œ ๋ผ์ธ ์ถœ๋ ฅ
find /sw -name "*.sh" -mtime -1 | xargs grep "Mem"

์‹คํ–‰ ๊ฒฐ๊ณผ ํ•ด์„

/sw/Mem.sh:MEMINFO=`cat /proc/meminfo...`  <-- ํŒŒ์ผ๋ช…:๋‚ด์šฉ
/sw/Mem1.sh: TOTAL=`free | grep ^Mem...`
/sw/Mem1.sh: USED=`free | grep ^Mem...`

grep์ด find๊ฐ€ ์ฐพ์•„๋‚ธ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์”ฉ ์—ด์–ด์„œ "Mem" ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ๋ผ์ธ์„ ํŒŒ์ผ๋ช…๊ณผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.


Next Step:
ํŒŒ์ผ์„ ๋‹จ์ˆœํžˆ ์ฐพ๋Š” ๊ฒƒ์„ ๋„˜์–ด, -exec ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰๋œ ํŒŒ์ผ์˜ ๊ถŒํ•œ์„ ์ผ๊ด„ ๋ณ€๊ฒฝ(chmod)ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ(rm)ํ•˜๋Š” ๋“ฑ์˜ ๊ณ ๊ธ‰ ํ™œ์šฉ๋ฒ•์„ ์ตํ˜€๋ณด์„ธ์š”.

[Linux] ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ์†Œ์œ ๊ถŒ(Owner/Group) ๋ณ€๊ฒฝ: chown ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ(CentOS 7)์—์„œ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์†Œ์œ ์ž(User)์™€ ๊ทธ๋ฃน(Group)์„ ๋ณ€๊ฒฝํ•˜๋Š” chown ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์œ„ ๊ฒฝ๋กœ๊นŒ์ง€ ์ผ๊ด„ ๋ณ€๊ฒฝํ•˜๋Š” -R ์˜ต์…˜๊ณผ ์‹ค๋ฌด ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

๋ฆฌ๋ˆ…์Šค์˜ ๋ชจ๋“  ํŒŒ์ผ์€ ํŠน์ • ์‚ฌ์šฉ์ž์™€ ๊ทธ๋ฃน์— ์†ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต root ๊ถŒํ•œ์œผ๋กœ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๋ณต์‚ฌํ•œ ํŒŒ์ผ์€ ์†Œ์œ ๊ถŒ์ด root๋กœ ๋˜์–ด ์žˆ์–ด, ์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ •(์˜ˆ: wasadm, tomcat ๋“ฑ)์—์„œ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•  ๋•Œ "Permission denied" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ chown์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์œ ๊ถŒ์„ ์ ์ ˆํ•œ ๊ณ„์ •์œผ๋กœ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7 (3.10.0-957.el7.x86_64)
  • User: root (๋ช…๋ น์–ด ์‹คํ–‰ ์ฃผ์ฒด), wasadm (๋Œ€์ƒ ๊ณ„์ •)

1. ๊ธฐ๋ณธ ๋ฌธ๋ฒ• (Syntax)

chown(Change Owner) ๋ช…๋ น์–ด์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ(Superuser) ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

# ์†Œ์œ ์ž๋งŒ ๋ณ€๊ฒฝ
chown [USER] [FILE]

# ์†Œ์œ ์ž์™€ ๊ทธ๋ฃน ๋™์‹œ ๋ณ€๊ฒฝ (๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ)
chown [USER]:[GROUP] [FILE]

# ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ์žฌ๊ท€์  ๋ณ€๊ฒฝ
chown -R [USER]:[GROUP] [DIRECTORY]

2. ์‹ค๋ฌด ์‚ฌ์šฉ ์˜ˆ์‹œ (Examples)

์ œ๊ณตํ•ด์ฃผ์‹  ๋กœ๊ทธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒํ™ฉ๋ณ„ ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

Step 1: ์ „์ฒด ์ดˆ๊ธฐํ™” (root ๊ถŒํ•œ์œผ๋กœ ์„ค์ •)

-R ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ(*)์˜ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํด๋”๋ฅผ root:root ์†Œ์œ ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

[root@localhost sw]# chown -R root:root *

# ํ™•์ธ
[root@localhost sw]# ls -alrt
drwxrwxrwx.  2 root root   6 Feb  5 01:49 img
drwx------.  2 root root   6 Feb  5 01:49 was
...
์ฃผ์˜ (Warning):
chown -R์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ(/)๋‚˜ ์‹œ์Šคํ…œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ๋ถ€ํŒ…์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์‹คํ–‰ ์ „ ํ˜„์žฌ ๊ฒฝ๋กœ(pwd)๋ฅผ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Step 2: ํŠน์ • ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์ด๊ด€

WAS๋‚˜ ์›น ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•ด ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ(img, was)์™€ ์Šคํฌ๋ฆฝํŠธ(Mem.sh)์˜ ์†Œ์œ ๊ถŒ์„ wasadm ๊ณ„์ •์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

# ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํŒŒ์ผ ์†Œ์œ ๊ถŒ ๋ณ€๊ฒฝ (wasadm ๊ณ„์ •, wasadm ๊ทธ๋ฃน)
[root@localhost sw]# chown wasadm:wasadm img
[root@localhost sw]# chown wasadm:wasadm was
[root@localhost sw]# chown wasadm:wasadm Mem.sh

Step 3: ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ ๊ฒ€์ฆ (Verification)

ls -l ๋ช…๋ น์–ด๋กœ ๋ณ€๊ฒฝ๋œ ์†Œ์œ ๊ถŒ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 3๋ฒˆ์งธ ์ปฌ๋Ÿผ(Owner)๊ณผ 4๋ฒˆ์งธ ์ปฌ๋Ÿผ(Group)์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[root@localhost sw]# ls -alrt
total 8
# ๋ณ€๊ฒฝ๋œ ํ•ญ๋ชฉ (wasadm)
drwxrwxrwx.  2 wasadm wasadm   6 Feb  5 01:49 img
drwx------.  2 wasadm wasadm   6 Feb  5 01:49 was
-rwxr-xr-x.  1 wasadm wasadm 428 Feb  8 01:16 Mem.sh

# ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ (root ์œ ์ง€)
drwx------.  2 root   root     6 Feb  5 01:49 web
drwxr-xr-x.  2 root   root     6 Feb  5 01:49 bin
...

Next Step:
์†Œ์œ ๊ถŒ ๋ณ€๊ฒฝ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์— ๋Œ€ํ•ด ์–ด๋–ค ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ถŒํ•œ(Permission) ์„ค์ •(chmod) ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[Linux] CentOS 7 ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ๋ถ„์„ ์™„๋ฒฝ ๊ฐ€์ด๋“œ: free ๋ช…๋ น์–ด ๋ณ€ํ™”์™€ ์‹ค์งˆ ์‚ฌ์šฉ๋Ÿ‰ ๊ณ„์‚ฐ

CentOS 7(RHEL 7)๋ถ€ํ„ฐ free ๋ช…๋ น์–ด์˜ ์ถœ๋ ฅ ํ˜•์‹์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ buffers/cache ๋ผ์ธ์ด ์‚ฌ๋ผ์ง€๊ณ  available ์ปฌ๋Ÿผ์ด ์ถ”๊ฐ€๋œ ๋ฐฐ๊ฒฝ์„ ์ดํ•ดํ•˜๊ณ , ์ •ํ™•ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ์ง€์‹: CentOS 6 vs 7 ์ฐจ์ด์ 

๋ฆฌ๋ˆ…์Šค๋Š” ๋‚จ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์บ์‹œ(Cache)๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋†’์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 'Used'๊ฐ€ ๋†’๋‹ค๊ณ  ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

  • CentOS 6 ์ดํ•˜: -/+ buffers/cache ํ–‰์„ ํ†ตํ•ด ์‹ค์งˆ ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • CentOS 7 ์ด์ƒ: ์ปค๋„์ด ์ง์ ‘ ๊ณ„์‚ฐํ•œ available ์ปฌ๋Ÿผ์„ ํ†ตํ•ด "์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ"๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7 (Kernel 3.10.0-957.el7.x86_64)

1. ๋ฉ”๋ชจ๋ฆฌ ํ™•์ธ ๋ช…๋ น์–ด (free)

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ™•์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. -m ์˜ต์…˜์€ Megabyte ๋‹จ์œ„๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

[root@localhost sw]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7803         892        4686         263        2224        6277
Swap:          8064           0        8064

์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ƒ์„ธ ๋ณด๊ธฐ

-w(wide) ์˜ต์…˜์„ ์ฃผ๋ฉด buffer์™€ cache๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ๊ณ , -s(seconds) ์˜ต์…˜์œผ๋กœ ๋ฐ˜๋ณต ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

# 1์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ buffer/cache๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ถœ๋ ฅ
free -mw -s 1

2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ๊ณ„์‚ฐ ๊ณต์‹ (Calculation)

๋‹จ์ˆœํžˆ used / total๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ ์‚ฌ์šฉ๋Ÿ‰์— ํฌํ•จ๋˜์–ด ์ˆ˜์น˜๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ๋†’๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋ชฉ์ ์— ๋”ฐ๋ผ ๊ณ„์‚ฐ ๋ฐฉ์‹์„ ๋‹ฌ๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ A: OS ๊ด€์ ์˜ ์‚ฌ์šฉ๋ฅ  (์บ์‹œ ํฌํ•จ)

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ํ• ๋‹น๋˜์–ด ์žˆ๋Š”์ง€(๋ฐ˜๋‚ฉ๋˜์ง€ ์•Š์€ ์ƒํƒœ) ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

$$ Usage(\%) = \frac{used}{total} \times 100 $$

๊ณต์‹ B: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€์ ์˜ ์‹ค์งˆ ์‚ฌ์šฉ๋ฅ  (๊ถŒ์žฅ)

"์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ๊ฐ€?"๋ฅผ ํŒ๋‹จํ•  ๋•Œ๋Š” available ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$$ Usage(\%) = \frac{total - available}{total} \times 100 $$

Tip: sar -r 1 ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ๋„ %memused(๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ )๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช… (Parameters)

CentOS 7 free ๋ช…๋ น์–ด์˜ ๊ฐ ์ปฌ๋Ÿผ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช…
total ์„ค์น˜๋œ ์ „์ฒด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ
used ํ˜„์žฌ ํ• ๋‹น๋˜์–ด ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ (total - free - buff/cache)
free ์•„๋ฌด ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์™„์ „ํ•œ ์œ ํœด ๋ฉ”๋ชจ๋ฆฌ
shared tmpfs(๋žจ๋””์Šคํฌ) ๋“ฑ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ
buff/cache ์ปค๋„ ๋ฒ„ํผ ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ ์บ์‹œ (ํ•„์š”์‹œ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ ๊ฐ€๋Šฅ)
available (ํ•ต์‹ฌ) ์Šค์™€ํ•‘(Swapping) ์—†์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์— ์ฆ‰์‹œ ํ• ๋‹น ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ถ”์ •์น˜

Next Step:
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ๋†’๋‹ค๋ฉด(available ๋ถ€์กฑ), top ๋ช…๋ น์–ด๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Leak)๊ฐ€ ์˜์‹ฌ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ๊ฑฐ๋‚˜, echo 3 > /proc/sys/vm/drop_caches ๋ช…๋ น์–ด๋กœ ์บ์‹œ๋ฅผ ๊ฐ•์ œ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๊ฐ€์šฉ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒ€ํ† ํ•ด ๋ณด์„ธ์š”.

[Linux] Java ์‹ค์ œ ์„ค์น˜ ๊ฒฝ๋กœ ํ™•์ธ ๋ฐฉ๋ฒ•: which vs readlink ์ฐจ์ด์  ๋ฐ JAVA_HOME ์„ค์ •

๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ java ๋ช…๋ น์–ด์˜ ์‹ค์ œ ์„ค์น˜ ์œ„์น˜(Absolute Path)๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœ ๊ฒฝ๋กœ ํ™•์ธ์šฉ์ธ which์™€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์˜ ์›๋ณธ์„ ์ฐพ์•„์ฃผ๋Š” readlink -f์˜ ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด JAVA_HOME์„ ์„ค์ •ํ•˜๋Š” ํŒ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

๋ฆฌ๋ˆ…์Šค(ํŠนํžˆ CentOS/RHEL ๊ณ„์—ด)๋Š” alternatives ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— /usr/bin/java๋Š” ์‹ค์ œ ์‹คํ–‰ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ, ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ(Symbolic Link)๋กœ ์—ฐ๊ฒฐ๋œ ๊ป๋ฐ๊ธฐ์ผ ํ™•๋ฅ ์ด ๋†’์Šต๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7 (3.10.0-957.el7.x86_64)
  • Package: OpenJDK 1.8

1. ๋ช…๋ น์–ด ๊ฒฝ๋กœ ํ™•์ธ (which)

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ $PATH์— ๋“ฑ๋ก๋œ ๊ฒฝ๋กœ ์ค‘ ์–ด๋””์— ์žˆ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

[wasadm@localhost ~]$ which java
/usr/bin/java
ํ•œ๊ณ„์ : ์œ„ ๊ฒฐ๊ณผ์ธ /usr/bin/java๋Š” ์‹ค์ œ ํŒŒ์ผ์ด ์•„๋‹Œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์„œ, ์ด ๊ฒฝ๋กœ๋ฅผ JAVA_HOME์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

2. ์›๋ณธ ๊ฒฝ๋กœ ์ถ”์  (readlink -f)

์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์•„๋ฌด๋ฆฌ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ผฌ์—ฌ ์žˆ์–ด๋„, ์ตœ์ข… ์›๋ณธ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ํ•œ ๋ฒˆ์— ์ฐพ์•„์ฃผ๋Š” ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

# ๊ตฌ๋ฌธ: readlink -f [์‹ฌ๋ณผ๋ฆญ_๋งํฌ_๊ฒฝ๋กœ]
[wasadm@localhost ~]$ readlink -f /usr/bin/java

# ์ถœ๋ ฅ ๊ฒฐ๊ณผ (์‹ค์ œ ์„ค์น˜ ์œ„์น˜)
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/bin/java

์œ„ ๊ฒฐ๊ณผ์—์„œ ๋งˆ์ง€๋ง‰ /bin/java๋ฅผ ์ œ์™ธํ•œ ์•ž๋ถ€๋ถ„์ด ๋ฐ”๋กœ JAVA_HOME์ด ๋ฉ๋‹ˆ๋‹ค.


3. ๋งํฌ ๊ตฌ์กฐ ๋‹จ๊ณ„๋ณ„ ํ™•์ธ (ls -l)

readlink๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ls -l ๋ช…๋ น์–ด๋กœ ํ•œ ๋‹จ๊ณ„์”ฉ ์ถ”์ ํ•ด๋ณด๋ฉด ๋ฆฌ๋ˆ…์Šค์˜ alternatives ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Step 1: ์‹คํ–‰ ํŒŒ์ผ ํ™•์ธ

[wasadm@localhost ~]$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Feb  5 01:36 /usr/bin/java -> /etc/alternatives/java

/usr/bin/java๋Š” /etc/alternatives/java๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Step 2: alternatives ํ™•์ธ

[wasadm@localhost ~]$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 71 Feb  5 01:36 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/bin/java

/etc/alternatives/java๊ฐ€ ๋น„๋กœ์†Œ ์‹ค์ œ JDK๊ฐ€ ์„ค์น˜๋œ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. readlink -f๋Š” ์ด ๊ณผ์ •์„ ํ•œ ๋ฒˆ์— ์ˆ˜ํ–‰ํ•ด ์ค๋‹ˆ๋‹ค.


4. ํ™œ์šฉ: JAVA_HOME ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

์œ„์—์„œ ์ฐพ์€ ๊ฒฝ๋กœ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. (/etc/profile ๋˜๋Š” ~/.bash_profile)

# ์›๋ณธ ๊ฒฝ๋กœ: /usr/lib/jvm/java-1.8.0-.../jre/bin/java
# bin/java ์•ž๋ถ€๋ถ„๊นŒ์ง€๋งŒ ๋ณต์‚ฌ

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre
export PATH=$JAVA_HOME/bin:$PATH

Next Step:
๋งŒ์•ฝ ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ Java๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด ๊ธฐ๋ณธ ์‹คํ–‰ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, alternatives --config java ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ์Šค์œ„์นญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Linux] ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ๊ด€๋ฆฌ ์™„๋ฒฝ ๊ฐ€์ด๋“œ: chmod ๋ช…๋ น์–ด์™€ 755, 777์˜ ์˜๋ฏธ

๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ(CentOS 7)์—์„œ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œ์–ดํ•˜๋Š” chmod ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž ๋ชจ๋“œ(755, 644)์™€ ๋ฌธ์ž์—ด ๋ชจ๋“œ(u+x)์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ , -R ์˜ต์…˜์„ ํ†ตํ•ด ํ•˜์œ„ ๊ฒฝ๋กœ๊นŒ์ง€ ์ผ๊ด„ ์ ์šฉํ•˜๋Š” ์‹ค๋ฌด ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ์ง€์‹: ๊ถŒํ•œ์˜ ๊ตฌ์กฐ (Permission Structure)

๋ฆฌ๋ˆ…์Šค์˜ ํŒŒ์ผ ๊ถŒํ•œ์€ ์†Œ์œ ์ž(User), ๊ทธ๋ฃน(Group), ๊ธฐํƒ€(Other) ์„ธ ๊ฐ€์ง€ ๋Œ€์ƒ์— ๋Œ€ํ•ด ์ฝ๊ธฐ(r), ์“ฐ๊ธฐ(w), ์‹คํ–‰(x) ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๊ถŒํ•œ ํ™•์ธ (ls -l)

ls -l
# ๊ฒฐ๊ณผ ์˜ˆ์‹œ: drwxr-xr-x (755)
# d(๋””๋ ‰ํ† ๋ฆฌ) | rwx(์†Œ์œ ์ž) | r-x(๊ทธ๋ฃน) | r-x(๊ธฐํƒ€)

1. ๊ถŒํ•œ ๋ณ€๊ฒฝ (chmod)

chmod(Change Mode) ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ƒ์„ฑ๋œ ํŒŒ์ผ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช…

  • -R (--recursive): ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ(์ผ๊ด„) ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. (๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ)

์‹ค๋ฌด ์‚ฌ์šฉ ์˜ˆ์‹œ

# 1. WAS ๋””๋ ‰ํ† ๋ฆฌ: ์†Œ์œ ์ž๋งŒ ๋ชจ๋“  ๊ถŒํ•œ(7), ๋‚˜๋จธ์ง€๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€(0)
chmod -R 700 ./was

# 2. ์›น ๋ฃจํŠธ ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ: ์†Œ์œ ์ž(7), ๊ทธ๋ฃน/๊ธฐํƒ€๋Š” ์ฝ๊ธฐ/์‹คํ–‰๋งŒ(5) - ์ผ๋ฐ˜์ ์ธ ์„ค์ •
chmod -R 755 ./web
chmod -R 755 ./bin

# 3. ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ํด๋”: ๋ˆ„๊ตฌ๋‚˜ ์“ฐ๊ณ  ์ฝ๊ธฐ ๊ฐ€๋Šฅ (๋ณด์•ˆ ์ฃผ์˜!)
chmod -R 777 ./img

2. ๊ถŒํ•œ ์„ค์ • ๋ฐฉ์‹ A: ์ˆซ์ž ๋ชจ๋“œ (Octal Mode)

๊ฐ€์žฅ ์ง๊ด€์ ์ด๊ณ  ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ถŒํ•œ์— ํ• ๋‹น๋œ ์ ์ˆ˜(4, 2, 1)๋ฅผ ๋”ํ•ด์„œ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ (Permission) ๊ธฐํ˜ธ (Symbol) ์ˆซ์ž ๊ฐ’ (Octal)
Read (์ฝ๊ธฐ) r 4
Write (์“ฐ๊ธฐ) w 2
Execute (์‹คํ–‰) x 1

์กฐํ•ฉ ์˜ˆ์‹œ

  • 7 (rwx): 4 + 2 + 1 (๋ชจ๋“  ๊ถŒํ•œ)
  • 6 (rw-): 4 + 2 (์ฝ๊ธฐ/์“ฐ๊ธฐ - ์ผ๋ฐ˜ ํŒŒ์ผ)
  • 5 (r-x): 4 + 1 (์ฝ๊ธฐ/์‹คํ–‰ - ์‹คํ–‰ ํŒŒ์ผ, ๋””๋ ‰ํ† ๋ฆฌ)
  • 0 (---): ๊ถŒํ•œ ์—†์Œ

3. ๊ถŒํ•œ ์„ค์ • ๋ฐฉ์‹ B: ๋ฌธ์ž์—ด ๋ชจ๋“œ (Symbolic Mode)

ํŠน์ • ๋Œ€์ƒ์˜ ๊ถŒํ•œ๋งŒ ์ฝ• ์ง‘์–ด์„œ ์ถ”๊ฐ€(+)ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ(-)ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ (Who) ์—ฐ์‚ฐ์ž (Op) ๊ถŒํ•œ (Permission)
u: User (์†Œ์œ ์ž)
g: Group (๊ทธ๋ฃน)
o: Other (๊ธฐํƒ€)
a: All (์ „์ฒด, ugo)
+: ์ถ”๊ฐ€
-: ์ œ๊ฑฐ
=: ์ง€์ •
r: ์ฝ๊ธฐ
w: ์“ฐ๊ธฐ
x: ์‹คํ–‰

์‚ฌ์šฉ ์˜ˆ์‹œ

# run.sh ํŒŒ์ผ์— ์‹คํ–‰(x) ๊ถŒํ•œ ์ถ”๊ฐ€ (๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ)
chmod +x run.sh

# ๊ทธ๋ฃน(g)์—๊ฒŒ ์“ฐ๊ธฐ(w) ๊ถŒํ•œ ์ œ๊ฑฐ
chmod g-w file.txt

# ๊ธฐํƒ€ ์‚ฌ์šฉ์ž(o)์—๊ฒŒ ์ฝ๊ธฐ(r) ๊ถŒํ•œ๋งŒ ํ• ๋‹น
chmod o=r file.txt

Next Step:
ํŒŒ์ผ์˜ ๊ถŒํ•œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†Œ์œ ๊ถŒ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ๋Š” chown(Change Owner) ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. chown user:group filename ํ˜•์‹์„ ํ•จ๊ป˜ ์ตํ˜€๋‘์„ธ์š”.

[JBoss EAP 7] Datasource ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” ๊ฐ€์ด๋“œ: Picketbox Security Domain ์„ค์ •

๋ณด์•ˆ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์ค€์ˆ˜๋ฅผ ์œ„ํ•ด JBoss EAP 7์˜ standalone.xml ๋˜๋Š” domain.xml ํŒŒ์ผ ๋‚ด์— ์ €์žฅ๋˜๋Š” DB ํŒจ์Šค์›Œ๋“œ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. org.picketbox ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ณ , Security Domain์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์†Œ์Šค์™€ ์—ฐ๋™ํ•ฉ๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ๋ฐ ์ค€๋น„ (Context)

JBoss ์„ค์ • ํŒŒ์ผ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ‰๋ฌธ์œผ๋กœ ์ €์žฅํ•˜๋ฉด ๋ณด์•ˆ ๊ฐ์‚ฌ ์‹œ ์ง€์  ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด JBoss๋Š” Security Domain์„ ํ†ตํ•ด ์ธ์ฆ ๊ณผ์ •์„ ์œ„์ž„ํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • WAS: JBoss EAP 7.2
  • JDK: 1.8

1. ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฌธ์ž์—ด ์ƒ์„ฑ (Encryption)

๊ฐ€์žฅ ๋จผ์ € ์‹ค์ œ DB ํŒจ์Šค์›Œ๋“œ๋ฅผ ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JBoss ๋‚ด๋ถ€ ๋ชจ๋“ˆ์ธ picketbox๋ฅผ Java๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธํ™” ์Šคํฌ๋ฆฝํŠธ (create_encrypt_pw.sh)

JBoss ํŒจ์น˜(CP)๊ฐ€ ์ ์šฉ๋˜๋ฉด .overlays ๋””๋ ‰ํ† ๋ฆฌ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ํŒจ์น˜ ์—ฌ๋ถ€๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ์ ์ ˆํ•œ jar ํŒŒ์ผ์„ ์ฐพ์•„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

#!/bin/sh

# 1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ • ํ•„์ˆ˜)
export JAVA_HOME="/SW/was/java1.8"
export PATH="$JAVA_HOME/bin:$PATH"
JBOSS_HOME="/SW/was/JBoss7.2"

# 2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ ํƒ์ƒ‰ (Overlay ์ง€์›)
OVERLAY_DIRECTORY="$JBOSS_HOME/modules/system/layers/base/.overlays"
SEARCH_DIRECTORY="$JBOSS_HOME/modules/system/layers/base/org/picketbox/main"

if [ -d "$OVERLAY_DIRECTORY" ]; then
    # ์ตœ์‹  ํŒจ์น˜ ๋””๋ ‰ํ† ๋ฆฌ ํ™•์ธ
    PATCH_SUBDIRECTORY=$(ls -dt $OVERLAY_DIRECTORY/* | grep "CP" | head -n 1)
    if [ -n "$PATCH_SUBDIRECTORY" ]; then
        echo "Info: Patch directory detected: $PATCH_SUBDIRECTORY"
        SEARCH_DIRECTORY="$PATCH_SUBDIRECTORY/org/picketbox/main"
    fi
fi

# 3. Classpath ์„ค์ •
export CLASSPATH=$(find "$SEARCH_DIRECTORY" -name "*.jar" -print | tr '\n' ':')$CLASSPATH

# 4. ์•”ํ˜ธํ™” ์‹คํ–‰
echo ""
read -p "Enter Database Password : " PASSWORD
echo ""
echo "####################################################"
java org.picketbox.datasource.security.SecureIdentityLoginModule "$PASSWORD"
echo "####################################################"
echo ""

์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

Encoded password: 9fdd42c2a7390d3

์ถœ๋ ฅ๋œ Encoded password ๊ฐ’์„ ๋ณต์‚ฌํ•ด ๋‘ก๋‹ˆ๋‹ค.


2. Security Domain ์„ค์ • (standalone.xml)

์ƒ์„ฑํ•œ ์•”ํ˜ธํ™” ํŒจ์Šค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณด์•ˆ ๋„๋ฉ”์ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. security ์„œ๋ธŒ์‹œ์Šคํ…œ ๋‚ด์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ๋‚ด์šฉ

<subsystem xmlns="urn:jboss:domain:security:2.0">
    <security-domains>
        
        <security-domain name="encryptedSecurityDB" cache-type="default">
            <authentication>
                <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
                    <module-option name="username" value="sa"/>
                    <module-option name="password" value="9fdd42c2a7390d3"/> <!-- ์•”ํ˜ธํ™”๋œ ๊ฐ’ -->
                    <module-option name="managedConnectionFactoryName" value="jboss.jca:service=LocalTxCM"/>
                </login-module>
            </authentication>
        </security-domain>
        
    </security-domains>
</subsystem>
์˜ต์…˜ ์„ค๋ช…:
  • username: DB ์ ‘์† ๊ณ„์ • ID (ํ‰๋ฌธ)
  • password: ์œ„์—์„œ ์ƒ์„ฑํ•œ ์•”ํ˜ธํ™”๋œ ํŒจ์Šค์›Œ๋“œ
  • managedConnectionFactoryName: jboss.jca:service=LocalTxCM (๊ณ ์ •๊ฐ’ ์‚ฌ์šฉ)

3. Datasource ์—ฐ๋™ ์„ค์ •

์ด์ œ ๋ฐ์ดํ„ฐ์†Œ์Šค๊ฐ€ ํ‰๋ฌธ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋Œ€์‹  ์œ„์—์„œ ๋งŒ๋“  Security Domain์„ ๋ฐ”๋ผ๋ณด๋„๋ก ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ • ์ „ (Before)

<datasource ...>
    ...
    <security>
        <user-name>sa</user-name>
        <password>admin1234</password>
    </security>
</datasource>

์ˆ˜์ • ํ›„ (After)

user-name๊ณผ password ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜๊ณ  security-domain ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
    <driver>h2</driver>
    
    <security>
        <security-domain>encryptedSecurityDB</security-domain>
    </security>
</datasource>

4. ๊ฒ€์ฆ (Verification)

  1. ์„ค์ • ์ €์žฅ ํ›„ JBoss ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™(Reload)ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ด€๋ฆฌ ์ฝ˜์†” ๋˜๋Š” CLI์—์„œ Test Connection์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์—ฐ๊ฒฐ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ์—ฐ๊ฒฐ ์„ฑ๊ณต ์‹œ, ์„ค์ • ํŒŒ์ผ์— ๋น„๋ฐ€๋ฒˆํ˜ธ ํ‰๋ฌธ์ด ๋‚จ์•„์žˆ์ง€ ์•Š์€์ง€ ์žฌํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Next Step:
๋งŒ์•ฝ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ‚ค์Šคํ† ์–ด ํŒจ์Šค์›Œ๋“œ ๋“ฑ JBoss ์„ค์ • ์ „๋ฐ˜์˜ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•ด์•ผ ํ•œ๋‹ค๋ฉด, Vault(๋ณผํŠธ) ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€๋กœ ๊ฒ€ํ† ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

[JBoss EAP 7] Windows ํ™˜๊ฒฝ ๋„๋ฉ”์ธ ๋ชจ๋“œ(Domain Mode) ๊ตฌ์ถ•: Master/Slave ๊ตฌ์„ฑ ๋ฐ CLI ์ œ์–ด

JBoss EAP 7.2๋ฅผ ๋„๋ฉ”์ธ ๋ชจ๋“œ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. Windows Server ํ™˜๊ฒฝ์—์„œ ๋งˆ์Šคํ„ฐ(Master)์™€ ์Šฌ๋ ˆ์ด๋ธŒ(Slave) ํ˜ธ์ŠคํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ , add-user๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ์ธ์ฆ(Secret Value)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •, ๊ทธ๋ฆฌ๊ณ  CLI๋ฅผ ์ด์šฉํ•œ ์ œ์–ด ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

๋„๋ฉ”์ธ ๋ชจ๋“œ๋Š” Domain Controller(Master)๊ฐ€ ์ „์ฒด ์ •์ฑ…์„ ๊ด€๋ฆฌํ•˜๊ณ , Host Controller(Slave)๋“ค์ด ์‹ค์ œ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

  • Master: ์„ค์ • ๋ฐ ๋ฐฐํฌ ์ค‘์•™ ๊ด€๋ฆฌ (์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ๋„์šฐ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ)
  • Slave: ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ๋™๋˜๋Š” ์„œ๋ฒ„ ๊ทธ๋ฃน ๊ด€๋ฆฌ

Test Environment

  • OS: Windows NT (10/Server)
  • Version: JBoss EAP 7.2
  • Topology: One-Box ๊ตฌ์„ฑ (ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— Master/Slave ๋””๋ ‰ํ† ๋ฆฌ ๋ถ„๋ฆฌ)

1. ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ ๋ฐ ์ธ์ฆ ํ† ํฐ ํ™•๋ณด

๋„๋ฉ”์ธ ์ปจํŠธ๋กค๋Ÿฌ(Master)์™€ ํ˜ธ์ŠคํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Slave) ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” ๋ณด์•ˆ ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. add-user.bat๋ฅผ ํ†ตํ•ด ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ณ  Secret Value๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ์ ˆ์ฐจ

F:\app\Redhat\JBoss7.2\bin> add-user.bat

# 1. ๊ด€๋ฆฌ์ž ๊ณ„์ • ์„ ํƒ
What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a): a

# 2. ๊ณ„์ • ์ •๋ณด ์ž…๋ ฅ (Username: admin / Password ์„ค์ •)
# ... (์ค‘๋žต) ...

# 3. ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์—ฐ๊ฒฐ ์Šน์ธ (์ค‘์š”!)
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master ...
yes/no? yes

# 4. ๊ฒฐ๊ณผ๊ฐ’ ๋ณต์‚ฌ
To represent the user add the following to the server-identities definition
Check Point: ๋งˆ์ง€๋ง‰์— ์ถœ๋ ฅ๋œ <secret value="..." /> ๋ฌธ์ž์—ด์„ ๋ฐ˜๋“œ์‹œ ๋ณต์‚ฌํ•ด ๋‘์‹ญ์‹œ์˜ค. Slave ์„ค์ • ์‹œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2. ์„ค์ • ํŒŒ์ผ ์ˆ˜์ • (Configuration)

Master์™€ Slave ๊ฐ๊ฐ์˜ host.xml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ์—ญํ• ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

1) Master ์„ค์ • (host-master.xml)

์ž์‹ ์ด ๋„๋ฉ”์ธ ์ปจํŠธ๋กค๋Ÿฌ์ž„์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

<host xmlns="urn:jboss:domain:8.0" name="test-master">
    
    <domain-controller>
       <local/>
    </domain-controller>
    ...
</host>

2) Slave ์„ค์ • (host-slave.xml)

Master์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ธ์ฆ ์ •๋ณด์™€ ๊ณ ์œ ํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ์žฅ๋น„์—์„œ ๋„์šธ ๊ฒฝ์šฐ ํฌํŠธ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๊ด€๋ฆฌ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<host xmlns="urn:jboss:domain:8.0" name="slave-node01">

    <server-identities>
        <secret value="YWRtaW4xMiMk" />
    </server-identities>

    <domain-controller>
        <remote security-realm="ManagementRealm">
            <discovery-options>
                <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9990}"/>
            </discovery-options>
        </remote>
    </domain-controller>

    <management-interfaces>
        <http-interface security-realm="ManagementRealm">
            <http-upgrade enabled="true"/>
            <socket interface="management" port="${jboss.management.http.port:19990}"/>
        </http-interface>
    </management-interfaces>
</host>

3. ๋„๋ฉ”์ธ ๊ธฐ๋™ (Start Scripts)

๋””๋ ‰ํ† ๋ฆฌ(domain/base/dir)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ํ•˜๋Š” ํ™˜๊ฒฝ์„ ๊ฐ€์ •ํ•œ ๊ธฐ๋™ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

Master ๊ธฐ๋™

F:\app\Redhat\JBoss7.2\bin\domain.bat ^
 -Djboss.domain.base.dir="F:\app\Redhat\JBoss7.2\master" ^
 -b=192.168.0.6 ^
 -bmanagement=192.168.0.6 ^
 --host-config=host-master.xml

Slave ๊ธฐ๋™ (Node 01 & 02)

Slave๋Š” --master-address ์˜ต์…˜์œผ๋กœ Master๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉฐ, -Djboss.socket.binding.port-offset์œผ๋กœ ์„œ๋น„์Šค ํฌํŠธ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

:: Slave Node 01 (Port Offset: 1000)
F:\app\Redhat\JBoss7.2\bin\domain.bat ^
 -Djboss.domain.base.dir="F:\app\Redhat\JBoss7.2\node01" ^
 -b=192.168.0.6 ^
 -bmanagement=192.168.0.6 ^
 --host-config=host-slave.xml ^
 --master-port=9990 ^
 --master-address=192.168.0.6 ^
 -Djboss.socket.binding.port-offset=1000

:: Slave Node 02 (Port Offset: 2000)
F:\app\Redhat\JBoss7.2\bin\domain.bat ^
 -Djboss.domain.base.dir="F:\app\Redhat\JBoss7.2\node02" ^
 -b=192.168.0.6 ^
 -bmanagement=192.168.0.6 ^
 --host-config=host-slave.xml ^
 --master-port=9990 ^
 --master-address=192.168.0.6 ^
 -Djboss.socket.binding.port-offset=2000

4. CLI๋ฅผ ์ด์šฉํ•œ ์„œ๋ฒ„ ์ œ์–ด (Management)

๋„๋ฉ”์ธ ๋ชจ๋“œ์—์„œ๋Š” jboss-cli๋ฅผ ํ†ตํ•ด ํŠน์ • ํ˜ธ์ŠคํŠธ์˜ ํŠน์ • ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋งŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ๋ฌธ

/host=[HOST_NAME]/server-config=[SERVER_NAME]:[start|stop|restart]

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

:: ์ ‘์† (Master Controller IP๋กœ ์ ‘์†)
F:\app\Redhat\JBoss7.2\bin> jboss-cli.bat --connect controller=192.168.0.6:9990

:: ํŠน์ • ์„œ๋ฒ„(test01) ์ •์ง€
[domain@192.168.0.6:9990 /] /host=slave-node01/server-config=test01:stop
{
    "outcome" => "success",
    "result" => "STOPPING"
}

:: ํŠน์ • ์„œ๋ฒ„(test01) ๊ธฐ๋™
[domain@192.168.0.6:9990 /] /host=slave-node01/server-config=test01:start
{
    "outcome" => "success",
    "result" => "STARTING"
}

Next Step:
๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ๊ด€๋ฆฌ ์ฝ˜์†”(http://192.168.0.6:9990)์— ์ ‘์†ํ•˜์—ฌ Runtime ํƒญ์—์„œ Topology๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ธ์‹๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

[JBoss EAP 7] MS SQL Server Non-XA ๋ฐ์ดํ„ฐ์†Œ์Šค ์—ฐ๊ฒฐ ์˜ค๋ฅ˜: connection-url ๋ฌด์‹œ ํ˜„์ƒ ํ•ด๊ฒฐ

JBoss EAP 7์—์„œ MS SQL Server์šฉ Non-XA Datasource๋ฅผ ์„ค์ •ํ•  ๋•Œ, <datasource-class> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด <connection-url> ์„ค์ •์ด ๋ฌด์‹œ๋˜์–ด "Connection refused" ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ์ง€ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1. ๋ฌธ์ œ ํ˜„์ƒ (Issue)

MS SQL Server์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ–ˆ์œผ๋‚˜, ์•„๋ž˜์™€ ๊ฐ™์€ Connection refused ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์—๋Ÿฌ ๋กœ๊ทธ

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 
The TCP/IP connection to the host localhost, port 1433 has failed. 
Error: "Connection refused. Verify the connection properties. ... Make sure that TCP connections to the port are not blocked by a firewall."

๋ฐฉํ™”๋ฒฝ์ด๋‚˜ DB ์„œ๋ฒ„ ์ƒํƒœ๋Š” ์ •์ƒ์ด์ง€๋งŒ, JBoss๊ฐ€ localhost:1433(๊ธฐ๋ณธ๊ฐ’)์œผ๋กœ๋งŒ ์ ‘์†์„ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ URL ์ •๋ณด๋ฅผ ์ „ํ˜€ ์ฝ์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.


2. ์›์ธ ๋ถ„์„ (Root Cause)

์ด ๋ฌธ์ œ๋Š” JBoss์˜ ๋ฐ์ดํ„ฐ์†Œ์Šค ์„ค์ • ์šฐ์„ ์ˆœ์œ„ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • Non-XA ํ™˜๊ฒฝ์˜ ํŠน์„ฑ: JDBC 4 ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ผ๋ฐ˜์ ์œผ๋กœ java.sql.Driver ๋ฉ”์ปค๋‹ˆ์ฆ˜(URL ๋ฐฉ์‹)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ถฉ๋Œ ๋ฐœ์ƒ: ์„ค์ • ํŒŒ์ผ(standalone.xml)์— <datasource-class>๊ฐ€ ๋ช…์‹œ๋˜๋ฉด, JBoss๋Š” ์ด๋ฅผ ์šฐ์„ ์‹œํ•˜์—ฌ javax.sql.DataSource ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ: ์ด ๊ณผ์ •์—์„œ <connection-url> ์†์„ฑ์€ ๋ฌด์‹œ(Ignored)๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ JDBC URL ์ •๋ณด๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์•„ ์—ฐ๊ฒฐ์— ์‹คํŒจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

3. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (Resolution)

Non-XA ๋ฐ์ดํ„ฐ์†Œ์Šค ์„ค์ •์—์„œ๋Š” datasource-class๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , driver-class์™€ connection-url ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ์ˆ˜์ • (standalone.xml)

<datasource-class> ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ๋ผ์ธ์„ ์‚ญ์ œํ•˜์‹ญ์‹œ์˜ค.

<datasource jndi-name="java:/mssql" pool-name="mssqljdbc" statistics-enabled="true">
    
    <connection-url>jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ucpost</connection-url>
    <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
    
    <driver>sqlserver</driver>
    ...
</datasource>

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

  1. ์„ค์ • ํŒŒ์ผ ์ €์žฅ ํ›„ JBoss๋ฅผ ์žฌ๊ธฐ๋™(Reload)ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ด€๋ฆฌ ์ฝ˜์†” ๋˜๋Š” CLI์—์„œ ๋ฐ์ดํ„ฐ์†Œ์Šค ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ(Test Connection)๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ •์ƒ์ ์œผ๋กœ Success ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
Tip: ๋งŒ์•ฝ XA Datasource(๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์šฉ)๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋Œ€๋กœ xa-datasource-class ์„ค์ •์ด ํ•„์ˆ˜์ ์ด๋ฉฐ URL ๋ฐฉ์‹์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•˜๋ ค๋Š” ํƒ€์ž…(XA vs Non-XA)์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[JBoss EAP 7] ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ด์Šˆ ํ•ด๊ฒฐ: Apache CXF ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถฉ๋Œ (WFLYWS0059)

JBoss EAP 6.4์—์„œ 7.x๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌํ•จ๋œ Apache CXF ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ JBoss ๋‚ด๋ถ€์˜ WebServices ์„œ๋ธŒ์‹œ์Šคํ…œ์ด ์ถฉ๋Œํ•˜์—ฌ ๋ฐฐํฌ๊ฐ€ ์‹คํŒจํ•˜๋Š” ํ˜„์ƒ(WFLYWS0059)์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. jboss-deployment-structure.xml์„ ํ†ตํ•œ ๋ชจ๋“ˆ ์ œ์™ธ(Exclude) ์„ค์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

1. ๋ฌธ์ œ ํ˜„์ƒ ๋ฐ ๋กœ๊ทธ ๋ถ„์„ (Issue)

๊ธฐ์กด EAP 6์—์„œ๋Š” ์ž˜ ๋Œ๋˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด EAP 7 ๋ฐฐํฌ ์‹œ PARSE ๋‹จ๊ณ„์—์„œ ์‹คํŒจํ•˜๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ฑ‰์–ด๋ƒ…๋‹ˆ๋‹ค.

์—๋Ÿฌ ๋กœ๊ทธ

WFLYSRV0153: Failed to process phase PARSE of deployment "sso.war"
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: 
WFLYWS0059: Apache CXF library (cxf-api-2.7.8.jar) detected in ws endpoint deployment; 
either provide a proper deployment replacing embedded libraries with container module dependencies 
or disable the webservices subsystem for the current deployment adding a proper jboss-deployment-structure.xml descriptor to it.

์›์ธ ๋ถ„์„

  • JBoss EAP 7: ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์‹  Apache CXF ๊ธฐ๋ฐ˜์˜ WebServices ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜: WEB-INF/lib ์•ˆ์— ์ž์ฒด์ ์ธ CXF ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: cxf-api-2.7.8.jar)๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถฉ๋Œ: JBoss๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋Œ€์‹  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒ์žฅํ•˜๋ฉฐ, ์ค‘๋ณต์ด ๊ฐ์ง€๋˜๋ฉด ๋ฐฐํฌ๋ฅผ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค.

2. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (Resolution)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด JBoss์˜ WebServices ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , "๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๊ฒ ๋‹ค"๊ณ  ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด jboss-deployment-structure.xml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์˜ ํŠน์ • ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

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

  • WAR ํŒŒ์ผ: WEB-INF/jboss-deployment-structure.xml
  • EAR ํŒŒ์ผ: META-INF/jboss-deployment-structure.xml

์ž‘์„ฑ ๋‚ด์šฉ

JBoss์˜ webservices์™€ jaxrs ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ์ œ์™ธ(exclude)ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ธฐ๋ณธ API๋งŒ ์˜์กด์„ฑ(dependencies)์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        
        <!-- 1. JBoss ๋‚ด๋ถ€ ์„œ๋ธŒ์‹œ์Šคํ…œ ๋น„ํ™œ์„ฑํ™” -->
        <exclude-subsystems>
            <!-- JBoss์˜ CXF ๋ชจ๋“ˆ์ด ๋กœ๋“œ๋˜์ง€ ์•Š๋„๋ก ์ฐจ๋‹จ -->
            <subsystem name="webservices" />
            <!-- RESTful ์„œ๋น„์Šค ์ถฉ๋Œ ๋ฐฉ์ง€ (ํ•„์š” ์‹œ) -->
            <subsystem name="jaxrs" />
        </exclude-subsystems>
        
        <!-- 2. ํ•„์ˆ˜ API ์˜์กด์„ฑ ์ถ”๊ฐ€ -->
        <!-- ์„œ๋ธŒ์‹œ์Šคํ…œ์€ ๋บ์ง€๋งŒ, ๊ธฐ๋ณธ์ ์ธ Java EE API๋Š” ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ช…์‹œ์  ๋กœ๋“œ -->
        <dependencies>
            <module name="javax.xml.ws.api"/>
            <module name="javax.jws.api"/>
        </dependencies>
        
    </deployment>
</jboss-deployment-structure>

3. ์ ์šฉ ๊ฒฐ๊ณผ ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

  • ๊ฒฐ๊ณผ: ์œ„ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜๋ฉด, JBoss๋Š” ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด WebServices ์„œ๋ธŒ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™”๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  WEB-INF/lib ๋‚ด์˜ jar ํŒŒ์ผ๋“ค์„ ์šฐ์„ ์ ์œผ๋กœ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์˜: ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด JBoss ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค ๋ชจ๋‹ˆํ„ฐ๋ง์ด๋‚˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์ธ Spring-CXF ๋“ฑ์ด ์ „์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ)

[JBoss EAP 7.2] Windows Service ๋“ฑ๋ก ๋ฐ ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ๊ฐ€์ด๋“œ (Jsvc, Port Offset)

JBoss EAP 7.2๋ฅผ Windows ์„œ๋น„์Šค๋กœ ๋“ฑ๋กํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Apache Jsvc๋ฅผ ํ™œ์šฉํ•œ ์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐฉ๋ฒ•, ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ์„ ์œ„ํ•œ ํฌํŠธ ์˜คํ”„์…‹(Port Offset) ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ํŠน์ˆ˜๋ฌธ์ž ํŒจ์Šค์›Œ๋“œ ์ฒ˜๋ฆฌ ํŒ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

JBoss EAP 7๋ถ€ํ„ฐ๋Š” ์„œ๋น„์Šค ๋“ฑ๋ก์„ ์œ„ํ•ด JBoss Core Services (JBCS) - Apache Jsvc ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Red Hat ํฌํ„ธ์—์„œ ํ•ด๋‹น ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ๋‹ค์šด๋กœ๋“œ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

  • JBoss EAP 7.2: ์„ค์น˜ ํŒŒ์ผ ์••์ถ• ํ•ด์ œ
  • Apache Jsvc: Windows์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ (sbin ํด๋” ๋‚ด prunsrv.exe ๋“ฑ ํฌํ•จ)
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜:
    • JAVA_HOME: JDK ์„ค์น˜ ๊ฒฝ๋กœ
    • NOPAUSE=1: ์„œ๋น„์Šค ์ข…๋ฃŒ ์‹œ ๋ฐฐ์น˜ ํŒŒ์ผ์ด ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก ํ•„์ˆ˜ ์„ค์ •

1. ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ์„œ๋น„์Šค ๋“ฑ๋ก

๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” service.bat ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

๋“ฑ๋ก ๋ช…๋ น์–ด

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ CMD ์ฐฝ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ๊ฒฝ๋กœ(/logpath)๋Š” ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

:: JBoss bin ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd %JBOSS_HOME%\bin

:: ์„œ๋น„์Šค ๋“ฑ๋ก ์‹คํ–‰
service.bat install /name "JBoss7-Server01" ^
 /controller "localhost:9990" ^
 /config "standalone-ha.xml" ^
 /jbossuser "admin" ^
 /jbosspass "admin1@34" ^
 /logpath "E:\app\Redhat\waslog\testsvr01"
์ฃผ์˜ (Password Special Characters):
๋น„๋ฐ€๋ฒˆํ˜ธ์— &, <, >, | ๋“ฑ์˜ ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ CMD ์ฐฝ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ํ”ผํ•˜๊ฑฐ๋‚˜, ์Œ๋”ฐ์˜ดํ‘œ(")๋กœ ๊ฐ์‹ธ๊ณ  ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž(^)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค(Multi-Instance) ๊ตฌ์„ฑ

ํ•˜๋‚˜์˜ ์žฅ๋น„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ JBoss ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•  ๋•Œ๋Š” ์„œ๋น„์Šค ์ด๋ฆ„, ํฌํŠธ, ๋กœ๊ทธ ๊ฒฝ๋กœ๊ฐ€ ๊ฒน์น˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Step 1: Port Offset ์„ค์ • (XML ์ˆ˜์ •)

service.bat์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํฌํŠธ ์˜คํ”„์…‹์„ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ๋ถˆ์•ˆ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์„ค์ • ํŒŒ์ผ(standalone.xml) ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

<socket-binding-group name="standard-sockets" default-interface="public" 
    port-offset="${jboss.socket.binding.port-offset:100}">
    </socket-binding-group>

Step 2: Jsvc ๊ฒฝ๋กœ ์ˆ˜์ • (ํ•„์š” ์‹œ)

๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ ๊ฐ ์„œ๋ฒ„๋ณ„๋กœ ๋‹ค๋ฅธ Jsvc ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๋กœ๊ฐ€ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ, service.bat ํŒŒ์ผ์„ ์—ด์–ด PRUNSRV ๊ฒฝ๋กœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

rem service.bat ํŒŒ์ผ ํŽธ์ง‘
set PRUNSRV=

rem ์ปค์Šคํ…€ ๊ฒฝ๋กœ ์šฐ์„  ํ™•์ธ ๋กœ์ง ์˜ˆ์‹œ
if exist "%JBOSS_HOME%\..\test01-jbcs-jsvc-1.1\sbin\prunsrv.exe" (
  set PRUNSRV="%JBOSS_HOME%\..\test01-jbcs-jsvc-1.1\sbin\prunsrv.exe"
) else if exist "%JBOSS_HOME%\bin\prunsrv.exe" (
  set PRUNSRV="%JBOSS_HOME%\bin\prunsrv.exe"
) else (
  echo Please install native utilities into expected location...
  goto cmdEnd
)

Step 3: ์ถ”๊ฐ€ ์ธ์Šคํ„ด์Šค ๋“ฑ๋ก

์„œ๋น„์Šค ์ด๋ฆ„๊ณผ ์ปจํŠธ๋กค๋Ÿฌ ํฌํŠธ, ๋กœ๊ทธ ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

service.bat install /name "JBoss7-Server02" ^
 /controller "localhost:10090" ^
 /config "standalone-ha.xml" ^
 /jbossuser "admin" ^
 /jbosspass "admin1@34" ^
 /logpath "E:\app\Redhat\waslog\testsvr02"

3. ์„œ๋น„์Šค ์ œ์–ด ๋ฐ ์‚ญ์ œ

๋“ฑ๋ก๋œ ์„œ๋น„์Šค๋Š” Windows ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž(services.msc) ๋˜๋Š” ๋ช…๋ น์–ด๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์žฌ๋“ฑ๋กํ•  ๊ฒฝ์šฐ ๊ธฐ์กด ์„œ๋น„์Šค๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. /name ์˜ต์…˜์— ๋“ฑ๋กํ–ˆ๋˜ ์„œ๋น„์Šค๋ช…์„ ์ •ํ™•ํžˆ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

:: ์„œ๋น„์Šค ์ค‘์ง€
sc stop JBoss7-Server01

:: ์„œ๋น„์Šค ์‚ญ์ œ (service.bat ์ด์šฉ)
service.bat uninstall /name "JBoss7-Server01"

4. ๊ฒ€์ฆ (Verification)

  1. ์„œ๋น„์Šค ์‹คํ–‰: net start JBoss7-Server01
  2. ํฌํŠธ ํ™•์ธ: netstat -an | findstr "9990" (๋˜๋Š” ์˜คํ”„์…‹์ด ์ ์šฉ๋œ ํฌํŠธ)
  3. ๋กœ๊ทธ ํ™•์ธ: ์ง€์ •ํ•œ /logpath ๊ฒฝ๋กœ์— ๋กœ๊ทธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.