๐Ÿ™ƒ์•„์ง 2์ฐจ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€!

 

 

๐Ÿ“Œ ์›น ์„œ๋ฒ„์™€ WAS์˜ ์ฐจ์ด๋Š”?

WS (Web Server):

์„œ๋ฒ„ ์ปดํ“จํ„ฐ์— ํŠน์ • ํด๋”, ๋””๋ ‰ํ† ๋ฆฌ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ(์ •์  ์ปจํ…์ธ )์„ ๋„ฃ์–ด๋‘๊ณ  ์ด ํด๋”๊ฐ€ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐฉํ•˜์—ฌ ์„œ๋ฒ„์— ์ง€์ •๋œ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•˜๋ฉด ๊ทธ ํŒŒ์ผ์„ ๋ฐ›์•„ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ ์ธ ์›น์„œ๋ฒ„์˜ ์—ญํ• 

์—ฌ๊ธฐ์„œ ์ •์  ์ปจํ…์ธ ๋ž€

๋ณ€ํ™”๊ฐ€ ์—†๋Š” ์ปจํ…์ธ ๋กœ ์„œ๋ฒ„์— ์ €์žฅํ•ด๋‘๊ณ  ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ๋ฐ›์œผ๋ฉด ์‘๋‹ต๋งŒ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋ฉฐ ์–ด๋А ์‚ฌ์šฉ์ž์—๊ฒŒ๋“  ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. 

 

ํด๋ผ์ด์–ธํŠธ(์›น๋ธŒ๋ผ์šฐ์ €) ์š”์ฒญ์ด ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฉด ๋™์  ์ปจํ…์ธ ๋ฅผ WS๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— WAS์— ์š”์ฒญํ•˜๊ณ , WAS์—์„œ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜

  • ์˜ˆ์‹œ : Apache, Nginx, IIS
๋”๋ณด๊ธฐ

๐Ÿ“

Apache : 

Nginx :

IIS : 

 

WAS ( Web Application Server):

WAS๋Š” DB์กฐํšŒ ๋ฐ ๋‹ค์–‘ํ•œ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋™์  ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ Application ์„œ๋ฒ„

  • ๋™์  ์ปจํ…์ธ  ์ฒ˜๋ฆฌ : ๋ˆ„๊ฐ€ ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์„œ๋ฒ„์— ์š”์ฒญํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ์ปจํ…์ธ 
  • (์ •์  ์ปจํ…์ธ  ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅ ์™œ๋ƒ๋ฉด WS๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ) 
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์›น ์„œ๋ฒ„  + ์ปจํ…Œ์ด๋„ˆ ํ˜•ํƒœ (WS๊ฐ€ ๋ณด๋‚ธ ๋™์  ์„œ๋ฒ„ ์ปจํ…์ธ ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ WS๋กœ ๋ณด๋‚ด์ฃผ๋Š” ์—ญํ• )
  • ์˜ˆ์‹œ : Tomcat, Jeus

WAS ํ•˜๋‚˜๋กœ ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํŽ˜์ด์ง€๋ฅผ ๋ฐฐํฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ ์™œ ์›น์„œ๋ฒ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ• ๊นŒ์š”?

  • ๋ณด์•ˆ ๊ธฐ๋Šฅ : ์›น์„œ๋ฒ„์˜ Reverse Proxy ๊ธฐ๋Šฅ

๊ณต๊ฒฉ์— ๋Œ€ํ•ด ์•ž๋‹จ์— WS ๋ฐฐ์น˜ํ•˜์—ฌ ์ค‘์š” ์ •๋ณด๊ฐ€ ์žˆ๋Š” WAS๊นŒ์ง€ ์ „ํŒŒ๋˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ WAS๋‹จ์—์„œ์˜ ์ค‘์š” ์ •๋ณด๊ฐ€ ๋ฐ–์œผ๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค. ์„œ๋ฒ„ ๋‚ด๋ถ€์ ์œผ๋กœ ํŒŒ์ผ๋“ค์ด ์–ด๋А ํด๋”์— ์œ„์น˜ํ•˜๊ณ , ์„œ๋น„์Šค๊ฐ€ ๋ช‡ ๋ฒˆ ํฌํŠธ๋กœ ๋Œ๊ณ  ์žˆ๋Š” ์ง€ ๋“ฑ ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ์ˆจ๊ธด๋‹ค.

  • ์›น์„œ๋ฒ„์˜ reverse proxy๊ฐ€ ๊ฐ–๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ Pool ์‚ฌ์ด์— ์œ„์น˜ํ•˜์—ฌ ํ•œ ์„œ๋ฒ„๋กœ ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋˜์ง€ ์•Š๋„๋ก ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๊ตฌ์กฐ์  ์œ ์—ฐ์„ฑ : ํ•˜๋‚˜์˜ ์›น์„œ๋ฒ„๋ฅผ ๋‘๊ณ  ์—ฌ๋Ÿฌ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ WS๊ฐ€ ์ผ์ข…์˜ ๋ผ์šฐํ„ฐ ์—ญํ• ์„ ํ•˜์—ฌ,  ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ, fail over, failback, ๋ฌด์ค‘๋‹จ ์šด์˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. 
  • WAS๋งŒ ์‚ฌ์šฉํ•˜๋ฉด WAS์žฅ์• ์‹œ ์˜ค๋ฅ˜ ํ™”๋ฉด ๋…ธ์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— WS์ด์šฉํ•ด ์žฅ์• ์— ๋Œ€ํ•œ ์•Œ๋ฆผ๊ธฐ๋Šฅ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

๋”๋ณด๊ธฐ

๐Ÿ“๊ณตํ†ต์ 

  • HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘, HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ „์†ก

๐Ÿ“์ •์  ํŽ˜์ด์ง€ 

์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€๋กœ ์„œ๋ฒ„์—์„œ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค

์‚ฌ์šฉ์ž ์š”์ฒญ์— ๊ด€๊ณ„ ์—†์ด ํ•ญ์ƒ ๋™์ผ

 

๐Ÿ“๋™์  ํŽ˜์ด์ง€

์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ณ€ํ•˜๋Š” ํŽ˜์ด์ง€๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

์‚ฌ์šฉ์ž ์š”์ฒญ์— ๋”ฐ๋ผ ๋ณ€ํ™”

 

๐Ÿ“๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ

 ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์—…๋ฌด ํ˜น์€ ์š”์ฒญ(Load)์„ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋กœ ๋‚˜๋ˆ„์–ด(Balancing) ์ฒ˜๋ฆฌํ•˜๋Š” ์žฅ์น˜ ๋˜๋Š” ๊ธฐ์ˆ ์„ ์˜๋ฏธ

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ Pool ์‚ฌ์ด์— ์œ„์น˜ํ•˜์—ฌ ํ•œ ์„œ๋ฒ„๋กœ ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋˜์ง€ ์•Š๋„๋ก ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•ด ๊ฐ๊ฐ์˜ ์„œ๋ฒ„๊ฐ€ ์ตœ์ ์˜ ํผํฌ๋จผ์Šค๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋•๋Š”๋‹ค. 

 

๐Ÿ“๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์˜ health check

์„œ๋ฒ„์— ์ฃผ๊ธฐ์ ์œผ๋กœ http์š”์ฒญ์„ ๋ณด๋‚ด ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ

health check ์„ค์ •

- interval : health check ํ†ตํ•ด ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธํ•˜๋Š” ์š”์ฒญ ์ „์†ก (default : 5์ดˆ)

- fails : ์š”์ฒญ ์‹คํŒจ์‹œ ์„œ๋ฒ„๊ฐ€ ๋น„์ •์ƒ์ด๋ผ๊ณ  ์ธ์ง€ (default : 1ํšŒ)

- passes : ์„œ๋ฒ„๊ฐ€ ๋‹ค์‹œ ๋ณต๊ตฌ๋˜์–ด ์š”์ฒญ์ด ์„ฑ๊ณตํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์œผ๋กœ ์ธ์ง€ (default : 1ํšŒ)

 

๐Ÿ“Scale Up, Scale Out

 

๐Ÿ“fail-over, ์žฅ์•  ๊ทน๋ณต, ์žฅ์•  ์กฐ์น˜, ์‹œ์Šคํ…œ ๋Œ€์ฒด ์ž‘๋™ ๋“ฑ

์ปดํ“จํ„ฐ ์„œ๋ฒ„, ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ๋“ฑ์—์„œ ์ด์ƒ์ด ์ƒ๊ฒผ์„ ๋•Œ ์˜ˆ๋น„ ์‹œ์Šคํ…œ์œผ๋กœ ์ž๋™ ์ „ํ™˜๋˜๋Š” ๊ธฐ๋Šฅ

ํ‰์†Œ ์šด์˜๋˜๋Š” ์‹œ์Šคํ…œ์„ Active,  ๊ฐ™์€ ์„ธํŒ…์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋Œ€๊ธฐํ•˜๋Š” ์‹œ์Šคํ…œ์„ Passive ๋ผ๊ณ  ํ•˜๋Š”๋ฐ Active ์‹œ์Šคํ…œ์ด ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Passive ์‹œ์Šคํ…œ์ด Active ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์„œ๋น„์Šค๋ฅผ ์ด์–ด ์šด์˜ํ•˜๊ฒŒ ๋œ๋‹ค. 

๋†’์€ ๊ฐ€์šฉ์„ฑ์„ ์š”๊ตฌํ•  ๋•Œ ๊ตฌ์„ฑํ•œ๋‹ค 

 

๐Ÿ“๋†’์€ ๊ฐ€์šฉ์„ฑ, ๊ณ ๊ฐ€์šฉ์„ฑ (HA / High Availability)

๊ฐ€์šฉ์„ฑ์ด๋ž€ ์ผ๋‹จ ์„œ๋น„์Šค๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•œ ์ •๋„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ

๊ณ ๊ฐ€์šฉ์„ฑ์ด๋ž€ ์„œ๋น„์Šค๊ฐ€ ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ง€์†์ ์œผ๋กœ ์ •์ƒ ์šด์˜์ด ๊ฐ€๋Šฅํ•œ ์„ฑ์งˆ์„ ๋งํ•œ๋‹ค. 

+ ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•

์‹œ์Šคํ…œ ์ด์ค‘ํ™”, ์‹œ์Šคํ…œ ํ™•์žฅ ๋“ฑ 

 

๐Ÿ“failback

ํŽ˜์ผ ์˜ค๋ฒ„์— ๋”ฐ๋ผ ์ „ํ™˜๋œ ์„œ๋ฒ„, ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ๋“ฑ์„ ์ด์ƒ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ์ฒ˜๋ฆฌ

 

๐Ÿ“๋‹จ์ผ ์žฅ์• ์ , SPOF (single point of failure)

์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์ฒด ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜๋Š” ์š”์†Œ. ์ด์ค‘ํ™”๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด SPOF์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

 

๐Ÿ“๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜

- ๋ผ์šด๋“œ๋กœ๋นˆ ๋ฐฉ์‹

- ๊ฐ€์ค‘ ๋ผ์ด๋ˆ„๋“œ๋กœ๋นˆ ๋ฐฉ์‹

- IP ํ•ด์‹œ ๋ฐฉ์‹

- ์ตœ์†Œ ์—ฐ๊ฒฐ ๋ฐฉ์‹

- ์ตœ์†Œ ๋ฆฌ์Šคํฐ ํƒ€์ž„

 

๐Ÿ“๋ถ€ํ•˜๋ถ„์‚ฐ์— ๊ฐ€์žฅ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” L4, L7 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ๋Œ€ํ•ด ์„ค๋ช…

- L4, L7?

OSI 7๊ณ„์ธต์—์„œ์˜ Layer ๋ฒˆํ˜ธ, ์ƒ์œ„ ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์žฅ๋น„์ผ์ˆ˜๋ก(1 -> 7 ์ƒ์œ„) ํ•˜์œ„ ๊ณ„์ธต์˜ ์žฅ๋น„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ƒ์œ„๋กœ ๊ฐˆ์ˆ˜๋ก ๋”์šฑ ์ •๊ตํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ฐ€๋Šฅ

 

- L4 : ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์ด๋‚˜ ํŠธ๋žœ์ŠคํฌํŠธ ๊ณ„์ธต์˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐ, IP์ฃผ์†Œ๋‚˜ ํฌํŠธ๋ฒˆํ˜ธ, MAC์ฃผ์†Œ, ์ „์†ก ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

 

- L7 : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐ, HTTP ํ—ค๋”, ์ฟ ํ‚ค ๋“ฑ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๊ธฐ์ค€์œผ๋กœ ํŠน์ • ์„œ๋ฒ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํŒจํ‚ท์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ณ  ๊ทธ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๋ถ„์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ

 

 

๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ(Load Balancer)์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•

[BY ๊ฐ€๋น„์•„] ํ˜„๋Œ€์˜ ๋ชจ๋“  ์ •๋ณด๋Š” ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์˜ ๋ฐœ๋‹ฌ์€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๋ณด๋‹ค...

m.post.naver.com

 

๐Ÿ“๋ผ์šฐํ„ฐ๋ž€ 

์ปดํ“จํŒ… ๋””๋ฐ”์ด์Šค์™€ ๋„คํŠธ์›Œํฌ๋ฅผ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋„คํŠธ์›Œํ‚น ๋””๋ฐ”์ด์Šค

 

๐Ÿ“๋ผ์šฐํŒ… 

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

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

 

๐Ÿ“๋ ˆ์ดํ„ด์‹œ, ์ฒ˜๋ฆฌ๋Ÿ‰

๋ถ„๋ฆฌ ํ•˜๋ฉด ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์™œ ์ข‹์•„์งˆ๊นŒ?

 

๐Ÿ“Tomcat ์ด๋ž‘ Apache ์ฐจ์ด (๊ผญ ์•Œ์•„๋‘๊ธฐ)

Apache๊ฐ€ WS

Tomcat์€ ์ž๋ฐ”์—์„œ ์“ฐ์ด๋Š” WAS ์ค‘ ํ•˜๋‚˜, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ†ฐ์บฃ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

JAVA EE ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, JSP์™€ Servlet์„ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
์•„ํŒŒ์น˜์„œ๋ฒ„์™€๋Š” ๋‹ค๋ฅด๊ฒŒ DB์—ฐ๊ฒฐ, ๋‹ค๋ฅธ ์‘์šฉํ”„๋กœ๊ทธ๋žจ๊ณผ ์ƒํ˜ธ ์ž‘์šฉ ๋“ฑ ๋™์ ์ธ ๊ธฐ๋Šฅ๋“ค์„
์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ญ˜๊นŒ์š”?

์„œ๋ธ”๋ฆฟ : 

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค.

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ:

  • ์„œ๋ธ”๋ฆฟ๋“ค์„ ๋ชจ์•„ ๊ด€๋ฆฌ
  • ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑ
  • ์ž‘์—…์ด ๋๋‚œ ์„œ๋ธ”๋ฆฟ ์Šค๋ ˆ๋“œ ์ž๋™ ์ œ๊ฑฐ

 

๐Ÿ“๋ธŒ๋ผ์šฐ์ €๋งŒ ์š”์ฒญ ๊ฐ€๋Šฅํ•œ๊ฑฐ ์•„๋‹ˆ๋‹ˆ๊นŒ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋‹ค์‹œ ์ •๋ฆฌํ•  ๊ฒƒ 

์š”์ฒญ์ด ๋ชจ๋ฐ”์ผ์ธ์ง€ ๋ธŒ๋ผ์šฐ์ €์ธ์ง€ ๋“ฑ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„์ด ๊ฐ€๋Šฅํ•œ์ง€

 

๐Ÿ“์›น์„œ๋ฒ„ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ CDN

 

๐Ÿ“๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ–ˆ์„ ๋•Œ ์Šคํ”„๋ง์—์„œ ์ด์ ์ด ์žˆ๋Š”์ง€

์Šคํ”„๋ง์€ Apache Tomcat์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ช‡๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ฒ˜๋ฆฌ๋Ÿ‰

์Šคํ”„๋ง ๋ถ€ํŠธ์— ๋‚ด์žฅ๋œ Tomcat์€ ๋‹ค์ค‘ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ๋ถ€ํŒ…ํ•  ๋•Œ ์Šค๋ ˆ๋“œ ์ปฌ๋ ‰์…˜์ธ Thread Pool์„ ์ƒ์„ฑํ•œ๋‹ค. ์œ ์ € ์š”์ฒญ์ด ์˜ค๋ฉด ์ด ์Šค๋ ˆ๋“œ ํ’€์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. 

 

 

๐Ÿ“๋””๋ ‰ํ† ๋ฆฌ ์šฉ๋Ÿ‰ ์ดˆ๊ณผ์‹œ ์–ด๋–ป๊ฒŒ ํ•ธ๋“ค๋ง ํ•  ๊ฒƒ์ธ๊ฐ€

EVS? EBS?๋ฅผ ์ฆ์„ค ๋˜๋Š” S3๋ฅผ ํ™œ์šฉํ•ด ์ •์  ์ปจํ…์ธ  ๋‚ด๋ ค์ฃผ๊ธฐ

 

 

 

๐Ÿ“Œ Stack๊ณผ Queue ๊ทธ๋ฆฌ๊ณ  Array์™€ Linked List ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๋ง์”€ํ•ด์ฃผ์‹œ๊ณ  ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๐Ÿ“Stack vs Queue

  • ์Šคํƒ์€ Last In First Out ํ›„์ž…์„ ์ถœ ๊ตฌ์กฐ๋กœ ๋งˆ์ง€๋ง‰์— ์ €์žฅ๋œ ๊ฒƒ์„ ๋จผ์ € ๊บผ๋‚ด์–ด ์“ฐ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์Œ“์ธ ๋ฐ์ดํ„ฐ์ธ top์„ ํ†ตํ•ด์„œ ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋„ฃ์€ ๊ฒƒ์„ ๋‹ค์‹œ ๊บผ๋‚ด ์“ฐ๋Š” ํŠน์ง• ๋•Œ๋ฌธ์— ์›น ๋ธŒ๋ผ์šฐ์ € ๋’ค๋กœ ๊ฐ€๊ธฐ๋‚˜ ๊ฐ€์žฅ ์ตœ๊ทผ ์ˆ˜์ • ๋‚ด์—ญ์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ์‹คํ–‰ ์ทจ์†Œ undo, ๋ฌธ์ž์—ด ์—ญ ์ˆœ ๋“ฑ์˜ ๊ธฐ๋Šฅ์œผ๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ๋Š” First In First Out์˜ ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ๋กœ ๋จผ์ € ์ €์žฅํ•œ ๊ฒƒ์„ ๋จผ์ € ๊บผ๋‚ด๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์‚ญ์ œ ์—ฐ์‚ฐ๋งŒ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณณ์„ Front๋ผ๊ณ  ํ•˜๋ฉฐ ์‚ฝ์ž…๋งŒ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณณ์„ Rear๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ๋ฒˆ์„ ์ง€์ผœ์•ผํ•˜๋Š” ๋ชจ๋“  ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ฆฐํŠธ, ์˜ˆ๋งค ๋Œ€๊ธฐ์—ด ๋“ฑ์— ์‚ฌ์šฉ 
๋”๋ณด๊ธฐ

๐Ÿ“Queue ์ข…๋ฅ˜

Queue ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋„ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋Š”๋ฐ 

์šฐ์„ ์ˆœ์œ„ ํ (PriorityQueue) : ์ €์žฅํ•œ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ๊บผ๋‚ด๋Š” ๋ฐฉ์‹

Deque(Double-Ended Queue) : ๊ฐ๊ฐ ํ•œ์ชฝ๋งŒ ์ถ”๊ฐ€ ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๋Š” Queue์™€ ๋‹ฌ๋ฆฌ ์–‘์ชฝ ๋์—์„œ ์ถ”๊ฐ€ ์ƒ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด Deque ๊ตฌํ˜„์ฒด ์ค‘์— ArrayDeque์™€ LinkedList๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ“๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์˜ Stack ๋Œ€ํ•ด์„œ๋Š” ์•„๋‚˜?

ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ,  ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๊ณ  ํ•จ์ˆ˜ ์ข…๋ฃŒ์‹œ ์‚ฌ๋ผ์ง„๋‹ค. Stack ์˜์—ญ์—์„œ๋Š” ์ด๋ฆ„์ฒ˜๋Ÿผ Stack ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›„์ž… ์„ ์ถœ ๋ฐฉ์‹์œผ๋กœ push๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  pop์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ถœํ•œ๋‹ค. 

 

๐Ÿ“๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ 

Code : ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ, ํ…์ŠคํŠธ ์˜์—ญ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒ ๋ ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ„์† ๋‚จ์•„ ์žˆ๋Š”๋‹ค. 

Data : ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ. ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ ์ข…๋ฃŒ์‹œ ์†Œ๋ฉธํ•œ๋‹ค. 

Stack : ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ,  ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๊ณ  ํ•จ์ˆ˜ ์ข…๋ฃŒ์‹œ ์‚ฌ๋ผ์ง„๋‹ค. Stack ์˜์—ญ์—์„œ๋Š” ์ด๋ฆ„์ฒ˜๋Ÿผ Stack ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›„์ž… ์„ ์ถœ ๋ฐฉ์‹์œผ๋กœ push๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  pop์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ถœํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ํ• ๋‹นํ•œ๋‹ค. 

Heap : ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ๊ณต๊ฐ„์„ ํ• ๋‹น, ํ•ด์ œํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ๋Ÿฐ ํƒ€์ž„ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค. new ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ํž™ ์˜์—ญ์€ ์„ ์ž…์„ ์ถœ์˜ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹นํ•œ๋‹ค(Stack๊ณผ๋Š” ๋ฐ˜๋Œ€๋ฐฉํ–ฅ). 

 

๐Ÿ“์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ

ํ•œ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋„˜์น˜๋Š” ํ˜„์ƒ์ด๋‹ค. 

ํž™์€ ๋ฉ”๋ชจ๋ฆฌ ์œ„์ชฝ ์ฃผ์†Œ ๋ถ€ํ„ฐ ํ• ๋‹นํ•˜๊ณ , ์Šคํƒ์€ ๋ฉ”๋ชจ๋ฆฌ ์•„๋ž˜์ชฝ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น๋˜์–ด ๊ฐ ์˜์—ญ์ด ์ƒ๋Œ€ ๊ณต๊ฐ„์„ ์นจ๋ฒ”ํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ํž™์ด ์Šคํƒ์„ ์นจ๋ฒ”ํ•˜๋ฉด ํž™ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ฐ˜๋Œ€๋กœ ์Šคํƒ์ด ํž™์„ ์นจ๋ฒ”ํ•˜๋ฉด ์Šคํƒ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๋ผ๊ณ  ํ•œ๋‹ค. 

 

๐Ÿ“ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

 

๐Ÿ“DFS ์—์„œ stack์ด๋‚˜ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ‘ธ๋Š”๋ฐ ์™œ ์ด๊ฑธ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ

 

๐Ÿ“java์˜ ์ปฌ๋ ‰์…˜์˜ stack์€ ๋ฌด์—‡์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ์„๊นŒ์š”? ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ์„๊นŒ

java์—์„œ stack์€ vector๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ vector๋Š” sychronized ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์–ด ๊ถŒ๊ณ  ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋Œ€์‹  Deque๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์žˆ๋‹ค. 

 

๐Ÿ“Stack์„ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

ArrayList๋กœ ๊ตฌํ˜„, ArrayList๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ Stack๊ตฌํ˜„์ด ์‰ฝ๊ธฐ๋•Œ๋ฌธ(?)

 

 

๐Ÿ“ Array vs LinkedList

๋ฐฐ์—ด๊ณผ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋Š” ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ๋‚˜์—ด๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ์ง€๋งŒ, ๊ทธ ์—ฐ๊ฒฐ ๋ฐฉ์‹์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

  • ์—ฐ๊ฒฐ์˜ ์ฐจ์ด

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

 

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฐ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์—์„œ์˜ ์ฐจ์ด

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

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

 

  • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ฐจ์ด

๋ฐฐ์—ด์€ ์„ ์–ธ์‹œ ์ปดํŒŒ์ผ ๋‹น์‹œ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์–ด ์ •์  ๋ฉ”๋ชจ๋ฆฌ๋กœ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค

Lisnked list์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ํ• ๋‹น๋˜์–ด ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋ฐ›๋Š”๋‹ค. 

 

๋”๋ณด๊ธฐ

๐Ÿ“ArrayList ์‚ฌ์ด์ฆˆ ์ฆ๊ฐ€ํ•˜๋Š” ์›๋ฆฌ

List๊ฐ€ ์™ธ๋ถ€์ ์œผ๋กœ size๋ฅผ ์ž์œ ์ž์ œ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

๋ฐฐ์—ด์„ ๋”์ด์ƒ ์ €์žฅํ•  ๊ณต๊ฐ„์ด ์—†์œผ๋ฉด ๋ณด๋‹ค ๊ธฐ์กด ๋ฐฐ์—ด์˜ 1.5๋ฐฐ ํฐ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์„œ ๊ธฐ์กด ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๋‚ด์šฉ์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ์ €์žฅํ•œ๋‹ค. 

 

๐Ÿ“๊นŠ์€ ๋ณต์‚ฌ vs ์–•์€ ๋ณต์‚ฌ

ArrayList๋Š” ์–•์€ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. ์™œ?

- ๊นŠ์€ ๋ณต์‚ฌ

๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ "์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊นŒ์ง€" ๋ณต์‚ฌํ•จ

๋ณ„๋„์˜  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ณต์‚ฌํ•œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ ์›๋ณธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

 

- ์–•์€ ๋ณต์‚ฌ

๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ "๊ฐ์ฒด๋งŒ, ์ฃผ์†Œ๊ฐ’๋งŒ"์„ ๋ณต์‚ฌํ•จ

๋”ฐ๋ผ์„œ ๋‘ ์›๋ณธ, ๋ณต์‚ฌ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์–ด ํ•œ์ชฝ์ด ์ˆ˜์ •๋˜๋ฉด ๋‹ค๋ฅธ ํ•œ์ชฝ๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

- ๋ฐฉ์–ด์  ๋ณต์‚ฌ

 

 

๐Ÿ“์ž๋ฐ” List ์ข…๋ฅ˜

  • ArrayList : Vector ํด๋ž˜์Šค์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜์˜จ ํด๋ž˜์Šค. ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.  ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ์€ ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ค‘์— ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํฐ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. Thread-safeํ•˜์ง€ ๋ชปํ•˜๋‹ค. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด CopyOnWriteArrayList ๋˜๋Š” Collections.synchronizedList๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ArrayList๋Š” ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์ด 10์ด๊ณ  ์ดˆ๊ณผํ•˜๋ฉด 1.5๋ฐฐ, iterator๋งŒ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Vector : ๋ฒกํ„ฐ๋Š” ์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „๋ถ€ํ„ฐ ์žˆ๋˜ ํด๋ž˜์Šค. ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๊ณ , ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค. , iterator์™€ Enumeration์ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ์ดˆ๊ธฐ์šฉ๋Ÿ‰ 10์ด๊ณ  ์ดˆ๊ณผํ•˜๋ฉด 2๋ฐฐ. HashTable๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์†Œ์Šค ์ฝ”๋“œ ํ˜ธํ™˜ ๋•Œ๋ฌธ์— ๋‚จ์•„ ์žˆ๋Š” ํด๋ž˜์Šค ์ด๊ธฐ ๋•Œ๋ฌธ์— ArrayList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ถ”์ฒœ๋œ๋‹ค. Vector๊ฐ€ ์„ฑ๋Šฅ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฑด Thread-safe ํŠน์„ฑ ๋•Œ๋ฌธ์ธ๋ฐ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์ž‘์—…์„ ์ž ๊ทธ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ.
  • LinkedList : ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ์—ญ์‹œ List์˜ ๊ตฌํ˜„์ฒด์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์€ ๋…ธ๋“œ๋“ค์€ ์ด์ „๊ณผ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ๋‹ค. ๋ฐฐ์—ด์—์„œ๋Š” ์ค‘๊ฐ„ ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋ฉด ๊ทธ ๋’ค์˜ ๊ฐ’์„ ์ „๋ถ€ ์•ž์œผ๋กœ ๋Œ๊ณ ์˜ค๊ฑฐ๋‚˜ ๋ฐ€์–ด๋‚ด์•ผํ•˜๋Š” ํฐ ์ด๋™์ด ์žˆ๋Š”๋ฐ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ์‚ฌ์ด์— ๊ฐ’์„ ์‚ฝ์ž…, ์‚ญ์ œ์‹œ ์—ฐ๊ฒฐํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ์˜ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค  

๐Ÿ“ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ์ข…๋ฅ˜

- ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (singly linked list)

์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ ํ•„๋“œ์™€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งํฌ ํ•„๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ null๋กœ์จ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•

 

- ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (circular linked list)

๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋งํฌํ•„๋“œ๊ฐ€ null์ด ์•„๋‹ˆ๋ผ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด ํŠน์ง•

ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด(?) ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์šฉ์ด

 

- ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (doubly linked list)

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

๊ทธ๋Ÿฌ๋‚˜ ๋งํฌํ•„๋“œ๊ฐ€ ๋Š˜์–ด๋‚จ์— ์žˆ์–ด ๊ณต๊ฐ„์„ ๋” ๋งŽ์ด ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

+ ์™œ ์ด๋Ÿฐ ์ข…๋ฅ˜๊ฐ€ ๋‚˜์™”์„๊นŒ? ๋ฌด์Šจ ๋ฌธ์ œ์ ์ด ์ผ์–ด๋‚˜์„œ ์ƒ๊ฒผ์„๊นŒ?

์Šคํ”„๋ง ๋ถ€ํŠธ ์•ž๋‹จ Tomcat์ด ํ๋กœ HTTP ์š”์ฒญ์„ ๋ฐ›์Œ, ์ด๊ฒŒ ์Œ“์ด๋ฉด ๋’ค์— ์˜ค๋Š” ์š”์ฒญ์ด ๋ฒ„๋ ค์ง€๊ธฐ๋„ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  request๋Š” Ack์„ ๋ฐ›๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š”? ์ด๊ฑฐ๋Š” ์ข€๋”   

 

๐Ÿ“ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”์ง€, ํ์— ๋Œ€ํ•œ ๊ฑธ ๋” ๋ณด์•ˆํ•ด

 

 

+ Recent posts