Elasticsearch๋ฅผ ์ฒ˜์Œ ์„ค์น˜ํ•˜๋‹ค ๋ณด๋ฉด ํ•ญ์ƒ ๋ณด๋Š” ์—๋Ÿฌ๋“ค์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

 1) root ๊ณ„์ •์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ

 2) openfiles, max process ๊ฐ’์„ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ณ 

 3) swappiness ๊ฐ’ ์„ค์ • ๋ณ€๊ฒฝ ์š”์ฒญ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•œ Max user processes Error

๊ทธ ์ค‘์— elasticsearch๋Š” openfiles์™€ max process๋Š” ์ตœ์†Œ 65535๋กœ ์„ค์ •ํ•˜๋ผ๋ฉฐ, ์ปค๋„์—์„œ ํ•ด์ฃผ๋Š” ๊ธฐ๋ณธ ์„ค์ •๋ณด๋‹ค ํฐ ๊ฐ’์„ ์š”๊ตฌํ•˜๋Š”๋ฐ์š”,

์˜ค๋Š˜์€ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์„ ๊ฐ€๋ฅดํ‚ค๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์„ค์ •๋œ ๊ฐ’ ์ด์ƒ์ด ๋˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. Max user processes

Max user processes์˜ ์˜๋ฏธ๋Š” ํ•˜๋‚˜์˜ ๊ณ„์ •์—์„œ ์ตœ๋Œ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” process์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. OS์—์„œ์˜ ํ™•์ธ์€

# ulimit -a (sofe ulimit)

# ulimit -aH (hard ulimit)

์œ„ ๋ช…๋ น์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (ํ˜„์žฌ ์ œ ์„œ๋ฒ„์˜ ์„ค์ • ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.)

max user processes

๊ทธ๋Ÿผ ์•„๋ž˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์„ค์ •๋œ max user processes์˜ ๊ฐ’์„ ๋„˜๊ธฐ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4000๊ฐœ Thread ์ƒ์„ฑ ํ›„ ์œ ์ง€

๋Œ€๋žต์ ์ธ ์ฝ”๋“œ์˜ ๋‚ด์šฉ์€ HTTP ์š”์ฒญ์ด ์˜ค๋ฉด ๋น„๋™๊ธฐ๋กœ 4์ฒœ๊ฐœ์˜ Thread๋ฅผ ๋™์‹œ์— ์ƒ์„ฑํ•˜๊ณ  20๋ถ„๊ฐ„ ์œ ์ง€ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ Thread๋ฅผ ๋Š˜๋ ค๋ณด๋ฉด,

Thread ์ƒ์„ฑ ์ค‘ OOM ๋ฐœ์ƒ

๊ทธ๋ฆผ์ฒ˜๋Ÿผ ulimit -a ๋ช…๋ น์˜ max user processes ๊ฒฐ๊ณผ์™€ ๊ฐ™์ด ec2-user ๊ณ„์ •์€ 1024๊ฐœ๊นŒ์ง€ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„, OOM ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์ด ๊ฒฝ์šฐ ec2-user ๊ณ„์ •์—์„œ๋Š” ์‰˜ ๋ช…๋ น์–ด ์ž…๋ ฅ ๋“ฑ ์–ด๋–ค ์ž‘์—…๋„ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

<๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋ด…๋‹ˆ๋‹ค.>

 

 

2. Open files

๋‹ค์Œ์€ Open files์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŒŒ์ผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋‚˜ ์„ธ์…˜(์†Œ์ผ“)๋“ค์„ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฐ’์˜ ์„ค์ •์€ ์„œ๋ฒ„์—์„œ์˜ Connection์—ฐ๊ฒฐ ์ž‘์—…์— ๋งค์šฐ ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด ๋ฉ๋‹ˆ๋‹ค.

(์„ค์ • ๊ฐ’์„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ๋ฆฌ๋ˆ…์Šค์—์„œ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์–ด ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์ด๋‚˜ Connection ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ!)

๊ทธ๋Ÿผ ์†Œ์ผ“์„ open files ๊ฐ’ ๋ณด๋‹ค ๋งŽ์ด ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(1) Java ํ™˜๊ฒฝ TEST

 - RestTemplate๋กœ ์†Œ์ผ“ ์ƒ์„ฑ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„์—์„œ 20๋ถ„๊ฐ„ ์‘๋‹ต์„ ๋Œ€๊ธฐ ์‹œํ‚ต๋‹ˆ๋‹ค.

 - ์š”์ฒญ์„ ๋™์‹œ์— 1100๊ฐœ๋ฅผ ๋ณด๋‚ด open files๊ฐ€ 1024๋กœ ์ œํ•œ์ธ ์„œ๋ฒ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

   (๊ธฐ๋ณธ์ ์œผ๋กœ java, spring ๊ด€๋ จ file์ด ๋ช‡ ๊ฐœ ์˜คํ”ˆ๋ฉ๋‹ˆ๋‹ค.)

์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

connection ์†Œ์ผ“ ์ƒ์„ฑ ํ›„ ์‘๋‹ต ๋Œ€๊ธฐ Code

๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ์š”์ฒญ์„ ๋ณด๋‚ผ API ์š”์ฒญ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

API ์š”์ฒญ ์‰˜

์‰˜์„ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด

openfiles ๊ฐœ์ˆ˜๊ฐ€ 1024 ๊ฐ’์„ ๋„˜์–ด 1516๊ฐœ ๊นŒ์ง€ ์—ด๋ฆผ!

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์†Œ์ผ“์ด 1024๊ฐœ๊ฐ€ ๋„˜์–ด๋„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์—†์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ํ•œ๋ฒˆ ๋” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2048๊ฐœ ๊นŒ์ง€ ์ƒ์„ฑ๋œ ๋ชจ์Šต

์ด์ œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์€ ๋”ฑ 2048๊ฐœ ๊นŒ์ง€๋งŒ ์—ด๋ฆฐ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, openfiles์˜ ๊ฐ’์€ soft๋กœ ์„ค์ •๋œ ๊ฐ’์ด ์•„๋‹Œ

๊ทธ๋ฆผ์ฒ˜๋Ÿผ Hard ์˜ต์…˜ ๊ฐ’๊นŒ์ง€ file์ด ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ…! ์•Œ๊ณ  ๋ณด๋‹ˆ java ํ™˜๊ฒฝ์—์„œ๋Š” hard ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€๋Š”๊ฒŒ ๋งž์ง€๋งŒ Python์—์„œ๋Š” ์•„๋‹ˆ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค

 

(2) Python ํ™˜๊ฒฝ TEST

๋นจ๊ฐ„ ๋ฐ•์Šค : 1024๊ฐœ์˜ ์—ด๋ฆฐ ํŒŒ์ผ ์ƒ์„ฑ / ํŒŒ๋ž€ ๋ฐ•์Šค : 1024๊ฐœ ์ดํ›„ ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋” ์—ด์–ด๋ณธ๋‹ค

์œ„ ์ฒ˜๋Ÿผ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ file์„ ์ž„์˜๋กœ ์—ด์–ด๋ด…๋‹ˆ๋‹ค. 1021๊ฐœ ๊นŒ์ง€๋Š” ํŒŒ์ผ์ด ๋ฌธ์ œ์—†์ด ์—ด๋ฆฌ์ง€๋งŒ(stdin, stdout, stderr ํ‘œ์ค€ ์ž…/์ถœ๋ ฅ 3๊ฐœ ์ œ์™ธ)

์ดํ›„๋กœ ์—ฌ๋Š” ํŒŒ์ผ์—์„œ๋Š” Too many open files ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค!

 

(3) Java์™€ Python ํ™˜๊ฒฝ์˜ ์ฐจ์ด?

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ Java๋Š” hard ์˜ต์…˜๊นŒ์ง€ ํŒŒ์ผ์ด ์˜คํ”ˆ๋˜๊ณ  Python์€ soft ๊ฐ’๊นŒ์ง€ ์˜คํ”ˆ๋จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด strace ๋ช…๋ น์„ ํ†ตํ•ด java ํ”„๋กœ์„ธ์Šค ๋™์ž‘์„ ์ถ”์ ํ•ด๋ณด๋ฉด

kernel 5.15ver์—์„œ ํ…Œ์ŠคํŠธ (์ด์ „ ๋ฒ„์ „์€ prlimit64 ํ•จ์ˆ˜ ๋Œ€์‹  getrlimit, setrlimt ํ•จ์ˆ˜ ์‚ฌ์šฉ)

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ java ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋จ๊ณผ ๋™์‹œ์— prlimit64๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ rlim_cur=1024๊ฐ’์„ rlim_max=2*1024(hard limit) ๊ฐ’๊นŒ์ง€ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ๊ทธ๊ฐ€ ์ฐํ˜€์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

JDK์—์„œ MaxFDLimit ์˜ต์…˜ ํ™œ์„ฑํ™” (๊ธฐ๋ณธ๊ฐ’)

๊ทธ ์ด์œ ๋Š” ์„ค์น˜๋œ JVM์—์„œ MaxFDLimit ์˜ต์…˜์„ ํ†ตํ•ด limit์„ ์˜ฌ๋ ค์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค! (๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋œ ์˜ต์…˜)

์ฆ‰, ๋ฆฌ๋ˆ…์Šค OS์—์„œ๋Š” JDK ์‹คํ–‰ ์‹œ ์ปค๋„์—์„œ prlimit64 ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ limit ์‚ฌ์ด์ฆˆ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

3. ์ •๋ฆฌ

 - (Linux ํ™˜๊ฒฝ) JAVA์—์„œ ๋™์‹œ์— ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ ์ˆ˜๋Š” Max user processes๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹ค.

 - (Linux ํ™˜๊ฒฝ) JAVA์—์„œ ์†Œ์ผ“ ํ†ต์‹ (API๋‚˜ ๋ชจ๋“  Connection)์€ open files ์˜ต์…˜์„ ๋”ฐ๋ผ๊ฐ„๋‹ค.

  -> JAVA์—์„œ๋Š” JDK ์ฝ”๋“œ์—์„œ ์ž๋™์œผ๋กœ soft limit๊ฐ’์€ hard limit๊ฐ’๊นŒ์ง€ ์—…๋ฐ์ดํŠธ ๋จ

  -> Python์€ soft limit ๊ฐ’์—์„œ ์ œํ•œ์ด ๊ฑธ๋ฆผ

 

๋‚˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ, Max user processes์™€ open files์˜ ์ ์ ˆํ•œ ๊ฐ’์„ ์ฐพ์•„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

 

<๊ณต๋™์ €์ž>

https://giraffe-lee.tistory.com/7

 

<์ฐธ์กฐ>

https://techblog.woowahan.com/2569/

๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑํ•˜๊ธฐ
VPC, Subnet, Route Table, Internet Gateway, EndPoint ๊ทธ๋ฆฌ๊ณ  IaC

 

AWS VPC (Virtual Private Cloud)๋ž€?

AWS Cloud ๋‚ด๋ถ€์—์„œ ๊ตฌ์„ฑ๋˜๋Š” ์‚ฌ์šฉ์ž์˜ AWS ๊ณ„์ • ์ „์šฉ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๋กœ ์ด๊ณณ์—์„œ AWS ๋ฆฌ์†Œ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

AWS์—์„œ๋Š” ๋””ํดํŠธ๋กœ Amazon EC2-VPC๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ Amazon VPC๋Š” AWS์˜ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ธํ”„๋ผ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ด์ ๊ณผ ํ•จ๊ป˜ ๊ณ ๊ฐ์˜ ์ž์ฒด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ์šด์˜ํ•˜๋Š” ๊ธฐ์กด ๋„คํŠธ์›Œํฌ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค.

 

๋˜ํ•œ AWS VPC๋Š” AWS ํด๋ผ์šฐ๋“œ์—์„œ ๋‹ค๋ฅธ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ์™€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค. IP ์ฃผ์†Œ ๋ฒ”์œ„์™€ VPC ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์„œ๋ธŒ๋„ท์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•œ๋‹ค.

VPC๋Š” Amazon ์ฝ˜์†”์—์„œ ์ƒ์„ฑ๋œ๋‹ค. ๋˜ํ•œ ํ•˜๋‚˜์˜ VPC๋Š” ํ•˜๋‚˜์˜ Region๋‚ด์—์„œ๋งŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋‘๊ฐœ ์ด์ƒ์˜ ๋ฆฌ์ „์— ๊ฑธ์น˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ํ•˜๋‚˜์˜ VPC๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ AZ์— ๊ฑธ์ณ์„œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๊ณ  ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ์˜ range๋Š” 2^16์œผ๋กœ ์ œํ•œ๋œ๋‹ค.

 

 

VPC๋Š” ๋…๋ฆฝ๋œ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ํฐ ๋‹จ์œ„์ด๋‹ค. ๊ฐ region์— ์ข…์†๋˜๋ฉฐ [RFC1918](https://tools.ietf.org/html/rfc1918)์ด๋ผ๋Š” ์‚ฌ์„ค IP ๋Œ€์—ญ์— ๋งž์ถ”์–ด ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. VPC์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์„ค IP ๋Œ€์—ญ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1๏ธโƒฃ 10.0.0.0 ~ 10.255.255.255(10/8 prefix)

2๏ธโƒฃ 172.16.0.0 ~ 172.31.255.255(182.16/12 prefix)

3๏ธโƒฃ 192.168.0.0 ~ 192.168.255.255(192.168/16 prefix)

 

๊ฐ ๋Œ€์—ญํญ๋งˆ๋‹ค ๊ณ ์ •๋˜์–ด์žˆ๋Š” prefix๊ฐ€ ๋‹ค๋ฅด๋‹ค. IPv4 ์ฃผ์†Œ์ธ xxx.xxx.xxx.xxx์—์„œ .์œผ๋กœ ๊ตฌ๋ถ„๋œ xxx์€ 0~255 ์‚ฌ์ด์˜ ์ˆซ์ž์ด๋ฉฐ ์ด๋Š” 8bits๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ 1๋ฒˆ์€ 00001010~, 2๋ฒˆ์€ 0101100.0001~, 3๋ฒˆ์€ 11000000.10101000~๊ฐ€ ์•ž์— ๊ณ ์ •๋˜์–ด ์žˆ๊ณ  ๋‚˜๋จธ์ง€ ์ฃผ์†Œ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด 10.0.0.0/16์œผ๋กœ ์„ค์ •๋œ IP ๋Œ€์—ญํญ์€ ์ด 65,536๊ฐœ์˜ ํ”„๋ผ์ด๋น— IPv4 ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

VPC์—์„œ ํ•œ๋ฒˆ ์„ค์ •๋œ IP ๋Œ€์—ญ์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ฐ๊ฐ์˜ VPC๋Š” ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์—†๋‹ค. ๋งŒ์ผ ํ†ต์‹ ์„ ์›ํ•œ๋‹ค๋ฉด VPC ํ”ผ์–ด๋ง ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด VPC ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

public / private Subnet์ด๋ž€?

์„œ๋ธŒ๋„ท์€ VPC์˜ IP ์ฃผ์†Œ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐฐ์น˜๋˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ๋œปํ•œ๋‹ค. VPC๋ฅผ ์ž˜๊ฒŒ ๋‚˜๋ˆˆ ๊ฒƒ์ด ์„œ๋ธŒ๋„ท์ด๊ธฐ ๋•Œ๋ฌธ์— VPC๋ณด๋‹ค ๋Œ€์—ญํญ์ด ๋‚ฎ์œผ๋ฉฐ ํ•˜๋‚˜์˜ AZ(Availability Zone)์— ํ•˜๋‚˜์˜ ์„œ๋ธŒ๋„ท์ด ์—ฐ๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— region์˜ AZ ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ณ  ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.

 

์„œ๋ธŒ๋„ท์€ ๋‹ค์‹œ Public Subnet๊ณผ Private Subnet์œผ๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ๋‹ค. ์ธํ„ฐ๋„ท๊ณผ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์„œ๋ธŒ๋„ท์„ public subnet์ด๋ผ๊ณ  ํ•˜๊ณ  ์ธํ„ฐ๋„ท๊ณผ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์€ ์„œ๋ธŒ๋„ท์„ private subnet์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์—ฌ๋ถ€๋กœ subnet์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ๋Š” ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. public subnet์— ์กด์žฌํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋Š” ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋˜์–ด ์•„์›ƒ๋ฐ”์šด๋“œ, ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด private subnet์€ ์™ธ๋ถ€์— ๋…ธ์ถœ์ด ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰ ์ธํ„ฐ๋„ท๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ๋ฉด์ ์„ ์ตœ์†Œํ™”ํ•จ์œผ๋กœ์จ ๋„คํŠธ์›Œํฌ ๋ง์— ํ•จ๋ถ€๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

VPC ๋‚ด์—๋Š” ๋ณดํ†ต public subnet๊ณผ private subnet์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • public subnet
    • internet gateway, ELB, public IP/Elastic IP๋ฅผ ๊ฐ€์ง„ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚ด๋ถ€์— ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • ํŠนํžˆ Public subnet ๋‚ด์— ์žˆ๋Š” nat instance๋ฅผ ํ†ตํ•ด์„œ private subnet ๋‚ด์— ์žˆ๋Š” instances์ด ์ธํ„ฐ๋„ท์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  • private subnet
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ธ๋ถ€์™€ ์ฐจ๋‹จ๋˜์–ด ์žˆ๋‹ค.
    • private subnet ๋‚ด์˜ ์ธ์Šคํ„ด์Šค๋“ค์€ private ip๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  internet inbound/outbound๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ณ  ์˜ค์ง ๋‹ค๋ฅธ ์„œ๋ธŒ๋„ท๊ณผ์˜ ์—ฐ๊ฒฐ๋งŒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

Router

๋ผ์šฐํ„ฐ๋Š” VPC ์•ˆ์—์„œ ๋ฐœ์ƒํ•œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋””๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ‘œ์ง€ํŒ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์„œ๋ธŒ๋„ท์€ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ „๋‹ฌ ๊ทœ์น™์— ํ•ด๋‹นํ•˜๋Š” ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋ผ์šฐํ„ฐ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ VPC ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์†Œ๋Š” local๋กœ ํ–ฅํ•˜๋„๋ก ํ•œ๋‹ค

 

 

 

Routing Table

๋„คํŠธ์›Œํฌ์ƒ์˜ ํŠน์ • ๋ชฉ์ ์ง€๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ์™€ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•๋“ฑ์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”๋กœ ๋ผ์šฐํ„ฐ๋Š” ์–ด๋–ค ๋ชฉ์ €์ง€๋ฅผ ์ฐพ์•„๊ฐˆ ๋•Œ ์ด ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ๋ณด๊ณ  ์ฐพ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋ผ์šฐํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ข…ํ•ฉํ•ด์„œ ์–ป์–ด๋‚ธ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์ง€๋„๋ฅผ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

ip address์— routing ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•˜์—ฌ subnet์—์„œ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋Š” outbound traffic์— ๋Œ€ํ•œ routing ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ

VPC ๋‚ด์—๋Š” subnet์ด ์žˆ๊ณ  ๊ฐ subnet์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ•œ subnet์—์„œ ๋‹ค๋ฅธ ํ•œ์ชฝ subnet์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ผ์šฐํŒ…์ด ํ•„์š”ํ•˜๋‹ค.

VPC ๋‚ด๋ถ€์— ๋Œ€ํ•ด์„œ๋Š” ์ž๋™์œผ๋กœ ๋ผ์šฐํŒ…์ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋‹ค๋ฅธ ์„ค์ • ์—†์ด ํ•œ subnet์—์„œ ๋‹ค๋ฅธ subnet์œผ๋กœ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” ๋ณด์ด์ง€ ์•Š๋Š” ์•”์‹œ์  ๋ผ์šฐํ„ฐ์ธ vpc router๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. subnet์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๋‚ผ ๋•Œ ์ด vpc router๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

 

AWS์—์„œ์˜ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์€ subnet์ด ๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ๋ณด๋‚ด๋Š” ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์ด ์ „๋‹ฌ๋˜๋Š” ์œ„์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๊ท๊ฒŒ ๋งํ•ด ๋ผ์šฐํŒ…์— ๋Œ€ํ•œ ํ•˜๋‚˜์˜ ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

Internet Gateway

VPC์™€ ์ธํ„ฐ๋„ท์ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” VPC ์ปดํฌ๋„ŒํŠธ

๋‹จ์ˆœํžˆ ์ธํ„ฐ๋„ท๊ณผ์˜ ํ†ต๋กœ ์—ญํ• ์„ ํ•  ๋ฟ ์•„๋‹ˆ๋ผ NAT์˜ ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๋Š” VPC ๋ฆฌ์†Œ์Šค์™€ ์ธํ„ฐ๋„ท ๊ฐ„ ํ†ต์‹ ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด VPC์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒŒ์ดํŠธ์›จ์ด์ด๋‹ค. ์•ž์„œ ์„ค๋ช…ํ–ˆ๋“ฏ public subnet๋งŒ ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ public subnet์˜ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์—๋งŒ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ํ–ฅํ•˜๋Š” ๊ทœ์น™์„ ํฌํ•จํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ผ์šฐํŒ… ๊ทœ์น™์„ ์„ค์ •ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋ฐœ์ƒ ์‹œ ๋ชฉ์ ์ง€์˜ IP ์ฃผ์†Œ๊ฐ€ 10.0.0.0/16(VPC ๋‚ด๋ถ€)์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€๋กœ ์ „์†ก๋˜์–ด ๋ชฉ์ ์ง€๋ฅผ ์ฐพ๋Š”๋‹ค.

 

 

 

NAT Gateway

public subnet๋งŒ ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์™€ ํŠธ๋ž˜ํ”ฝ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด private subnet์˜ ํŠธ๋ž˜ํ”ฝ์€ ๋ฌด์กฐ๊ฑด VPC ์•ˆ์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๋œป์ผ๊นŒ?

 

๊ทธ๋ ‡์ง€ ์•Š๋‹ค. private subent ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธํ„ฐ๋„ท๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ private subnet์—์„œ ์ง์ ‘ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํŠธ๋ž˜ํ”ฝ์„ public subnet์— ์†ํ•œ ์ธ์Šคํ„ด์Šค์— ์ „์†กํ•ด์„œ ์ธํ„ฐ๋„ท๊ณผ ํ†ต์‹ ์„ ํ•ด์•ผ ํ•œ๋‹ค.

 

NAT ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ด ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. private subent์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด VPC ๋‚ด๋ถ€์˜ ์ฃผ์†Œ๋ฅผ ๋ชฉ์ ์ง€๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด public subnet์— ์กด์žฌํ•˜๋Š” NAT๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•œ๋‹ค. ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์€ NAT๋Š” public subnet์˜ ๋ผ์šฐํŒ… ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ private subnet์ด ์ธํ„ฐ๋„ท๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

 

 

 

VPC EndPoint (private Link, VPC ์—”๋“œ ํฌ์ธํŠธ)

VPC ์—”๋“œํฌ์ธํŠธ๋Š” ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด๋‚˜ NAT ๊ฒŒ์ดํŠธ์›จ์ด์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ฒŒ์ดํŠธ์›จ์ด ์—†์ด AWS ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” private connection์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ด๋‹ค. Private link๋ฅผ ํ†ตํ•ด AWS ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฅผ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ์—ฐ๊ฒฐํ•˜๋Š” ์„œ๋น„์Šค์˜ IP ์ฃผ์†Œ๋ฅผ ๋ฐ”๊พธ๋Š” ๋“ฑ ๋„คํŠธ์›Œํฌ ์ •๋ณด์˜ ๋ณ€๊ฒฝ ๋“ฑ์˜ ์ž‘์—…์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

์ฝ”๋“œํ˜• ์ธํ”„๋ผ IaC

์ˆ˜๋™ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ

IaC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ”„๋ผ ์‚ฌ์–‘์„ ๋‹ด์€ ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๊ตฌ์„ฑ์„ ํŽธ์ง‘ํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ธฐ ๋” ์‰ฌ์›Œ์ง„๋‹ค. ๋˜ํ•œ IaC๋Š” ๋งค๋ฒˆ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

 

IaC๋Š” ๊ตฌ์„ฑ ์‚ฌ์–‘์„ ์ฝ”๋“œํ™”ํ•˜๊ณ  ๋ฌธ์„œํ™” ํ•จ์œผ๋กœ์จ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฌธ์„œํ™”ํ•˜์ง€ ์•Š๊ณ  ์ž„์‹œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ผ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฒ„์ „ ์ œ์–ด๋Š” IaC์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๊ณ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ ํŒŒ์ผ๋„ ์†Œ์Šค ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

์ฝ”๋“œ๋กœ ์ธํ”„๋ผ๋ฅผ ๋ฐฐํฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ธํ”„๋ผ๋ฅผ ๋ชจ๋“ˆ์‹ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๊ธฐ๋„ ํ•˜๋‹ค.

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

 

์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œํ™”ํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๊ณ  ํ”„๋กœ๋น„์ €๋‹ํ•  ๋•Œ ์ด ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ์ˆ˜๋™์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ๋„ ์žˆ๊ณ  ์ž๋™ํ™” ํˆด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.

 

 


reference.

link

'๐Ÿ”ฅ > Cloud' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Cloud] ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ…์˜ ์œ ํ˜•  (2) 2022.01.13

๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ, ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ, ๋ฉ€ํ‹ฐํด๋ผ์šฐ๋“œ๋กœ 4๊ฐ€์ง€์˜ ์œ ํ˜•์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ

์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•˜์ง€ ์•Š์€ IT ์ธํ”„๋ผ์—์„œ ์ƒ์„ฑ๋˜๋Š” ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ

์ „ํ†ต์ ์œผ๋กœ ์˜คํ”„ํ”„๋ ˆ๋ฏธ์Šค์—์„œ ๊ตฌ๋™๋˜์—ˆ์ง€๋งŒ, ์˜ค๋Š˜๋‚  ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์œ„์น˜์™€ ์†Œ์œ ๊ถŒ์„ ํ†ตํ•œ ๊ตฌ๋ถ„์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ™˜๊ฒฝ์ด ๋ฉ€ํ‹ฐํ”Œ ํ…Œ๋„ŒํŠธ๋กœ ํŒŒํ‹ฐ์…”๋‹ ๋˜๋Š” ์žฌ๋ฐฐํฌ๋˜๋Š” ํด๋ผ์šฐ๋“œ๋ฅผ ๋ชจ๋‘ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ ํ…Œ๋„Œ์‹œ๋Š” ๋‹จ์ผ ์†Œํ”„ํŠธ์›จ์–ด ์ธ์Šคํ„ด์Šค๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์— ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋กœ SaaS ์ œํ’ˆ์ด ๊ทธ ์˜ˆ์ด๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ๊ณ ๊ฐ์ด ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ณต์œ  ํ˜ธ์ŠคํŒ…์„ ๋ฉ€ํ‹ฐ ํ…Œ๋„Œ์‹œ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

๋ฐ˜๋Œ€์˜ ์˜๋ฏธ์ธ ๋‹จ์ผ ํ…Œ๋„Œ์‹œ์—์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ธ์Šคํ„ด์Šค ๋˜๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ํ•˜๋‚˜์— ์ตœ์ข… ์‚ฌ์šฉ์ž ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์ด ํ•˜๋‚˜๋งŒ ์žˆ๋‹ค.

  • ๋Œ€ํ‘œ์ ์ธ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด
    • AWS
    • Google Cloud
    • Microsoft Azure
    • etc

 

 

 

ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ

๋‹จ์ผ ์ตœ์ข… ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ทธ๋ฃน์˜ ์ „์šฉ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์œผ๋กœ, ์‹คํ–‰ ์‹œ ๋Œ€๊ฐœ ํ•ด๋‹น ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ทธ๋ฃน์˜ ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ๋ณดํ˜ธ๋œ๋‹ค.

์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๋‹จ์ผ ๊ณ ๊ฐ๋งŒ ๊ธฐ๋ฐ˜ IT ์ธํ”„๋ผ๋ฅผ ๋…์ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ํด๋ผ์šฐ๋“œ๋ฅผ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ๋Š” ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ๋ผ๊ณ  ํ•ด์„œ ์˜จํ”„๋ ˆ๋ฏธ์Šค IT ์ธํ”„๋ผ์—์„œ๋งŒ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋˜ ์˜คํ”„ ํ”„๋ ˆ๋ฏธ์Šค์— ์œ„์น˜ํ•œ ๋ฒค๋” ์†Œ์œ ์˜ ์ž„๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์กฐ์ง๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜์™€ ์†Œ์œ ๊ถŒ์€ ๋”์ด์ƒ ์ฐจ๋ณ„ํ™” ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ์˜ ํ•˜์œ„ ์œ ํ˜•๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์ƒ๊ฒจ๋‚ฌ๋‹ค.

  • ๊ด€๋ฆฌํ˜• ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ

๊ณ ๊ฐ์€ ํƒ€์‚ฌ ๊ณต๊ธ‰ ์—…์ฒด๊ฐ€ ๋ฐฐํฌ, ์„ค์ • ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‚ฌ์šฉ

๊ด€๋ฆฌํ˜• ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ๋Š” IT ํŒ€์˜ ์ธ๋ ฅ์ด๋‚˜ ๊ธฐ์ˆ ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ๋ณด๋‹ค ๋‚˜์€ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์™€ ์ธํ”„๋ผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ์—…์„ ์ง€์›ํ•˜๋Š” ํด๋ผ์šฐ๋“œ ์ œ๊ณต์˜ต์…˜์ด๋‹ค.

 

  • ์ „์šฉ ํด๋ผ์šฐ๋“œ

๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ๋‚ด์— ์žˆ๋Š” ํด๋ผ์šฐ๋“œ

ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ ๋˜๋Š” ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ์— ์ „์šฉ ํด๋ผ์šฐ๋“œ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํšŒ๊ณ„ ๋ถ€์„œ์—์„œ๋Š” ์กฐ์ง์˜ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ ๋‚ด์— ์ „์šฉ ํด๋ผ์šฐ๋“œ๋ฅผ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ

๋‹จ์ผ IT ํ™˜๊ฒฝ ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์ด LAN, WAN, VPN ๋ฐ/๋˜๋Š” API๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ๋Š” ๋ณต์žกํ•˜๊ณ  ์–ด๋–ค ์ƒํ™ฉ์ธ์ง€์— ๋”ฐ๋ผ ์š”๊ฑด ๋˜ํ•œ ๋‹ค๋ฅด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

  • 1๊ฐœ ์ด์ƒ์˜ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ์™€ 1๊ฐœ ์ด์ƒ์˜ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ
  • 2๊ฐœ ์ด์ƒ์˜ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ
  • 2๊ฐœ ์ด์ƒ์˜ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ
  • 1๊ฐœ ์ด์ƒ์˜ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ ๋˜๋Š” ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ์— ์—ฐ๊ฒฐ๋˜๋Š” ๋ฒ ์–ด๋ฉ”ํƒˆ ๋˜๋Š” ๊ฐ€์ƒ ํ™˜๊ฒฝ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ณ„์ ์ด์ง€๋งŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋‹ค์ค‘ ํ™˜๊ฒฝ ๋‚ด์™ธ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์‹ค์ƒ ๊ฑฐ์˜ ๋ชจ๋“  IT ์‹œ์Šคํ…œ์ด ์ด๋Ÿฌํ•œ ์ถ”์„ธ๋‹ค.

์ ์–ด๋„ ์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ ์ค‘ ์ผ๋ถ€๋Š” ์˜จ๋””๋งจ๋“œ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ IT ๋ฆฌ์†Œ์Šค์—์„œ ์ œ๊ณต๋˜์–ด์•ผ ํ•˜๊ณ , ๋ชจ๋“  ํ™˜๊ฒฝ์ด ํ†ตํ•ฉ ๊ด€๋ฆฌ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•ด ๋‹จ์ผ ํ™˜๊ฒฝ์ฒ˜๋Ÿผ ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

๋ฉ€ํ‹ฐํด๋ผ์šฐ๋“œ

2๊ณณ ์ด์ƒ์˜ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” 2๊ฐœ ์ด์ƒ์˜ ํผ๋ธ”๋ฆญ ๋˜๋Š” ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํด๋ผ์šฐ๋“œ ์ ‘๊ทผ ๋ฐฉ์‹

๋ชจ๋“  ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ๋Š” ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ์ด์ง€๋งŒ, ๋ชจ๋“  ๋ฉ€ํ‹ฐํด๋ผ์šฐ๋“œ๊ฐ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ๊ฐ€ ์–ด๋–ค ํ˜•ํƒœ๋กœ๋“  ํ†ตํ•ฉ ๋˜๋Š” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๋˜์–ด ์—ฐ๊ฒฐ๋˜๋ฉด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ๊ฐ€ ๋œ๋‹ค.

 

๋ช…ํ™•ํ•œ ๋ชฉ์ , ์ฆ‰ ์ค‘์š” ๋ฐ์ดํ„ฐ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋˜๋Š” ๋” ๊ฐ•๋ ฅํ•œ ์žฌํ•ด ๋ณต๊ตฌ๋ฅผ ์œ„ํ•œ ์ด์ค‘ ์Šคํ† ๋ฆฌ์ง€ ๊ณต๊ฐ„์œผ๋กœ์„œ ๋ฉ€ํ‹ฐํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ์šฐ์—ฐํžˆ ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ์˜ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜ ๋„ ์žˆ๋‹ค. ์–ด๋Š ์ชฝ์ด๋“  ํ™•์žฅ๋œ ํ™˜๊ฒฝ ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ๊ณผ ์„ฑ๋Šฅ์„ ๊ฐ•ํ™”ํ•˜๋ ค๋Š” ๊ธฐ์—…๋“ค ์‚ฌ์ด์—์„œ ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ๊ฐ€ ๋ณดํŽธํ™”๋˜๊ณ  ์žˆ๋‹ค.

'๐Ÿ”ฅ > Cloud' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Cloud] VPC, Subnet, Route etc...  (1) 2022.01.13
์ž๋ฐ”๋Š” OS์— ๋…๋ฆฝ์ ์ธ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
JVM์ด OS์™€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‚ฌ์ด์—์„œ ๊ธฐ๊ณ„์–ด๋กœ ํ–‰์„์•ป์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

JVM JAVA Virtual Machine

์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜

์Šคํƒ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ๋จธ์‹  

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ GC๋ฅผ ์ˆ˜ํ–‰

 

์ž๋ฐ” ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ณผ์ •

1. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. 

2. ( .java ) ์ธ ํŒŒ์ผ์„ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.

3. ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ JVM์˜ Class Loader์— ์ „๋‹ฌํ•œ๋‹ค. 

4. Class Loader๋Š” ๋™์  ๋กœ๋”ฉ์„ ํ†ตํ•ด ํ•„์š” ํด๋ž˜์Šค๋“ค์„ ๋กœ๋”ฉ ๋ฐ ๋งํฌํ•˜์—ฌ Runtime Data Area์— ์˜ฌ๋ฆฐ๋‹ค. (JVM์˜ ๋ฉ”๋ชจ๋ฆฌ)

5. ์‹คํ–‰ ์—”์ง„์€ JVM๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰ํ•œ๋‹ค.

 

 

 

 

 

JVM
Class Loader + Runtime Data Areas + Execution Engine

 

 

 

 

Class Loader ํŠน์ง•

1. ๊ณ„์ธต ๊ตฌ์กฐ 

ํด๋ž˜์Šค ๋กœ๋”๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ๋กœ๋”๋ผ๋ฆฌ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ์ด๋ฃจ์–ด ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.

 

  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋” Bootstrap Class Loader
    • ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋”, ์œ ์ผํ•˜๊ฒŒ JAVA๊ฐ€ ์•„๋‹Œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„
    • JVM์ด ์‹คํ–‰๋  ๋•Œ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ
    • Object ํด๋ž˜์Šค๋ฅผ ๋น„๋กฏํ•˜์—ฌ JAVA API๋“ค์„ ๋กœ๋“œํ•จ

 

  • ์ต์Šคํ…์…˜ ํด๋ž˜์Šค ๋กœ๋” Extension Class Loader
    • ๊ธฐ๋ณธ JAVA API๋ฅผ ์ œ์™ธํ•œ ํ™•์žฅ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•จ - ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ํ™•์žฅ ๊ธฐ๋Šฅ ๋กœ๋“œ

 

  • ์‹œ์Šคํ…œ ํด๋ž˜์Šค ๋กœ๋” System Class Loader
    • (๋ถ€ํŠธ ์ŠคํŠธ๋žฉ๊ณผ ์ต์Šคํ…์…˜ ํด๋ž˜์Šค๋กœ๋”๊ฐ€ JVM ์ž์ฒด์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ๋กœ๋“œํ•œ๋‹ค) ์‹œ์Šคํ…œ ํด๋ž˜์Šค ๋กœ๋”๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•จ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ $CLASSPATH ๋‚ด์˜ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•จ

 

  • ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ๋กœ๋” User-Defined Class Loader
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ ์ƒ์—์„œ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋กœ๋”
    • WAS์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ๋กœ๋”๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๋กœ๋”์˜ ์œ„์ž„ ๋ชจ๋ธ์„ ํ†ตํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•จ

 

2. ์œ„์ž„๋ชจ๋ธ 

์ฒ˜์Œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋„˜๊ฒจ๋ฐ›์€ ํด๋ž˜์Šค๋กœ๋”.

ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•  ๋•Œ ํ˜น์€ ์‹คํ–‰ ์—”์ง„์—์„œ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํด๋ž˜์Šค ๋กœ๋”์—๊ฒŒ ๋กœ๋“œ๋ฅผ ์š”์ฒญํ•  ๋•Œ.

๋กœ๋“œ๋ฅผ ์š”์ฒญ๋ฐ›์€ ํด๋ž˜์Šค ๋กœ๋”๋Š” ๋‹ค์Œ ์ˆœ์„œ๋Œ€๋กœ ์š”์ฒญ๋ฐ›์€ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•จ

  1. ํด๋ž˜์Šค ๋กœ๋” ์บ์‹œ
  2. ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”
  3. ์ž๊ธฐ ์ž์‹ 

์ด์ „์— ๋กœ๋“œ๋œ ํด๋ž˜์Šค์ธ์ง€ ํด๋ž˜์Šค ๋กœ๋” ์บ์‹œ๋ฅผ ํ™•์ธํ•œ๋‹ค.

์—†๋‹ค๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ํ™•์ธํ•˜๋Š”๋ฐ, ์ด ๋•Œ ์˜ฌ๋ผ๊ฐ€๋Š” ๋„์ค‘์— ํด๋ž˜์Šค๋ฅผ ๋ฐœ๊ฒฌํ•˜๋”๋ผ๋„ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋”(์ตœ์ƒ๋‹จ ๋กœ๋”)๊นŒ์ง€ ํ™•์ธ์„ ํ•ด์„œ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋”์—๋„ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

3. ๊ฐ€์‹œ์„ฑ ์ œํ•œ

ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํด๋ž˜์Šค ๋กœ๋“œ๋ฅผ ์š”์ฒญ๋ฐ›์•˜์„ ๋•Œ ์œ„์ž„ ๋ชจ๋ธ์— ์˜ํ•ด์„œ ํด๋ž˜์Šค ๋กœ๋” ์บ์‹œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์—†์œผ๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ด๋•Œ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํŠน์„ฑ์ด ๋ฐ”๋กœ ๊ฐ€์‹œ์„ฑ ์ œํ•œ์ด๋‹ค.

 

 

4. ์–ธ๋กœ๋“œ ๋ถˆ๊ฐ€

ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋กœ unloadํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

5. ์ด๋ฆ„ ๊ณต๊ฐ„

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋Š” ๊ฐ ํด๋ž˜์Šค ๋กœ๋”๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„์œผ๋กœ ๋กœ๋“œ๋œ ํด๋ž˜์Šค๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ณต๊ฐ„

์œ„์ž„ ๋ชจ๋ธ์„ ํ†ตํ•ด์„œ ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋“ค์„ ํ™•์ธํ•ด์•ผํ•  ๋•Œ ํ™•์ธํ•˜๋Š” ๊ณต๊ฐ„์ด ๋ฐ”๋กœ ์ด๋ฆ„ ๊ณต๊ฐ„

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์— ๋ณด๊ด€๋˜๋Š” ๊ธฐ์ค€์€ FQCN Fully Qualified Class Name ์œผ๋กœ ํŒจํ‚ค์ง€ ๋ช…๊นŒ์ง€ ํฌํ•จ๋˜์–ด์žˆ๋Š” ์‹๋ณ„์ž๋ฅผ ๋œปํ•œ๋‹ค.

 

๊ฐ๊ฐ์˜ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๊ฐ์ž ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— FQCN์ด ๊ฐ™์€ ํด๋ž˜์Šค๋ผ๋„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๊ฐ–์ฃผํ•œ๋‹ค. ( ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋กœ๋“œํ•œ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์–ธ๋กœ๋“œ์˜ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค. )

 

 

ํด๋ž˜์Šค ๋กœ๋“œ ๊ณผ์ • 

 

1. ๋กœ๋“œ - ํด๋ž˜์Šค ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•œ๋‹ค.

2. ๊ฒ€์ฆ - ํด๋ž˜์Šค ๋กœ๋“œ ์ „ ๊ณผ์ • ์ค‘์—์„œ ๊ฐ€์žฅ ๋ณต์žกํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ๊ณผ์ •์œผ๋กœ, ์ฝ์–ด๋“ค์ธ ํด๋ž˜์Šค๊ฐ€ ์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ ๋ฐ JVM ๋ช…์„ธ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

3. ์ค€๋น„ - ํด๋ž˜์Šค๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. 

4. ๋ถ„์„ - ํด๋ž˜์Šค์˜ ์ƒ์ˆ˜ ํ’€ ๋‚ด ๋ชจ๋“  ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋‹ค์ด๋ ‰ํŠธ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

5. ์ดˆ๊ธฐํ™” - ํด๋ž˜์Šค ๋ณ€์ˆ˜๋“ค์„ ์ ์ ˆํ•œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. (static ํ•„๋“œ๋“ค์€ ์„ค์ •๋œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” )

 

 

 

 

 

 

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ Runtime Data Area

JVM์ด OS ์œ„์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ํ• ๋‹น๋ฐ›๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ๋ฐ”๋กœ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์ด๋‹ค.

์ด ์˜์—ญ์€ ํฌ๊ฒŒ 5๊ฐ€์ง€, ์„ธ๋ถ„ํ™”์‹œ 6๊ฐ€์ง€๋กœ ๋‚˜๋ˆ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

PC ๋ ˆ์ง€์Šคํ„ฐ, JVM ์Šคํƒ, ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ์€ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ๋˜๊ณ  

ํž™, ๋ฉ”์„œ๋“œ ์˜์—ญ์€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

  • PC ๋ ˆ์ง€์Šคํ„ฐ 
    • Program Counter ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•จ
  • JVM ์Šคํƒ 
    • ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ
    • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ printStackTrace( ) ๋ฉ”์„œ๋“œ๋กœ ๋ณด์—ฌ์ฃผ๋Š” Stack Trace์˜ ๊ฐ ๋ผ์ธ ํ•˜๋‚˜๊ฐ€ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ํ‘œํ˜„ํ•จ
    • ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•จ
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ
    • ์ž๋ฐ” ์™ธ์˜ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์Šคํƒ
    • JAVA Native Interface๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๋Š” C/C++ ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์œผ๋กœ, ์–ธ์–ด์— ๋งž๊ฒŒ ์Šคํƒ ์ƒ์„ฑ
  • ํž™
    • ์ธ์Šคํ„ด์Šค ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
    • Garbage Collection์˜ ๋Œ€์ƒ
    • JVM ์„ฑ๋Šฅ ๋“ฑ์˜ ์ด์Šˆ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์–ธ๊ธ‰๋˜๋Š” ๊ณต๊ฐ„
    • ํž™ ๊ตฌ์„ฑ ๋ฐฉ์‹์ด๋‚˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋ฐฉ๋ฒ• ๋“ฑ์€ JVM ๋ฒค๋”๋“ค์˜ ์žฌ๋Ÿ‰
  • ๋ฉ”์„œ๋“œ ์˜์—ญ 
    • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ
    • JVM์ด ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค.
    • JVM์ด ์ฝ์–ด ๋“ค์ธ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€, ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด, static ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ณด๊ด€ํ•จ
  • ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€
    • JVM ๋™์ž‘์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณณ
    • ๊ฐ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ ˆํผ๋Ÿฐ์Šค๊นŒ์ง€ ๋‹ด๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”
    • ์–ด๋–ค ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ JVM์€ ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์ƒ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„์„œ ์ฐธ์กฐํ•œ๋‹ค.

 

 

 

 

 

์‹คํ–‰ ์—”์ง„ Execution Engine

์‹คํ–‰ ์—”์ง„์€ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰

 

๋ฐ”์ดํŠธ ์ฝ”๋“œ์™€ ๊ฐ ๋ช…๋ น์–ด๋Š” 1๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ OpCode์™€ ์ถ”๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์ด๋ค„์ ธ์žˆ์Œ

์‹คํ–‰ ์—”์ง„์€ ํ•˜๋‚˜์˜ OpCode๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ OpCode๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

์ด ์ˆ˜ํ–‰ ๊ณผ์ •์—์„œ ์‹คํ–‰ ์—”์ง„์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋Š”๋ฐ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ 
    • ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ํ•˜๋‚˜ํ•˜๋‚˜์˜ ํ•ด์„์€ ๋น ๋ฅด์ง€๋งŒ ์ „์ฒด์ ์ธ ์‹คํ–‰ ์†๋„๋Š” ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง„๋‹ค. 
    • JVM ์•ˆ์—์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • JIT ์ปดํŒŒ์ผ๋Ÿฌ Just-In-Time
    • ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๋ฐฉ์‹
    • ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ์ดํ›„์—๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋”์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹
    • ์ „์ฒด์ ์ธ ์‹คํ–‰ ์†๋„๋Š” ์ธํ„ฐํ”„๋ฆฌํŒ…๋ฐฉ์‹๋ณด๋‹ค ๋น ๋ฅด๋‹ค ( ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ์บ์‹œ์—์„œ ๋ฐ”๋กœ ๊บผ๋‚ด์–ด ์‹คํ–‰ํ•ด ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค )
    • ํ•˜์ง€๋งŒ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— JVM์€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ํ˜ธ์ถœ๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ , ์ผ์ • ๊ธฐ์ค€์„ ๋„˜์—ˆ์„ ๋•Œ๋งŒ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ ํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

 

 


์ฐธ์กฐ

SQL Injection

์›น ์‚ฌ์ดํŠธ์˜ ๋ณด์•ˆ์ƒ ํ—ˆ์ ์„ ์ด์šฉํ•ด ํŠน์ • SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์ „์†กํ•˜์—ฌ
๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•ดํ‚น ๊ธฐ๋ฒ•์ด๋‹ค.

๋Œ€๋ถ€๋ถ„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๋Œ€๋กœ ํ•„ํ„ฐ๋งํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค.

๊ณต๊ฒฉ์ด ์‰ฌ์šด ๋‚œ์ด๋„์— ๋น„ํ•ด ํ”ผํ•ด๊ฐ€ ์ƒ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋ณด์•ˆ ์œ„ํ˜‘ 1์ˆœ์œ„๋กœ ๋ถˆ๋ฆด๋งŒํผ ์ค‘์š”ํ•œ ๊ธฐ๋ฒ•์ด๋‹ค.

 

 

 

 

๊ฐ„๋žตํ•œ ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค


์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์›์ด ์ž์‹ ์˜ ์ผ๋ จ๋ฒˆํ˜ธ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๊ธฐ๋ณธ์ ์ธ SQL ์ง„ํ–‰์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผ๋ จ๋ฒˆํ˜ธ ์กฐํšŒ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์›น์„œ๋ฒ„์— ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ€๊ณ  DB์— ์ž…๋ ฅํ•œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ฒˆํ˜ธ DB๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒˆํ˜ธ ์กฐํšŒ๋ฅผ ํด๋ฆญํ•˜๋ฉด url์ด http://numbersearch.com/mysearch?=ohyaelim ์ด ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๊ทธ๋Ÿผ ๊ณต๊ฒฉ์ž์˜ ์กฐํšŒ๋Š” http://numbersearch.com/mysearch?=blackhat  ์—์„œ ํƒˆ์ทจํ•˜๊ณ  ์‹ถ์€ ์ •๋ณด์˜ ์œ ์ €์ธ ohyaelim์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ, ๊ทธ๋ƒฅ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋Š” ํ˜„์žฌ ๋กœ๊ทธ์ธ ๋œ ์ž์‹ ๊ณผ๋Š” ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์›น์„œ๋ฒ„์—์„œ ์ธ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŠน์ • ์ฟผ๋ฆฌ๋ฌธ์„ ๋„ฃ์–ด์ค€๋‹ค. 'ohyaelim' or '1' = '1' ๊ณผ ๊ฐ™์ด ๋„ฃ์–ด๋ถ€๋… 1๊ณผ 1์€ ๊ฐ™๋‹ค๋ผ๋Š” ๊ตฌ๋ฌธ์ด ์ฐธ์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

์ด๋Ÿฌํ•œ SQL Injection์˜ ๊ณต๊ฒฉ ๋ฒ”์œ„๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•˜๋‹ค.

bypass
data access
content change
db delete

 

 

 

 

 

๊ณต๊ฒฉ ์ข…๋ฅ˜ ๋ฐ ๋ฐฉ๋ฒ•


Error based SQL Injection

- ๋…ผ๋ฆฌ์  ์—๋Ÿฌ๋ฅผ ์ด์šฉํ•œ SQL Injection

SQL ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ๋…ผ๋ฆฌ์  ์—๋Ÿฌ๋ฅผ ์ด์šฉํ•œ SQL Injection์€ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๊ณ  ๋Œ€์ค‘์ ์ธ ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค.

์•ž์„œ ์‚ดํŽด๋ดค๋˜ ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹น๋œ๋‹ค. 

 

select * from client where name='ohyaelim' and password='1122'

 

๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋กœ๊ทธ์ธ์˜ ์˜ˆ๋ผ๋ฉด 

 

select * from client where name='ohyaelim' and password=' or '1'='1

 

์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด or ์•ž์˜ ๊ฐ’๊ณผ ๋’ค์— ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ฐธ์ด๋ฉด ์ฐธ์ด๋ฏ€๋กœ ์ด ๊ตฌ๋ฌธ ์ž์ฒด๊ฐ€ ์ฐธ์œผ๋กœ ์ธ์‹๋˜์–ด ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

UNION based SQL Injection = UNION

- ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•œ SQL Injection

SQL UNION์ด๋ž€, ์—ฌ๋Ÿฌ๊ฐœ์˜ SQL๋ฌธ์„ ํ•ฉ์ณ ํ•˜๋‚˜์˜ SQL๋ฌธ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 
์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๊ธฐ์— ์•ž์„œ ์‚ฌ์ „ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค. Union ํ•˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ˆ˜๊ฐ€ ๊ฐ™์•„์•ผ ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํ˜•์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

UNION๊ณผ UNION ALL๋กœ ๋‚˜๋‰˜๋Š”๋ฐ ์ค‘๋ณต ๊ฐ’์„ ์ œ์™ธ ํ•˜๊ณ  ์•ˆํ•˜๊ณ ์˜ ์ฐจ์ด๋‹ค. 

UNION - ์ค‘๋ณต ๊ฐ’์„ ์ œ์™ธํ•œ๋‹ค.

UNION ALL - ์ค‘๋ณต ๊ฐ’์„ ์ œ์™ธํ•˜์ง€ ์•Š๊ณ  ์ „์ฒด๋ฅผ ํ•ฉ์นœ๋‹ค.

 

์ž…๋ ฅ๊ฐ’์„ title ๊ณผ contents ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋ž‘ ๋น„๊ตํ•œ ๋’ค ๋น„์Šทํ•œ ๊ธ€์ž๊ฐ€ ์žˆ๋Š” ๊ฒŒ์‹œ๊ธ€์„ ์ถœ๋ ฅํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ž…๋ ฅ๊ฐ’์œผ๋กœ Union ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์ปฌ๋Ÿผ ์ˆ˜๋ฅผ ๋งž์ถฐ์„œ SELECT ๊ตฌ๋ฌธ์„ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ๋‘ ์ฟผ๋ฆฌ๋ฌธ์ด ํ•ฉ์ณ์„œ์„œ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋ณด์—ฌ์ง€๊ฒŒ ๋œ๋‹ค.

ํ˜„์žฌ ์ธ์ ์…˜ ํ•œ ๊ตฌ๋ฌธ์€ ์‚ฌ์šฉ์ž์˜ id์™€ passwd๋ฅผ ์š”์ฒญํ•˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ์ธ์ ์…˜์ด ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ๊ฒŒ์‹œ๊ธ€๊ณผ ํ•จ๊ป˜ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ฒŒ ๋œ๋‹ค.

 

( * ๋ฌผ๋ก  ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ‰๋ฌธ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ์ธ์ ์…˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ ์ด๋ฏธ ๊ทธ ์ด์ƒ์˜ ๋ณด์•ˆ์œ„ํ—˜์— ๋…ธ์ถœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณต๊ฒฉ๋„ ์—ญ์‹œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. )

 

 

 

 

Blind SQL Injection 

- Boolean based Blind SQL Injection

Blind SQL Injection์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ํŠน์ •ํ•œ ๊ฐ’์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์ง€ ์•Š๊ณ , ๋‹จ์ˆœํžˆ ์ฐธ๊ณผ ๊ฑฐ์ง“์˜ ์ •๋ณด๋งŒ ์•Œ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋กœ๊ทธ์ธ ํผ์— SQL Injection์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋กœ๊ทธ์ธ ์„ฑ๊ณต๊ณผ ๋กœ๊ทธ์ธ ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ, DB์˜ ํ…Œ์ด๋ธ” ์ •๋ณด ๋“ฑ์„ ์ถ”์ถœํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด limit ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋งŒ ์กฐํšŒํ•˜๊ณ , SUBSTR ํ•จ์ˆ˜๋กœ ์ฒซ ๊ธ€์ž๋งŒ, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ASCII ๋ฅผ ํ†ตํ•ด์„œ ascii ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ์— ์กฐํšŒ๋˜๋Š” ํ…Œ์ด๋ธ” ๋ช…์ด Users ๋ผ๋ฉด ‘U’ ์ž๊ฐ€ ascii ๊ฐ’์œผ๋กœ ์กฐํšŒ๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ๋’ค์˜ 100 ์ด๋ผ๋Š” ์ˆซ์ž ๊ฐ’๊ณผ ๋น„๊ต๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฑฐ์ง“์ด๋ฉด ๋กœ๊ทธ์ธ ์‹คํŒจ๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ์ฐธ์ด ๋  ๋•Œ๊นŒ์ง€ ๋’ค์˜ 100์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ๋ณ€๊ฒฝํ•ด ๊ฐ€๋ฉด์„œ ๋น„๊ต๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.  ๊ณต๊ฒฉ์ž๋Š” ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•˜์—ฌ ๋‹จ๊ธฐ๊ฐ„ ๋‚ด์— ํ…Œ์ด๋ธ” ๋ช…์„ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•œ๊ธ€์ž์”ฉ ๋Š์–ด์˜จ ๊ฐ’์„ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๊ณ  ์ž„์˜์˜ ์ˆซ์ž์™€ ๋น„๊ตํ•˜์—ฌ ์ฐธ๊ณผ ๊ฑฐ์ง“์„ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ๊ฐ€๋ฉฐ ๊ณ„์† ์งˆ์˜๋ฅผ ๋ณด๋‚ด์–ด ์ผ์น˜ํ•˜๋Š” ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋‚ด๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ฒฐ๊ณผ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์–ป์–ด๋ƒ„์œผ๋กœ์จ ๊ณต๊ฒฉ์„ ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•œ๋‹ค. ๋งŽ์€ ๋น„๊ต ๊ณผ์ •์„ ์š”ํ•˜๋ฏ€๋กœ ์•…์˜์  ๋ชฉ์ ์„ ๊ฐ€์ง„ ํฌ๋ž˜์ปค๋“ค์€ ์ž๋™ํ™”๋œ ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฒฉํ•œ๋‹ค. 

 

 

Blind SQL Injection

- Time based SQL

Time Based SQL Injection ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํŠน์ •ํ•œ ์‘๋‹ต ๋Œ€์‹ ์— ์ฐธ ํ˜น์€ ๊ฑฐ์ง“์˜ ์‘๋‹ต์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์œ ์ถ”ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋Š” MySQL ๊ธฐ์ค€์œผ๋กœ SLEEP ๊ณผ BENCHMARK ์ด๋‹ค.

 

์œ„์˜ ๊ทธ๋ฆผ์˜ ์˜ˆ์‹œ์—์„œ ๋กœ๊ทธ์ธ ํผ์— ์ฃผ์ž…์ด ๋˜์—ˆ์œผ๋ฉฐ ์ž„์˜๋กœ abc123 ์ด๋ผ๋Š” ๊ณ„์ •์„ ์ƒ์„ฑํ•ด ๋‘์—ˆ๋Š”๋ฐ ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ abc123’ OR (LENGTH(DATABASE())=1 AND SLEEP(2)) – ์ด๋ผ๋Š” ๊ตฌ๋ฌธ์„ ์ฃผ์ž…ํ•œ ์ƒํ™ฉ์ด๋‹ค. 

 ์ฃผ์ž…๋œ ๊ตฌ๋ฌธ์—์„œ, LENGTH(DATABASE()) = 1 ๊ฐ€ ์ฐธ์ด๋ฉด SLEEP(2) ๊ฐ€ ๋™์ž‘ํ•˜๊ณ , ๊ฑฐ์ง“์ด๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ์ˆซ์ž 1 ๋ถ€๋ถ„์„ ์กฐ์ž‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธธ์ด๋ฅผ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ์— SLEEP ์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์น˜ํ™˜์ฒ˜๋ฆฌ ๋˜์–ด์žˆ๋‹ค๋ฉด, ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ BENCHMARK ๋‚˜ WAIT ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค

BENCHMARK ๋Š”
BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye'));
์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ด ๊ตฌ๋ฌธ์„ ์‹คํ–‰ ํ•˜๋ฉด ์•ฝ 4.74์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. 

 

 

Stored Procedure SQL Injection

- ์ €์žฅ๋œ ํ”„๋กœ์‹œ์ €์—์„œ์˜ SQL Injection

stored procedure๋Š” ์ผ๋ จ์˜ ์ฟผ๋ฆฌ๋“ค์„ ๋ชจ์•„ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ๊ฒƒ์ด๋‹ค.

๊ณต๊ฒฉ์— ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋Š” MS-SQL ์— ์žˆ๋Š” xp_cmdshell๋กœ ์œˆ๋„์šฐ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‹จ, ๊ณต๊ฒฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ๊ถŒํ•œ์„ ํš๋“ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ณต๊ฒฉ๋‚œ์ด๋„๊ฐ€ ๋†’์œผ๋‚˜ ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•œ๋‹ค๋ฉด, ์„œ๋ฒ„์— ์ง์ ‘์ ์ธ ํ”ผํ•ด๋ฅผ ์ž…ํž ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

 

 

Mass SQL Injection

- ๋‹ค๋Ÿ‰์˜ SQL Injection ๊ณต๊ฒฉ

 2008๋…„์— ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ๊ณต๊ฒฉ๊ธฐ๋ฒ•์ด๋‹ค.

๊ธฐ์กด SQL Injection ๊ณผ ๋‹ฌ๋ฆฌ ํ•œ๋ฒˆ์˜ ๊ณต๊ฒฉ์œผ๋กœ ๋‹ค๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์กฐ์ž‘๋˜์–ด ํฐ ํ”ผํ•ด๋ฅผ ์ž…ํžˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณดํ†ต MS-SQL์„ ์‚ฌ์šฉํ•˜๋Š” ASP ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฟผ๋ฆฌ๋ฌธ์€ HEX ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉ ํ•˜์—ฌ ๊ณต๊ฒฉํ•œ๋‹ค. ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ’์„ ๋ณ€์กฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•…์„ฑ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ์‚ฌ์šฉ์ž๋“ค์ด ๋ณ€์กฐ๋œ ์‚ฌ์ดํŠธ์— ์ ‘์† ์‹œ ์ข€๋น„PC๋กœ ๊ฐ์—ผ๋˜๊ฒŒ ํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๊ฐ์—ผ๋œ ์ข€๋น„ PC๋“ค์€ DDoS ๊ณต๊ฒฉ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

๋Œ€์‘๋ฐฉ์•ˆ


  • ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ 
  • Prepared Statement ๊ตฌ๋ฌธ ์‚ฌ์šฉ
  • Error Message ๋…ธ์ถœ ๊ธˆ์ง€
  • ์›น ๋ฐฉํ™”๋ฒฝ ์‚ฌ์šฉ

 

์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ

SQL Injection ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•๊ณผ ํ‚ค์›Œ๋“œ๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค. ์„œ๋ฒ„ ๋‹จ์—์„œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒ€์ฆํ•ด์•ผ ํ•œ๋‹ค. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒ€์ฆํ•˜๊ฒŒ ๋˜๋ฉด ์ˆ˜๋งŽ์€ ์ฐจ๋‹จ๋ฆฌ์ŠคํŠธ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•˜๊ณ , ํ•˜๋‚˜๋ผ๋„ ๋น ์ง€๋ฉด ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ณต๋ฐฑ์œผ๋กœ ์น˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋งŽ์ด ์“ฐ์ด๋Š”๋ฐ, ์ด ๋ฐฉ๋ฒ•๋„ ์ทจ์•ฝํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต๊ฒฉ์ž๊ฐ€ SESELECTLECT ๋ผ๊ณ  ์ž…๋ ฅ ์‹œ ์ค‘๊ฐ„์˜ SELECT๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ์น˜ํ™˜์ด ๋˜๋ฉด SELECT ๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ์™„์„ฑ๋˜๊ฒŒ ๋œ๋‹ค. ๊ณต๋ฐฑ ๋Œ€์‹  ๊ณต๊ฒฉ ํ‚ค์›Œ๋“œ์™€๋Š” ์˜๋ฏธ ์—†๋Š” ๋‹จ์–ด๋กœ ์น˜ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

Prepared Statement ๊ตฌ๋ฌธ์‚ฌ์šฉ

 Prepared Statement ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—DBMS๊ฐ€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ํ•˜์—ฌ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐํ•˜๋Š”๋ฐ ๊ทธ ํ›„ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•˜๊ฒŒ ํ•˜์—ฌ ๊ณต๊ฒฉ์ฟผ๋ฆฌ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์€ ์ด๋ฏธ ์˜๋ฏธ ์—†๋Š” ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์ฟผ๋ฆฌ๋ฌธ๋„ ๊ณต๊ฒฉ์ž์˜ ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

Error Message ๋…ธ์ถœ ๊ธˆ์ง€

๊ณต๊ฒฉ์ž๊ฐ€ SQL Injection์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด(ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช… ๋“ฑ)๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋”ฐ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•˜๋‹ค๋ฉด, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ํ•จ๊ป˜ ์—๋Ÿฌ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋ฐ˜ํ™˜ํ—ค ์ฃผ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ํ…Œ์ด๋ธ”๋ช… ๋ฐ ์ปฌ๋Ÿผ๋ช… ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ๋ฌธ์ด ๋…ธ์ถœ์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฐœ์ƒ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ ํ˜น์€ ๋ฉ”์‹œ์ง€๋ฐ•์Šค๋ฅผ ๋„์šฐ๋„๋ก ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

์›น ๋ฐฉํ™”๋ฒฝ ์‚ฌ์šฉ

์›น ๊ณต๊ฒฉ ๋ฐฉ์–ด์— ํŠนํ™”๋˜์–ด์žˆ๋Š” ์›น ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•. ์›น ๋ฐฉํ™”๋ฒฝ์€ ์†Œํ”„ํŠธ์›จ์–ด ํ˜•, ํ•˜๋“œ์›จ์–ด ํ˜•, ํ”„๋ก์‹œ ํ˜• ์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ํ˜•์€ ์„œ๋ฒ„ ๋‚ด์— ์ง์ ‘ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ , ํ•˜๋“œ์›จ์–ด ํ˜•์€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋ฒ„ ์•ž ๋‹จ์— ์ง์ ‘ ํ•˜๋“œ์›จ์–ด ์žฅ๋น„๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ”„๋ก์‹œ ํ˜•์€ DNS ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์›น ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์›น ๋ฐฉํ™”๋ฒฝ์„ ๋จผ์ € ๊ฑฐ์น˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

 

 

 


์ฐธ๊ณ 

link1 link2

NoSQL์ด๋ž€?

์ผ๋ช… "SQL๋งŒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"
ํ‘œ ํ˜•์‹์ด ์•„๋‹ˆ๋ฉฐ, ๊ด€๊ณ„ํ˜• ํ…Œ์ด๋ธ”๊ณผ๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

 

NoSQL์€ Not Only SQL์˜ ์•ฝ์ž๋กœ ๊ธฐ์กด RDBMs ํ˜•ํƒœ์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ์ƒˆ๋กœ์šด ํ˜•ํƒœ๋กœ, ์ˆ˜ํ‰์  ํ™•์žฅ์„ฑ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๋ฌธ์„œ, ๊ทธ๋ž˜ํ”„, ํ‚ค ๊ฐ’, ์ธ ๋ฉ”๋ชจ๋ฆฌ, ๊ฒ€์ƒ‰์„ ํฌํ•จํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค. RDBMS๊ฐ€ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ๊ธฐ์ˆ ์ด๋ผ๋ฉด, NoSQL์€ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ๋งž๋Š” ์ €์žฅ ๊ธฐ์ˆ ์ด๋‹ค.

 

 

 

 

 

 

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ 


NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํƒ์›”ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋น„๋กฏํ•ด ๊ณ ์„ฑ๋Šฅ์˜ ๋งค์šฐ ๊ธฐ๋Šฅ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋ฐ”์ผ, ์›น์ด๋‚˜ ๊ฒŒ์ด๋ฐ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜„๋Œ€์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋‹ค.

  • ์œ ์—ฐ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ๋ฐ˜๋ณต์ ์ธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ด ๊ฐ™์€ ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ˜์ •ํ˜• ๋ฐ ๋ฐ์ดํ„ฐ์— ์ด์ƒ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ํ™•์žฅ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ๊ฐ€์˜ ๊ฐ•๋ ฅํ•œ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ๋ถ„์‚ฐํ˜• ํ•˜๋“œ์›จ์–ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ด์šฉํ•ด ํ™•์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ผ๋ถ€ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž๋“ค์€ ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค๋กœ์„œ ์ด๋Ÿฐ ์šด์˜ ์ž‘์—…์„ ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(๋ฌธ์„œ, ํ‚ค ๊ฐ’, ๊ทธ๋ž˜ํ”„ ๋“ฑ) ๋ฐ ์—‘์„ธ์Šค ํŒจํ„ด์— ๋Œ€ํ•ด ์ตœ์ ํ™”๋˜์–ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ถฉ์กฑํ•˜๋ ค ํ•  ๋•Œ๋ณด๋‹ค ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ์–ป๊ฒŒ ํ•ด์ค€๋‹ค.
  • ๊ณ ๊ธฐ๋Šฅ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ๋งž์ถ”์–ด ํŠน๋ณ„ํžˆ ๊ตฌ์ถ•๋œ ๋›ฐ์–ด๋‚œ ๊ธฐ๋Šฅ์˜ API์™€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ œ๊ณตํ•œ๋‹ค.
SQL ์žฅ์ 
๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ ์Šคํ‚ค๋งˆ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ๊ด€๊ณ„๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต์—†์ด ํ•œ๋ฒˆ๋งŒ ์ €์žฅ
SQL ๋‹จ์ 
๋œ ์œ ์—ฐํ•จ. ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์ „์— ๊ณ„ํšํ•˜๊ณ  ์•Œ๋ ค์•ผ ํ•จ. (๋‚˜์ค‘์— ์ˆ˜์ •ํ•˜๊ธฐ ํž˜๋“ฌ)๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ์–ด์„œ ์กฐ์ธ๋ฌธ์ด ๋งŽ์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์Œ๋Œ€์ฒด๋กœ ์ˆ˜์ง์  ํ™•์žฅ๋งŒ ๊ฐ€๋Šฅํ•จ


NoSQL ์žฅ์ 
์Šคํ‚ค๋งˆ๊ฐ€ ์—†์–ด์„œ ์œ ์—ฐํ•จ. ์–ธ์ œ๋“ ์ง€ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•„๋“œ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ๋ฐ์ดํ„ฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”๋กœ ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ €์žฅ๋จ. ๋ฐ์ดํ„ฐ ์ฝ์–ด์˜ค๋Š” ์†๋„ ๋นจ๋ผ์ง์ˆ˜์ง ๋ฐ ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ชจ๋“  ์ฝ๊ธฐ/์“ฐ๊ธฐ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
NoSQL ๋‹จ์ 
์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ฒฐ์ •์„ ๋ฏธ๋ฃจ๊ฒŒ ๋  ์ˆ˜ ์žˆ์Œ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•จ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์— ์ค‘๋ณต๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ • ์‹œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ (SQL์—์„œ๋Š” ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅ)

 

 

 

NoSQL์˜ ํŠน์ง•


  1. NoSQL์€ RDBMS์™€๋Š” ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์ธ RDBMS๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ๊ด€๊ณ„๋ฅผ Foreign Key ๋“ฑ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด Join ๋“ฑ์˜ ๊ด€๊ณ„ํ˜• ์—ฐ์‚ฐ์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, NoSQL์€ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์€ ๊ทธ๋ƒฅ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ด๋ฉฐ ๊ฐ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ด๋ธ” ๊ฐ„์˜ Join๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. RDBMS์— ๋น„ํ•ด ํ›จ์”ฌ ๋” ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • RDBMS์˜ ๋ณต์žก๋„์™€ ์šฉ๋Ÿ‰์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋“ฑ์žฅํ•œ ๋งŒํผ ํŽ˜ํƒ€๋ฐ”์ดํŠธ๊ธ‰์˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ์ด๋‹ค.
    • NoSQL์€ ๊ธฐ์กด RDBMS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜์˜ ๊ณ ์„ฑ๋Šฅ ๋จธ์‹ ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„ ์ˆ˜์‹ญ ๋Œ€๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ฆ‰ ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ•ด ์ €์žฅํ•˜๊ณ  ๋ถ„์‚ฐ ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒํ˜ธ ๋ณต์ œํ•ด ํŠน์ • ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์—๋„ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด๋‚˜ ์„œ๋น„์Šค ์ค‘์ง€๊ฐ€ ์—†๋Š” ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.
  4. ๊ณ ์ •๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • RDBMS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ๊ฐ€ ์œ ๋™์ ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปฌ๋Ÿผ์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ด๋ฆ„๊ณผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ–๋Š” ๊ฒƒ์ด ํ—ˆ์šฉ๋œ๋‹ค.
    • ์Šคํ‚ค๋งˆ๋ž€? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ ์กฐ๊ฑด์— ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๋ช…์„ธ๋ฅผ ๊ธฐ์ˆ ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค.

 

 

CAP ์ด๋ก 


1. ์ผ๊ด€์„ฑ(Consistency)

์ผ๊ด€์„ฑ์€ ๋™์‹œ์„ฑ ๋˜๋Š” ๋™์ผ์„ฑ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋‹ค์ค‘ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ™์€ ์‹œ๊ฐ„์— ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์ž„์„ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๊ฒƒ์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์ผ๊ด€์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” NoSQL ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๋Š์Šจํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋Š์Šจํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ์ „ํŒŒํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ตœ์ข…์ ์œผ๋กœ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋œ๋‹ค๊ณ  ํ•˜์—ฌ ์ตœ์ข… ์ผ๊ด€์„ฑ ๋˜๋Š” ๊ถ๊ทน์  ์ผ๊ด€์„ฑ์„ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ฐ NoSQL ๋“ค์€ ๋ถ„์‚ฐ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด์„œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฒซ๋ฒˆ์งธ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ตํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋™๊ธฐ์‹ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ทธ๋งŒํผ ๋Š๋ฆฐ ์‘๋‹ต์‹œ๊ฐ„์„ ๋ณด์ด์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. ๋‘๋ฒˆ์งธ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์ž„์‹œ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ๋จผ์ € ์‘๋‹ตํ•œ ๋‹ค์Œ, ํŠน์ • ์ด๋ฒคํŠธ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋น„๋™๊ธฐ์‹ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋น ๋ฅธ ์‘๋‹ต์‹œ๊ฐ„์„ ๋ณด์ธ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์“ฐ๊ธฐ ๋…ธ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.

 

2. ๊ฐ€์šฉ์„ฑ(Availability)

๊ฐ€์šฉ์„ฑ์ด๋ž€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ ํ•ญ์ƒ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ์„ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ๋‚ด๊ณ ์žฅ์„ฑ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๋‚ด๊ณ ์žฅ์„ฑ์„ ๊ฐ€์ง„ NoSQL ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ง๊ฐ€์ง€๋”๋ผ๋„ ์ •์ƒ์ ์ธ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ช‡๋ช‡ NoSQL ์€ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๋ณต์ œ(Replication)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ค‘ ๋…ธ๋“œ์— ์ค‘๋ณต ์ €์žฅํ•˜์—ฌ ๊ทธ ์ค‘ ๋ช‡ ๋Œ€์˜ ๋…ธ๋“œ๊ฐ€ ๊ณ ์žฅ๋‚˜๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ €์žฅ ๋ฐฉ๋ฒ•์—๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ์ €์žฅ์†Œ๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜๋Š” Master-Slave ๋ณต์ œ ๋ฐฉ๋ฒ•๊ณผ ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋กœ ์ค‘๋ณต ์ €์žฅํ•˜๋Š” Peer-to-Peer ๋ณต์ œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

3. ๋„คํŠธ์›Œํฌ ๋ถ„ํ•  ํ—ˆ์šฉ์„ฑ(Partition tolerance)

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

 

 

 

 

 

 

 

NoSQL์˜ ์ข…๋ฅ˜


  • Key-Value DB
    • Key์™€ Value์˜ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ ํ˜•์œผ๋กœ์จ Amazon์˜ Dynamo Paper์—์„œ ์œ ๋ž˜๋˜์—ˆ๋‹ค. Riak, Vodemort, Tokyo ๋“ฑ์˜ ์ œํ’ˆ์ด ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์˜ NoSQL ์ด๋ฉฐ ํ‚ค ํ•˜๋‚˜๋กœ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ํ‚ค-๊ฐ’ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋‹จ์ˆœํ•œ ์ €์žฅ๊ตฌ์กฐ๋กœ ์ธํ•˜์—ฌ ๋ณต์žกํ•œ ์กฐํšŒ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ๊ณ ์† ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์— ์ตœ์ ํ™”๋œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„ ์ •๋ณด, ์›น ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์œ„ํ•œ ์„ธ์…˜ ์ •๋ณด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด, URL ๋‹จ์ถ• ์ •๋ณด ์ €์žฅ ๋“ฑ์— ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ์š”์ฒญ์— ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ์ˆ˜์ • ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. 
ex) Redis

 

 

  • Wide Column DB
    • Big Table DB๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, Google์˜ BigTable Paper์—์„œ ์œ ๋ž˜๋˜์—ˆ๋‹ค. Column Family ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , HBase, Cassandra, Hypertable์ด ์ด์— ํ•ด๋‹น๋œ๋‹ค.
ํ•˜๋‚˜์˜ ํ‚ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ์ปฌ๋Ÿผ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค. ๋ชจ๋“  ์ปฌ๋Ÿผ์€ ํ•ญ์ƒ ํƒ€์ž„ ์Šคํƒฌํ”„ ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค.
๊ตฌ๊ธ€์˜ ๋น…ํ…Œ์ด๋ธ”์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ์ฐจํ›„ ์ปฌ๋Ÿผํ˜• NoSQL ์€ ๋น…ํ…Œ์ด๋ธ”์˜ ์˜ํ–ฅ์„ ๋ฐ›์•˜๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Row key, Column Key, Column Family ๊ฐ™์€ ๋น…ํ…Œ์ด๋ธ” ๊ฐœ๋…์ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ €์žฅ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” ์ปฌ๋Ÿผ์œผ๋กœ ์ปฌ๋Ÿผ์€ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ์ปฌ๋Ÿผ ๊ฐ’, ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ปฌ๋Ÿผ๋“ค์˜ ์ง‘ํ•ฉ์ด ๋กœ์šฐ(Row)์ด๋ฉฐ, ๋กœ์šฐํ‚ค(Row key)๋Š” ๊ฐ ๋กœ์šฐ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ๊ฐ’์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ์šฐ๋“ค์˜ ์ง‘ํ•ฉ์€ ํ‚ค ์ŠคํŽ˜์ด์Šค(Key Space)๊ฐ€ ๋œ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ์ปฌ๋Ÿผ ๋ชจ๋ธ NoSQL ์€ ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ ์ค‘์— ์“ฐ๊ธฐ์— ๋” ํŠนํ™”๋˜์–ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ปค๋ฐ‹๋กœ๊ทธ์™€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ ํ›„ ์‘๋‹ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฝ๊ธฐ ์—ฐ์‚ฐ ๋Œ€๋น„ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์ด ๋งŽ์€ ์„œ๋น„์Šค๋‚˜ ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. ์ฑ„ํŒ… ๋‚ด์šฉ ์ €์žฅ, ์‹ค์‹œ๊ฐ„ ๋ถ„์„์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋“ฑ์˜ ์„œ๋น„์Šค ๊ตฌํ˜„์— ์ ํ•ฉํ•˜๋‹ค.

 

 

  • KDoument DB
    • Lotus Notes์—์„œ ์œ ๋ž˜๋˜์—ˆ์œผ๋ฉฐ, JSON, XML๊ณผ ๊ฐ™์€ Collection ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค. Mongo DB, Cough DB๊ฐ€ ์ด ์ข…๋ฅ˜์— ํ•ด๋‹น๋œ๋‹ค.
ํ‚ค-๊ฐ’ ๋ชจ๋ธ์„ ๊ฐœ๋…์ ์œผ๋กœ ํ™•์žฅํ•œ ๊ตฌ์กฐ๋กœ ํ•˜๋‚˜์˜ ํ‚ค์— ํ•˜๋‚˜์˜ ๊ตฌ์กฐํ™”๋œ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค. ๋…ผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ์กฐํšŒ ๋ฐฉ๋ฒ•์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์œ ์‚ฌํ•˜๋‹ค. ํ‚ค๋Š” ๋ฌธ์„œ์— ๋Œ€ํ•œ ID ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋˜ํ•œ ์ €์žฅ๋œ ๋ฌธ์„œ๋ฅผ ์ปฌ๋ ‰์…˜์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋ฌธ์„œ ์ €์žฅ๊ณผ ๋™์‹œ์— ๋ฌธ์„œ ID ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋ฌธ์„œ ID ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ O(1) ์‹œ๊ฐ„ ์•ˆ์— ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์„œ ๋ชจ๋ธ NoSQL ์€ B ํŠธ๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2 ์ฐจ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. B ํŠธ๋ฆฌ๋Š” ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์˜ ๋น„์œจ์ด 7:3 ์ •๋„์ผ ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. ์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๊ทธ ์ €์žฅ, ํƒ€์ž„๋ผ์ธ ์ €์žฅ, ํ†ต๊ณ„ ์ •๋ณด ์ €์žฅ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค. ex) MongoDB

 

 

  • Graph DB
    • Euler & Graph Theory์—์„œ ์œ ๋ž˜ํ•œ DB์ด๋ฉฐ, Nodes, Relationship, Key-Value ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ฑ„์šฉํ•˜๊ณ  ์žˆ๋‹ค. Neo4J ๋“ฑ์˜ ์ œํ’ˆ์ด ์žˆ๋‹ค.

 

 

 

 

 


References.

link1 link2

 

IPC๋ž€?

ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
์ด์ฒ˜๋Ÿผ ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด IPC ํ†ต์‹ ์ด๋‹ค.
ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC ์„ค๋น„๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

  • IPC = Inter-Process Communication
  • ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์— ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ–‰์œ„

  • ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ชจ๋‘ ์œ ์ €๊ณต๊ฐ„(user-space, user-mode)์—์„œ ๊ฐœ๋ณ„๋กœ OS๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์šดํ–‰์ค‘์— ์žˆ๋‹ค
  • ๋งํ•œ๊ฒƒ ์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์šดํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ ์„œ๋กœ๊ฐ„์— ํ†ต์‹ ์ด ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์ปค๋„ ์˜์—ญ(kernel-space, kernel-mode)์—์„œ IPC(Inter-Process Communication)๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์— ํ†ต์‹ ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค
  • ์ด์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC ๊ธฐ์ˆ ์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

 

 

 

 

IPC์˜ ์ข…๋ฅ˜


PIPE (ํŒŒ์ดํ”„)

  • ํŒŒ์ดํ”„๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ๋งŒ ํ•˜๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•œ๋‹ค
  • ๋ถ€๋ชจ ์ž์‹ ๊ฐ„์— ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค
  • ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ PIPE์˜ ํŠน์ง• ๋•Œ๋ฌธ์— Half-Duplex(๋ฐ˜์ด์ค‘) ํ†ต์‹  ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค
  • PIPE๋Š” ๋ฐ˜์ด์ค‘ ํ†ต์‹ ์ด๊ธฐ์— ํ•˜๋‚˜์˜ ํ†ต์‹ ์„ ๋กœ๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋งŒ์•ฝ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์ฆ‰ ์†ก/์ˆ˜์‹ ์„ ๋ชจ๋‘ ํ•˜๊ธฐ ์›ํ•œ๋‹ค๋ฉด ๋‘ ๊ฐœ์˜ ํŒŒ์ดํ”„๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค
  • read()์™€ write()๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ block mode๋กœ ์ž‘๋™๋˜๊ธฐ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ read ๋Œ€๊ธฐ์ค‘์ด๋ผ๋ฉด read๊ฐ€ ๋๋‚˜๊ธฐ์ „์—๋Š” write๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค

์žฅ์ 

  • PIPE๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํ•œ์ชฝ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹จ์ง€ ์ฝ๊ธฐ๋งŒํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹จ์ง€ ์“ฐ๊ธฐ๋งŒ ํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์ ํ•ฉ

๋‹จ์ 

  • Full-Duplex(์ „์ด์ค‘) ํ†ต์‹  ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด PIPE๋ฅผ ๋‘๊ฐœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ตฌํ˜„์ด ๊ฝค๋‚˜ ๋ณต์žกํ•ด ์งˆ ์ˆ˜ ์žˆ๋‹ค (๊ตณ์ด ์ „์ด์ค‘์„ ํ™œ์šฉํ•ด์•ผํ•œ๋‹ค๋ฉด PIPE๋ง๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š”๊ฒŒ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค)
  • buffer๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘๊ธฐ๋•Œ๋ฌธ์— overflow ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค (read์ฒ˜๋ฆฌ๋ฅผ ๋นจ๋ฆฌ๋นจ๋ฆฌ ํ•ด์ค˜์•ผํ•œ๋‹ค)
  • ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ๊ฐ€๋Šฅ

 

 

 

Named PIPE (์ต๋ช… ํŒŒ์ดํ”„)

  • Linux๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํŒŒ์ผ(fd)๋กœ ํ†ตํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฐœ๋…์„ ๊ธฐ์–ตํ•˜๊ณ  ๋ณด์ž
  • Named PIPE๋Š” ํ†ต์‹ ์„ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • ๋ณดํ†ต PIPE๋Š” ๋ถ€๋ชจ์ž์‹๊ฐ„์— ์‚ฌ์šฉํ•˜๊ณ  Named PIPE๋Š” ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • Named PIPE๋Š” ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด์œ ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์œ„ํ•ด ์ด๋ฆ„์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋งค๊ฐœ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ
  • mkfifo๋ฅผ ํ†ตํ•ด Named PIPE๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, mkfifo๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ์ด๋ฆ„์ด ๋ช…๋ช…๋œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง

์žฅ์ 

  • ๊ธฐ๋ณธ PIPE์™€ ๋น„์Šท

๋‹จ์ 

  • ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ, ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ , read-only or write-only
  • ๊ธฐ๋ณธ PIPE์™€ ๋น„์Šท
PIPE ์™€ Named PIPE

๊ณตํ†ต์ 
๋จผ์ € ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ „๋‹ฌ๋˜๋Š” ํ๋ฆ„์„ ๊ฐ€์ง„๋‹ค๋Š” ์ธก๋ฉด์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ€์ง„๋‹ค

์ฐจ์ด์ 
Named PIPE๋Š” ์‚ฌ์šฉํ•  PIPE๋ฅผ ๋ช…๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 
PIPE๋Š” ์‚ฌ์šฉํ•  PIPE๋ฅผ ๋ช…๋ช…ํ•  ์ˆ˜ ์—†๋‹ค
(๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— PIPE๋Š” ์ต๋ช… PIPE๋ผ ๋ถ€๋ฅธ๋‹ค)


์ถ”๊ฐ€ ์„ค๋ช…
์ต๋ช… ํŒŒ์ดํ”„(PIPE)๋Š” ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
์†ก์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋Š” ์ˆ˜์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์•Œ๊ณ , ์ˆ˜์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋Š” ์†ก์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์•„๋Š” ๊ฒฝ์šฐ
๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ํ”„๋กœ์„ธ์Šค๊ฐ„์— ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•˜๊ณ ์ž ํ•  ๋•Œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ตณ์ด ํŒŒ์ดํ”„์— ์ด๋ฆ„์„ ์ค„ ํ•„์š”๊ฐ€ ์—†์„ ๊ฒƒ์ด๋‹ค

๋ฐ˜๋ฉด, ์ž์‹๊ณผ ๋ถ€๋ชจ ๊ด€๊ณ„๊ฐ€ ์•„๋‹Œ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ pipe๋ฅผ ์ด์šฉํ•ด์„œ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒํŒ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๊ณผ ๋Œ€ํ™”๋ฅผ ํ•˜๋ ค๋ฉด ์ด๋ฆ„์„ ์•Œ์•„์•ผ ํ•˜๋“ฏ pipe์— ์ด๋ฆ„์„ ์ฃผ์–ด์ ธ์•ผ ํ•œ๋‹ค, ๊ทธ๊ฒƒ์ด Named PIPE๋ฅผ ๋งŒ๋“  ์ด์œ ์ด๋‹ค

 

 

 

 

Message Queue (๋ฉ”์‹œ์ง€ ํ)

  • FIFO(First-In First-Out, ์„ ์ž…์„ ์ถœ) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ํ†ต์‹ ์„ค๋น„๋กœ ์ปค๋„์—์„œ ๊ด€๋ฆฌ
  • ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์œผ๋กœ๋ณด๋ฉด ์œ„์— Named PIPE์™€ ๋™์ผํ•˜๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ฐจ์ด์ ์ด๋ผ๋ฉด, Named PIPE๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด๋ผ๋ฉด Message Queue๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋ผ๋Š” ์ 
  • ์–ด๋””์„œ๋‚˜ ๋ฌผ๊ฑด์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์™€ ๊ฐ™๋‹ค ๋ณด๋ฉด ๋œ๋‹ค
  • Message Queue์— ์“ธ ๋ฐ์ดํ„ฐ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™ํž˜์œผ๋กœ์จ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™ใ…‡์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค

์žฅ์ 

  • ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๊ธฐ์— ๋ฐฉ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์žˆ๋‹ค๋ฉด ํ์— ๋„ฃ์€ ํ›„ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ  ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค
  • ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ๋ฐ ๊ฒฝ์Ÿ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • (๋น„๋™๊ธฐ, ๋น„๋™์กฐ, ํƒ„๋ ฅ์„ฑ, ๊ณผ์ž‰, ํ™•์žฅ์„ฑ์ด ์žˆ๋Š”๋ฐ ์ด๊ฑด ๋‹ค๋ฅธ ํฌ์ŠคํŠธ ์ฐธ์กฐํ•ด๋„ ์ถฉ๋ถ„ํ•  ๊ฑฐ ๊ฐ™๋‹ค)

๋‹จ์ 

  • ๋ฉ”์‹œ์ง€๊ฐ€ ์ •๋ง ์ž˜ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค
  • ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋‚˜์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์Œ“์ผ์ˆ˜๋ก ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์ด ํ•„์š”ํ•˜๋‹ค

 

 

 

 

Shared Memory (๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ)

  • ๋ฐ์ดํ„ฐ ๊ณต์œ  ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,
  1. ํ†ต์‹ ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ๋ฒ• (ex. PIPE, Named PIPE, Message Queue, ...)
  2. ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ , ์ฆ‰ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ (ex. Shared Memory, ...)
    • ์ฆ‰, ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ์„ค๋น„์ด๋‹ค
    • Shared Memory(๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ)๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ปค๋„์— ์š”์ฒญํ•˜๋ฉด ์ปค๋„์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด ์ฃผ๊ฒŒ๋˜๊ณ , ์ดํ›„ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฑด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค
    ์žฅ์ 
    • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ค‘๊ฐœ์ž ์—†์ด ๊ณง๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  IPC์ค‘์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค
    • (๋‹ค์‹œ๋งํ•ด, ์ปค๋„๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)
    ๋‹จ์ 
    • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ฐฉ์‹์ด ์•„๋‹ˆ๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผํ•˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์—†๋‹ค
    • ์ปค๋„ ์„ค์ •์— ์ข…์†์ ์ด๊ธฐ์— ์‚ฌ์šฉํ•˜๊ธฐ์ „์— ์ปค๋„์—์„œ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค

 

 

 

Semaphore (์„ธ๋งˆํฌ์–ด)

  • PIPE, Named PIPE, Message Queue์™€ ๊ฐ™์€ ๋‹ค๋ฅธ IPC ์„ค๋น„๋“ค์ด ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด,
  • Semaphore๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณดํ˜ธํ•˜๋Š”๋ฐ ๊ทธ ๋ชฉ์ ์ด ์žˆ๋‹ค
  • ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๊ณต์œ ๋œ ์ž์›์— ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ ๋‹จ์ง€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š”๊ฒƒ์ด ์„ธ๋งˆํฌ์–ด(Semaphore) ์ด๋‹ค
  • ์ฆ‰, ์šด์˜ ์ฒด๊ณ„ ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ๋‚ด์—์„œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘์†์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์‹ ํ˜ธ
  • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ์„ธ๋งˆํฌ์–ด๋ฅผ ์„ธ์›Œ์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€๊ธฐ์‹œํ‚ค๊ณ  ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ํ•ด์ œ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ
๋ฎคํ…์Šค Mutex ์„ธ๋งˆํฌ์–ด Semaphore
๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ ๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ
์ƒํƒœ๊ฐ€ 0, 1 ๋‘๊ฐœ (์ด์ง„ ์„ธ๋งˆํฌ์–ด) ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค
๋ฎคํ…์Šค ์†Œ์œ  ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฎคํ…์Šค๋ฅผ ํ•ด์ œ ์„ธ๋งˆํฌ์–ด๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์„ธ๋งˆํฌ์–ด ํ•ด์ œ
ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์ข…๋ฃŒ ๋  ๋•Œ, ์ž๋™ Clean ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌ
๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค์ง ํ•˜๋‚˜์ผ ๋•Œ ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ
(ํ•œ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ํ™”์žฅ์‹ค์— ๊ฐ”์„๋•Œ ํ™”์žฅ์‹ค ์นธ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ํ™”์žฅ์‹ค ํ•œ ์นธ์— ๋Œ€ํ•ด ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฒƒ์ด ๋ฎคํ…์Šค์ด๊ณ  ํ™”์žฅ์‹ค ์ž์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋œ๋‹ค)

์žฅ์ 

  • ๋งŽ์€ Thread๋“ค์€ ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์„ ํ—ˆ๋ฝ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์ฆ‰, ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์—์„œ ์ถฉ๋Œ์ด ๋‚˜์ง€ ์•Š๋Š”๋‹ค

๋‹จ์ 

  • ๋งŽ์€ Thread๋“ค์€ block์„ ๋‹นํ•œ๋‹ค. ์ฆ‰, CPU๊ฐ€ ๊ฐ€๋งŒํžˆ waitingํ•˜๋Š” ์‹œ๊ฐ„ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

 

Memory Map (๋ฉ”๋ชจ๋ฆฌ ๋งต)

๋ฉ”๋ชจ๋ฆฌ ๋งต๋„ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ธก๋ฉด์—์„œ๋Š” ๋น„์Šทํ•˜๋‹ค

    • ์ฐจ์ด์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๋งต์€ ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งตํ•‘์‹œ์ผœ์„œ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ 
    • ํŒŒ์ผ(fd)๋Š” ๋ฆฌ๋ˆ…์Šค์˜ ์‹œ์Šคํ…œ์˜ ์ „์—ญ์ ์ธ ์ž์›์ด๋ฏ€๋กœ ์ฆ‰, ๋ชจ๋‘ ๊ณต์œ ํ• ์ˆ˜ ์žˆ๋Š” ์ž์›์ด๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค
    ์žฅ์ 
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋ฏธ ์˜ฌ๋ผ์™€์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค
    • ์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ IO์— ๋น„ํ•ด ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค
    • ๋น„๋™๊ธฐ IO๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ๋ฌธ์ œ๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค
    ๋‹จ์ 
    • ์ผ๋ฐ˜ ํŒŒ์ผ IO์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌ
    • ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์˜ค๋žซ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ์— ๋‘˜ ๊ฒƒ์ธ์ง€ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์—†๋‹ค

 

 

 

 

 

Socket (์†Œ์ผ“, UDS = Unix Domain Socket)

  • ๊ฐ™์€ ๋„๋ฉ”์ธ ๋‚ด์—์„œ ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค
  • ์„œ๋ฒ„๋‹จ์—์„œ๋Š” bind, listen, accept ์ง„ํ–‰ํ•ด ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•œ๋‹ค
  • ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ๋Š” connect์„ ํ†ตํ•ด ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ ๋œ ํ›„์—์„œ๋Š” socket์— send ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.
  • ์—ฐ๊ฒฐ์ด ๋๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ close()๋กœ clear ํ•œ๋‹ค
  • ์ฆ‰, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์ง„ํ–‰ํ•œ๋‹ค

์žฅ์ 

  • ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๋‹ค
  • Internet Socket์ธ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Unix Domain์†Œ์ผ“์€ PIPE์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง€๊ณ  ๊ฐ™์€ ์‹œ์Šคํ…œ์—์„œ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ ํŒจํ‚ท์ด ์œ ์‹ค๋˜๊ฑฐ๋‚˜, ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋“ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„๊ฑฐ๋ผ ์žฅ๋‹ด ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฒ”์šฉ์ ์ธ IPC๋กœ์จ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  • ํŒจํ‚ท ๋‹จ์œ„๋กœ ์ฃผ๊ณ  ๋ฐ›์Œ์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

๋‹จ์ 

  • Internet UDP์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค (๋‹ค์ค‘์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค)

 

 

 

 

 

 

 


References.

 

link1 link2

 

 

OSI 7๊ณ„์ธต

ํ‘œ์ค€ํ™”๋ฅผ ํ†ตํ•ด ์ด์งˆ์ ์ธ ํฌํŠธ ๋ฌธ์ œ๋‚˜ ํ”„๋กœํ† ์ฝœ ๋“ฑ์œผ๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ๋น„์šฉ์„ ์ ˆ๊ฐํ–ˆ๋‹ค.
๋˜ํ•œ, ๊ณ„์ธต๋ณ„์˜ ๊ธฐ๋Šฅ๊ณผ ํ†ต์‹  ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๊ณ , ํŠน์ •ํ•œ ๊ณณ์— ์ด์ƒ์ด ์ƒ๊ธฐ๋ฉด ๊ทธ ๋‹จ๊ณ„๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•˜๋‹ค.



 

 

 

1) ๋ฌผ๋ฆฌ(Physical)

๋ฆฌํ”ผํ„ฐ, ์ผ€์ด๋ธ”, ํ—ˆ๋ธŒ ๋“ฑ

์ฃผ๋กœ ์ „๊ธฐ์ , ๊ธฐ๊ณ„์ , ๊ธฐ๋Šฅ์ ์ธ ํŠน์„ฑ์„ ์ด์šฉํ•ด์„œ ํ†ต์‹  ์ผ€์ด๋ธ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

2) ๋ฐ์ดํ„ฐ ๋งํฌ(Data Link)

๋ธŒ๋ฆฟ์ง€, ์Šค์œ„์น˜ ๋“ฑ

๋ฌผ๋ฆฌ ๊ณ„์ธต์„ ํ†ตํ•ด ์†ก, ์ˆ˜์‹ ๋˜๋Š” ์ •๋ณด์˜ ์˜ค๋ฅ˜์™€ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜์—ฌ ์•ˆ์ „ํ•œ ์ •๋ณด์˜ ์ „๋‹ฌ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

MAC ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•ด ํ†ต์‹ ํ•œ๋‹ค.

Frame์— MAC ์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ์—๋Ÿฌ๊ฒ€์ถœ, ์žฌ์ „์†ก, ํ๋ฆ„ ์ œ์–ด๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

3) ๋„คํŠธ์›Œํฌ(Network)

๋ผ์šฐํ„ฐ, IP

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์น  ๋•Œ๋งˆ๋‹ค ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์ง€๊นŒ์ง€ ๊ฐ€์žฅ ์•ˆ์ „ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค. (์ „์†ก ๊ณ„์ธต์ด ์š”๊ตฌํ•˜๋Š” ์„œ๋น„์Šค ํ’ˆ์งˆ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ , ์ ˆ์ฐจ์  ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•œ๋‹ค.)

๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ์ด๋™ํ•  ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜์—ฌ IP ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๊ณ , ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ํŒจํ‚ท์„ ์ „๋‹ฌํ•ด์ค€๋‹ค.

๋ผ์šฐํŒ…, ํ๋ฆ„ ์ œ์–ด, ์˜ค๋ฅ˜ ์ œ์–ด, ์„ธ๊ทธ๋จผํ…Œ์ด์…˜ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

 

 

 

 

 

 

 

4) ์ „์†ก ๊ณ„์ธต(Transport)

TCP, UDP

TCP, UDP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํ†ต์‹ ์„ ํ™œ์„ฑํ™” ํ•œ๋‹ค. ํฌํŠธ๋ฅผ ์—ด์–ด๋‘๊ณ , ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์ „์†ก์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•ด์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–‘ ๋ ๋‹จ์˜ ์‚ฌ์šฉ์ž๋“ค์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  • TCP : ์‹ ๋ขฐ์„ฑ, ์—ฐ๊ฒฐ ์ง€ํ–ฅ์ 
  • UDP : ๋น„์‹ ๋ขฐ์„ฑ, ๋น„์—ฐ๊ฒฐ์„ฑ, ์‹ค์‹œ๊ฐ„

 

TCP ํ”„๋กœํ† ์ฝœ(Transmission Control Protocol)

 

OSI ๊ณ„์ธต๋ชจ๋ธ์˜ ๊ด€์ ์—์„œ ์ „์†ก ๊ณ„์ธต(4๊ณ„์ธต)์— ํ•ด๋‹น

 

์–‘์ข…๋‹จ ํ˜ธ์ŠคํŠธ ๋‚ด ํ”„๋กœ์„ธ์Šค ์ƒํ˜ธ ๊ฐ„์— ์‹ ๋ขฐ์ ์ธ ์—ฐ๊ฒฐ์ง€ํ–ฅ์„ฑ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต

- IP์˜ ๋น„์‹ ๋ขฐ์ ์ธ ์ตœ์„ ํ˜• ์„œ๋น„์Šค์—๋‹ค๊ฐ€ ์‹ ๋ขฐ์ ์ธ ์—ฐ๊ฒฐ์ง€ํ–ฅ์„ฑ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋จ

. ์‹ ๋ขฐ์ ์ธ ์ „์†ก์„ ๋ณด์žฅํ•จ์œผ๋กœ์จ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์ด ํ•œ์ธต ์‰ฌ์›Œ์ง€๊ฒŒ ๋จ

 

1. ์‹ ๋ขฐ์„ฑ ์žˆ์Œ (Reliable)

 

ํŒจํ‚ท ์†์‹ค, ์ค‘๋ณต, ์ˆœ์„œ๋ฐ”๋€œ ๋“ฑ์ด ์—†๋„๋ก ๋ณด์žฅ

TCP ํ•˜์œ„๊ณ„์ธต์ธ IP ๊ณ„์ธต์˜ ์‹ ๋ขฐ์„ฑ ์—†๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ์‹ ๋ขฐ์„ฑ์„ ์ œ๊ณต

 

2. ์—ฐ๊ฒฐ์ง€ํ–ฅ์  (Connection-oriented)                                        โ˜ž TCP ์—ฐ๊ฒฐ

 

๊ฐ™์€ ์ „์†ก๊ณ„์ธต์˜ UDP๊ฐ€ ๋น„์—ฐ๊ฒฐ์„ฑ(connectionless)์ธ ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ, TCP๋Š” ์—ฐ๊ฒฐ์ง€ํ–ฅ์  ์ž„

์ด ๊ฒฝ์šฐ, ๋Š์Šจํ•œ ์—ฐ๊ฒฐ(Loosly Connected)์„ ๊ฐ–์œผ๋ฏ€๋กœ ๊ฐ•ํ•œ ์—ฐ๊ฒฐ์„ ์˜๋ฏธํ•˜๋Š” 

๊ฐ€์ƒํšŒ์„ ์ด๋ผ๋Š” ํ‘œํ˜„ ๋ณด๋‹ค๋Š” ์˜คํžˆ๋ ค ์—ฐ๊ฒฐ์ง€ํ–ฅ์ ์ด๋ผ๊ณ  ๋งํ•จ

์—ฐ๊ฒฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์—ฐ๊ฒฐ์„ค์ • ๋ฐ ์—ฐ๊ฒฐํ•ด์ œ ํ•„์š”          โ˜ž TCP ์—ฐ๊ฒฐ์„ค์ •, TCP ์—ฐ๊ฒฐ์ข…๋ฃŒ

์–‘๋‹จ๊ฐ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜/ํ”„๋กœ์„ธ์Šค๋Š” TCP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์—ฐ๊ฒฐ์„ฑ ํšŒ์„ ์„ ํ†ตํ•˜์—ฌ ์„œ๋กœ ํ†ต์‹ 

 

 

 

UDP ํ”„๋กœํ† ์ฝœ(User Datagram Protocol)

 

์ „์†ก ๊ณ„์ธต์˜ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์˜ ํ•˜๋‚˜ (TCP์— ๋Œ€๋น„๋จ)

- ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ์€ ํ”„๋กœํ† ์ฝœ๋กœ์จ ์™„์ „์„ฑ์„ ๋ณด์ฆํ•˜์ง€ ์•Š์œผ๋‚˜,  

- ๊ฐ€์ƒํšŒ์„ ์„ ๊ตณ์ด ํ™•๋ฆฝํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ์œ ์—ฐํ•˜๋ฉฐ ํšจ์œจ์  ์‘์šฉ์˜ ๋ฐ์ดํƒ€ ์ „์†ก์— ์‚ฌ์šฉ

 

1. ๋น„์—ฐ๊ฒฐ์„ฑ์ด๊ณ , ์‹ ๋ขฐ์„ฑ์ด ์—†์œผ๋ฉฐ, ์ˆœ์„œํ™”๋˜์ง€ ์•Š์€ Datagram ์„œ๋น„์Šค ์ œ๊ณต 

- ๋ฉ”์„ธ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ๋„์ฐฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Œ (ํ™•์ธ์‘๋‹ต ์—†์Œ)

- ์ˆ˜์‹ ๋œ ๋ฉ”์„ธ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋งž์ถ”์ง€ ์•Š์Œ (์ˆœ์„œ์ œ์–ด ์—†์Œ) 

- ํ๋ฆ„ ์ œ์–ด๋ฅผ ์œ„ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ (ํ๋ฆ„์ œ์–ด ์—†์Œ)

- ๊ฒ€์‚ฌํ•ฉ์„ ์ œ์™ธํ•œ ํŠน๋ณ„ํ•œ ์˜ค๋ฅ˜ ๊ฒ€์ถœ ๋ฐ ์ œ์–ด ์—†์Œ (์˜ค๋ฅ˜์ œ์–ด ๊ฑฐ์˜ ์—†์Œ)

UDP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ชฝ์—์„œ ์˜ค๋ฅ˜์ œ์–ด ๊ธฐ๋Šฅ์„ ์Šค์Šค๋กœ ๊ฐ–์ถ”์–ด์•ผ ํ•จ

- ๋ฐ์ดํ„ฐ๊ทธ๋žจ ์ง€ํ–ฅ์˜ ์ „์†ก๊ณ„์ธต์šฉ ํ”„๋กœํ† ์ฝœ (๋…ผ๋ฆฌ์ ์ธ ๊ฐ€์ƒํšŒ์„  ์—ฐ๊ฒฐ์ด ํ•„์š”์—†์Œ)

๋น„์—ฐ๊ฒฐ์ ‘์†์ƒํƒœ ํ•˜์—์„œ ํ†ต์‹  

 

2. ์‹ค์‹œ๊ฐ„ ์‘์šฉ ๋ฐ ๋ฉ€ํ‹ฐ์บ์ŠคํŒ… ๊ฐ€๋Šฅ

- ๋น ๋ฅธ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์‹ค์‹œ๊ฐ„ ์‘์šฉ์— ์ ํ•ฉ

- ์—ฌ๋Ÿฌ ๋‹ค์ˆ˜ ์ง€์ ์— ์ „์†ก ๊ฐ€๋Šฅ (1:ๅคš)

 

3. ํ—ค๋”๊ฐ€ ๋‹จ์ˆœํ•จ

- UDP๋Š” TCP ์ฒ˜๋Ÿผ 16 ๋น„ํŠธ์˜ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜,

- ํ—ค๋”๋Š” ๊ณ ์ •ํฌ๊ธฐ์˜ 8 ๋ฐ”์ดํŠธ(TCP๋Š” 20 ๋ฐ”์ดํŠธ) ๋งŒ ์‚ฌ์šฉ

์ฆ‰, ํ—ค๋” ์ฒ˜๋ฆฌ์— ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ์š”ํ•˜์ง€ ์•Š์Œ

 

 

 

 

 

 

 

 

5)์„ธ์…˜(Session)

API, Socket

๋ฐ์ดํ„ฐ๊ฐ€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ๋ฆฌ์ ์ธ ์—ฐ๊ฒฐ์„ ๋งํ•œ๋‹ค. ํ†ต์‹ ์„ ํ•˜๊ธฐ์œ„ํ•œ ๋Œ€๋ฌธ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ 4๊ณ„์ธต์—์„œ๋„ ์—ฐ๊ฒฐ์„ ๋งบ๊ณ  ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์–ด๋Š ๊ณ„์ธต์—์„œ ํ†ต์‹ ์ด ๋Š์–ด ์กŒ๋‚˜ ํŒ๋‹จํ•˜๊ธฐ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์„ธ์…˜ ๊ณ„์ธต์€ 4 ๊ณ„์ธต๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€์ ์—์„œ ๋ด์•ผ ํ•œ๋‹ค. 

์„ธ์…˜ ์„ค์ •, ์œ ์ง€, ์ข…๋ฃŒ, ์ „์†ก ์ค‘๋‹จ์‹œ ๋ณต๊ตฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

 

์„ธ์…˜ ๊ณ„์ธต(Session layer)์€ ์–‘ ๋๋‹จ์˜ ์‘์šฉ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. 

๋™์‹œ ์†ก์ˆ˜์‹  ๋ฐฉ์‹(duplex), ๋ฐ˜์ด์ค‘ ๋ฐฉ์‹(half-duplex), ์ „์ด์ค‘ ๋ฐฉ์‹(Full Duplex)์˜ ํ†ต์‹ ๊ณผ ํ•จ๊ป˜, ์ฒดํฌ ํฌ์ธํŒ…๊ณผ ์œ ํœด, ์ข…๋ฃŒ, ๋‹ค์‹œ ์‹œ์ž‘ ๊ณผ์ • ๋“ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

์ด ๊ณ„์ธต์€ TCP/IP ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ  ์—†์• ๋Š” ์ฑ…์ž„์„ ์ง„๋‹ค.

 

-> 

ํ†ต์‹ ํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์„ ๋™๊ธฐํ™”ํ•˜๊ณ  ์˜ค๋ฅ˜๋ณต๊ตฌ ๋ช…๋ น๋“ค์„ ์ผ๊ด„์ ์œผ๋กœ ๋‹ค๋ฃฌ๋‹ค. 

ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์„ธ์…˜์„ ํ™•๋ฆฝ/์œ ์ง€/์ค‘๋‹จ (์šด์˜์ฒด์ œ๊ฐ€ ํ•ด์คŒ)

 

 

 

 

 

 

 

 

 

6) ํ‘œํ˜„(Presentation)

JPEG, MPEG ๋“ฑ

๋ฐ์ดํ„ฐ ํ‘œํ˜„์— ๋Œ€ํ•œ ๋…๋ฆฝ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ์•”ํ˜ธํ™”ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

์ฝ”๋“œ ๊ฐ„์˜ ๋ฒˆ์—ญ์„ ๋‹ด๋‹นํ•˜์—ฌ ์‚ฌ์šฉ์ž ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ƒ ์ฐจ์ด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ถ€๋‹ด์„ ์‘์šฉ ๊ณ„์ธต์œผ๋กœ๋ถ€ํ„ฐ ๋œ์–ด์ค€๋‹ค.

ํŒŒ์ผ ์ธ์ฝ”๋”ฉ, ๋ช…๋ น์–ด๋ฅผ ํฌ์žฅ, ์••์ถ•, ์•”ํ˜ธํ™”ํ•œ๋‹ค.

 

 

 

 

 

 

 

 

7) ์‘์šฉ(Application)

HTTP, FTP, DNS ๋“ฑ

์ตœ์ข… ๋ชฉ์ ์ง€๋กœ ์‘์šฉ ํ”„๋กœ์„ธ์Šค์™€ ์ง์ ‘ ๊ด€๊ณ„ํ•˜์—ฌ ์ผ๋ฐ˜์ ์ธ ์‘์šฉ ์„œ๋น„์Šค๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค, ์ „์ž์šฐํŽธ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ๋“ฑ์˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Git์ด๋ž€?


git์€ ์ปดํ“จํ„ฐ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ช…์˜ ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์— ํ•ด๋‹น ํŒŒ์ผ๋“ค์˜ ์ž‘์—…์„ ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค.

์ฃผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์ฝ”๋“œ ๊ด€๋ฆฌ์—๋„ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์–ด๋– ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ง€์†์ ์œผ๋กœ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. (๋‚˜๋Š” ๋ณดํ†ต ์†Œ์Šค์ฝ”๋“œ ๊ด€๋ฆฌ์™€ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”์ ์„ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค)

 

 

 

 

 

Git-flow๋ž€?


Git-flow๋Š” Git์ด ํ™œ์„ฑํ™”๊ฐ€ ๋  2010๋…„ ์ •๋„์— Vincent Driessen์ด๋ผ๋Š” ์‚ฌ๋žŒ์ด ๋งŒ๋“  Git์„ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ์ž‘์—… ์ ˆ์ฐจ์ด๋‹ค. Git-flow๋ผ๊ณ  ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ ๊ฐ™์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹Œ ์•ฝ์†, ๊ทœ์น™๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค.

Vincent Driessen๋˜ํ•œ Git-flow๋Š” ์™„๋ฒฝํ•œ ๋ฐฉ๋ฒ•๋ก ์ด ์•„๋‹Œ, ๊ฐ์ž ํŒ€์— ๋งž๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€ํ˜•ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ๋‹ค.

 

 

 

 

Git-flow์˜ ๋ธŒ๋žœ์น˜


Git-flow์˜ ๋ธŒ๋žœ์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • master ์™€ devleop๋ธŒ๋žœ์น˜
    • master์™€ develop๋ธŒ๋žœ์น˜๊ฐ€ ์กด์žฌํ•˜๊ณ , develop๋ธŒ๋žœ์น˜๋Š” master ๋ธŒ๋žœ์น˜์—์„œ ์‹œ์ž‘๋œ ๋ธŒ๋žœ์น˜.
    Develop๋ธŒ๋žœ์น˜
    • develop๋ธŒ๋žœ์น˜์—๋Š” ์ƒ์‹œ๋กœ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ ์ปค๋ฐ‹๋“ค์ด  ์ถ”๊ฐ€๋˜๊ฒŒ ๋œ๋‹ค.
    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š”  ๊ฒฝ์šฐ  develope ๋ธŒ๋žœ์น˜์—์„œ ์‹œ์ž‘ํ•˜๋Š” feature๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑ
    Feature๋ธŒ๋žœ์น˜
    • ์ด feature๋ธŒ๋žœ์น˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, develop ๋ธŒ๋žœ์น˜๋กœ merge 
    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š”  ๊ฒฝ์šฐ  develope ๋ธŒ๋žœ์น˜์—์„œ ์‹œ์ž‘ํ•˜๋Š” feature๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑ
    release ๋ธŒ๋žœ์น˜
    • develop๋ธŒ๋žœ์น˜์— ์ด๋ฒˆ ๋ฒ„์ „์— ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด merge๋˜์—ˆ๋‹ค๋ฉด , QA๋ฅผ ์œ„ํ•ด develop๋ธŒ๋žœ์น˜์—์„œ release๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑ
    •  QA๋ฅผ ๋ฌด์‚ฌํžˆ ํ†ต๊ณผํ•˜๊ฒŒ๋˜๋ฉด relase๋ธŒ๋žœ์น˜๋ฅผ master์™€ develop๋ธŒ๋žœ์น˜๋กœ  merge
    • QA๋ฅผ  ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋“ค์€ ๋ชจ๋‘ release๋ธŒ๋žœ์น˜์— ์ˆ˜์ •

 

 

master์™€ develop์€ ํ•ญ์ƒ ์œ ์ง€๋˜๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋“ค์ด๋ฉฐ ๊ทธ ์™ธ์— feature, release, hotfixes๋Š” ํ•„์š”ํ•œ ๊ธฐ๊ฐ„์—๋งŒ ์œ ์ง€๋˜๋Š” ๋ณด์กฐ ๋ธŒ๋žœ์น˜๋“ค์ด๋‹ค.

 

 

๋‹ค์Œ์€ Vincent Driessen์˜ ๋ธ”๋กœ๊ทธ์—์„œ Git-flow๋ฅผ ์„ค๋ช…ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€์ด๋‹ค.

 

ํƒ€์ž„๋ผ์ธ์„ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์ฒ˜์Œ์—๋Š” master๋กœ ์‹œ์ž‘ํ•ด develop๋ธŒ๋žœ์น˜๋งŒ ์กด์žฌํ•œ๋‹ค.

์•„์ง ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ฐฐํฌํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— develop๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•œ๋‹ค.

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์ƒ๊ธฐ๋ฉด feature๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด ์ž‘์—…์„ ํ•œ๋‹ค. 

feature๋ธŒ๋žœ์น˜๋Š” ์–ธ์ œ๋‚˜ develop๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.

 

๊ธฐ๋Šฅ์„ ๋‹ค ๊ฐœ๋ฐœํ–ˆ๋‹ค๋ฉด ์ž‘์—…ํ•œ feature๋ธŒ๋žœ์น˜๋ฅผ ๊ฒ€ํ† ํ•œ ํ›„ develop๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•œ๋‹ค.

์ด์ œ ์ด๋ฒˆ ๋ฒ„์ „์—์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋ชจ๋‘ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค๋ฉด QA๋ฅผ ์œ„ํ•ด release๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

QA๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฒ„๊ทธ๋“ค์€ ๋ชจ๋‘ ์ด release๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด fix๋œ๋‹ค.

 

์ด์ œ QA๊ณผ์ •์ด ๋ชจ๋‘ ๋๋‚ฌ๋‹ค๋ฉด release๋ธŒ๋žœ์น˜๋ฅผ master์™€ develop๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  master๋ธŒ๋žœ์น˜์— ๋ฒ„์ „๋ช…์‹œ๋ฅผ ์œ„ํ•œ ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑ ํ›„ ๋ฐฐํฌํ•œ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ์˜ Git-flow์ด๋‹ค.

 

 

 

 

ํ•˜์ง€๋งŒ ๋ฐฐํฌ ํ›„์—๋„ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ๊ทธ๋Ÿด ๊ฒฝ์šฐ hofixes๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

๋ฒ„๊ทธ ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด release๋ธŒ๋žœ์น˜๊ฐ€ ์™„๋ฃŒ๋ฌ์„ ๋•Œ์™€ ๊ฐ™์ด master์™€ develop๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ ํ›„ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์™„๋ฃŒํ–ˆ๋‹ค๋Š” ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

 

 

 

๋ฒ„์ „ ํƒœ๊ทธ


๋ณดํ†ต ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ‘œ์‹œํ• ๋•Œ ๋ฒ„์ „์€ x.x.x์˜ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด ์ˆซ์ž๋“ค์€ ๋ฌด์—‡์„ ์˜๋ฏธํ• ๊นŒ? ๋ฒ„์ „์˜ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” Major Version์„ ์˜๋ฏธํ•œ๋‹ค. Major Version์€ ๋ณดํ†ต 1๋กœ ์‹œ์ž‘ํ•ด์„œ ์†Œํ”„ํŠธ์›จ์–ด ์ „์ฒด์ ์œผ๋กœ ํฐ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ์„๋•Œ ๋ฒ„์ „ ์—…์„ ํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋Š” Minor Version์„ ์˜๋ฏธํ•œ๋‹ค. Miner Version์€ ๋ณดํ†ต 0์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ ์—†๋˜ ๊ธฐ๋Šฅ์˜ ์ถ”๊ฐ€๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ์ˆ˜์ • ๋“ฑ์˜ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฒ„์ „ ์—…์„ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰ ์„ธ ๋ฒˆ์งธ ์ž๋ฆฌ๋Š” Build or Maintenance Version์ด๋ผ๊ณ  ํ•˜๋ฉฐ ์ž์ž˜ํ•œ ๋ฒ„๊ทธ๋‚˜ ๋‚ด๋ถ€์  ์ฝ”๋“œ ๋ณด์•ˆ ๋“ฑ์˜ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฒ„์ „ ์—…์„ ํ•œ๋‹ค. ์ด ๋ฒ„์ „์€ 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€๋งŒ ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

 

 

 

 


Reference.

link1 link2

'๐Ÿ”ฅ > ๊ธฐํƒ€ ๋“ฑ๋“ฑ ๐ŸŽธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๊ฐœ๋ฐœ์ƒ์‹] MVC ํŒจํ„ด์ด๋ž€  (0) 2021.08.18

์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ๋ผ๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ฐ–๋Š”๋‹ค.

  • ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™”ํ•จ
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ค์ • ํด๋ž˜์Šค์—์„œ ์ •๋ณด๋ฅผ ์ฝ์–ด์™€ ์•Œ๋งž์€ Bean ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ Bean์„ ์—ฐ๊ฒฐ(์˜์กด ์ฃผ์ž…)ํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰
  • ์ดˆ๊ธฐํ™”๊ฐ€ ๋๋‚œ ํ›„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ(getBean()๋“ฑ์˜ ์ž‘์—…์œผ๋กœ Bean ๊ฐ์ฒด๋ฅผ ๊ตฌํ•˜๋Š” ํ–‰์œ„ ๋“ฑ)
  • ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ close() ๋งค์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ข…๋ฃŒ, Bean ๊ฐ์ฒด์˜ ์†Œ๋ฉธ

 ๊ธฐ๋ณธ์ ์œผ๋กœ Spring์˜ ApplicationContext ๊ตฌํ˜„์€ ์ดˆ๊ธฐํ™” ํ”„๋กœ์„ธ์Šค์—์„œ ๋ชจ๋“  ์‹ฑ๊ธ€ํ†ค ๋นˆ์„ ์ƒ์„ฑ ๋ฐ ์„ค์ •


> ๋”ฐ๋ผ์„œ Bean์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์กด์žฌ

 

 

// 1. ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”
AnnotationConfigApplicationiContext ctx = 
        new AnnotationConfigContext(AppContext.class);

// 2. ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ ๊ฐ์ฒด๋ฅผ ๊ตฌํ•ด์„œ ์‚ฌ์šฉ
Greeter g = ctx.getBean("greeter", Greeter.class);
String msg = g.greet("์Šคํ”„๋ง");
System.out.println(msg);

// 3. ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ
ctx.close();

 

 

 

 

  1. AnnotationConfigApplicationiContext์˜ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด์„œ context ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    ์ด ์‹œ์ ์—์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”๊ฐ€ ์ง„ํ–‰๋˜๊ณ , ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ค์ • ํด๋ž˜์Šค์—์„œ ์ •๋ณด๋ฅผ ์ฝ์–ด์™€ ์•Œ๋งž์€ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ ๋นˆ์„ ์—ฐ๊ฒฐ(์˜์กด์ฃผ์ž…)ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  2. (์œ„์—์„œ ์ดˆ๊ธฐํ™”๋˜์–ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ) getBean()๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ์— ๋ณด๊ด€๋œ ๋นˆ ๊ฐ์ฒด๋ฅผ ๊ตฌํ•œ๋‹ค.

  3. ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์„ ์ข…๋ฃŒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. AbstractApplicationContext ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.
    AnnotationConfigApplicationiContext๊ฐ€ AbstractApplicationContext๋ฅผ ์ƒ์† ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— close() ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™” -> ๋นˆ ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์˜์กด ์ฃผ์ž…, ์ดˆ๊ธฐํ™”
์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ -> ๋นˆ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ



 

 


์Šคํ”„๋ง ๋นˆ ๊ฐ์ฒด์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

๊ฐ์ฒด์ƒ์„ฑ - ์˜์กด์„ค์ • - ์ดˆ๊ธฐํ™” - ์†Œ๋ฉธ

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋นˆ ๊ฐ์ฒด์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•œ๋‹ค.

 

 

1. ๋นˆ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์†Œ๋ฉธ : ์Šคํ”„๋ง ์ธํ„ฐํŽ˜์ด์Šค

  • org.springframework.beans.factory.InitializingBean
  • org.springframework.beans.factory.DisposableBean

 

๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋’ค, ์ดˆ๊ธฐํ™” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฉด

InitializingBean ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๊ณ  afterPropertiesSet()๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

๋นˆ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฉด DisposableBean ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๊ณ  destroy()๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.


ex. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€, ์ฑ„ํŒ… ํด๋ผ์ด์–ธํŠธ

๋ฉ”์„œ๋“œ ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค

  • org.springframework.beans.factory.InitializingBean
  • org.springframework.beans.factory.DisposableBean

 

 

//์ดˆ๊ธฐํ™” ์ธํ„ฐํŽ˜์ด์Šค
public interface InitializingBean {
    void afterPropertiesSet() throws Exception;
}

//์†Œ๋ฉธ ์ธํ„ฐํŽ˜์ด์Šค
public interface DisposableBean {
    void Destroy() throws Exception;
}

 

 

 

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ฝ˜์†” ํ™”๋ฉด์— ๋งค์„œ๋“œ์—์„œ ์ •์˜ํ•œ "Client.afterPropertiesSet() ์‹คํ–‰" ๋ฐ "Client.destroy() ์‹คํ–‰"์ด ์ถœ๋ ฅ ๋จ

 

๋นˆ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋งˆ๋ฌด๋ฆฌํ•œ ๋’ค์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
๋˜, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— destroy() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.



 

 

2. ๋นˆ ๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์†Œ๋ฉธ : ์ปค์Šคํ…€ ๋ฉ”์„œ๋“œ

์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ๋ง๊ณ  ์™ธ๋ถ€์—์„œ ์ œ๊ณต๋ฐ›์€ ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง ๋นˆ ๊ฐ์ฒด๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋„ ์žˆ๋‹ค.

์Šคํ”„๋ง ์„ค์ •์—์„œ ์ง์ ‘ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

@Beanํƒœ๊ทธ์—์„œ initMethod ์†์„ฑ๊ณผ destroyMethod ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ์™€ ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

//Client2.java
        ...

// ์ง์ ‘ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ ์ง€์ •
public void connect(){
    System.out.println("Client2.connect() ์‹คํ–‰");
}

// ์ง์ ‘ ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ ์ง€์ •
public void close(){
        System.out.println("Client2.close() ์‹คํ–‰");
}

        ...

 

 

 

์ด ๋ฉ”์„œ๋“œ๋“ค์„ @Bean ์• ๋…ธํ…Œ์ด์…˜์˜ initMethod ์†์„ฑ๊ณผ destroyMethod ์†์„ฑ์— ์‚ฌ์šฉ๋  ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ธ connect์™€ close๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

@Bean(initMethod = "connect", destoryMethod = "close") public Client2 clien2(){ ... }

์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•  ๋•Œ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๊ฐ€ ๋‘ ๋ฒˆ ๋ถˆ๋ฆฌ์ง€ ์•Š๋‹ค๋ก ์กฐ์‹ฌํ•˜์ž. afterPropertiesSet()์ด ๋‘๋ฒˆ ๋ถˆ๋ฆด ์œ„ํ—˜ ์žˆ์Œ



 

 


๋นˆ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ ๋ฒ”์œ„

 

// ํ•œ ์‹๋ณ„์ž์— ๋Œ€ํ•ด ํ•œ ๊ฐœ์˜ ๊ฐ์ฒด๋งŒ ์กด์žฌํ•˜๋Š” ๋นˆ
// ์‹ฑ๊ธ€ํ†ค ๋ฒ”์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค.
//client1 == client : true
Client client1 = ctx.getBean("client", Client.class);
Client client2 = ctx.getBean("client", Client.class);

------------------------
// client ๋นˆ์˜ ๋ฒ”์œ„๊ฐ€ ํ”„๋กœํ† ํƒ€์ž…์ผ ๊ฒฝ์šฐ
// ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
// client1 != client : true
Client client1 = ctx.getBean("client", Client.class);
Client client2 = ctx.getBean("client", Client.class);

 

 

 

๋ณ„๋„์˜ ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹ฑ๊ธ€ํ†ค ๋ฒ”์œ„๋ฅผ ๊ฐ–๋Š”๋ฐ, ํŠน์ • ๋นˆ์„ ํ”„๋กœํ†  ํƒ€์ž…์œผ๋กœ ๋นˆ์„ ์„ค์ •ํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค. @Scope์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

@Bean
@Scope("prototype")
public Client client(){
        ...
}

 

 

 

  • ์‹ฑ๊ธ€ํ†ค ๋ฒ”์œ„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๊ณ  ์‹ถ์œผ๋ฉด @Scope("singleton)์ด๋ผ๊ณ  ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • ํ”„๋กœํ†  ํƒ€์ž…์€ ๋ณ„๋„์˜ ์†Œ๋ฉธ ์ฒ˜๋ฆฌ๋ฅผ ์ฝ”๋“œ์—์„œ ์ง์ ‘ ํ•ด์•ผ ํ•œ๋‹ค.

 


Reference.

'์ดˆ๋ณด ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง5 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ' 

+ Recent posts