0927 - 1003


# 0927 - 1003

# 0927 - ER ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ์ฐจ์ด

ER(์—”ํ‹ฐํ‹ฐ-๊ด€๊ณ„)๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๋ผ์ดํ”„ ์‚ฌ์ดํด์˜ ๋””์ž์ธ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“œ๋Š” ๋‘ ๊ฐ€์ง€ ๋””์ž์ธ ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‹ค.

# ERD

  • ERD๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋ง์„ ์œ„ํ•œ ERM(Entity-Relationship Modeling) ๊ธฐ์ˆ ์˜ ์‚ฐ๋ฌผ์ด๋‹ค.
  • ์—”ํ‹ฐํ‹ฐ-๊ด€๊ณ„ ๋ชจ๋ธ๋ง์€ ๋ฐ์ดํ„ฐ์˜ ์ถ”์ƒ์ ์ด๊ณ  ๊ฐœ๋…์ ์ธ ํ‘œํ˜„์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค.
  • ER๋‹ค์ด์–ด๊ทธ๋žจ์€ ๊ถ๊ทน์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ชจ๋ธ๋งํ•œ๋‹ค.

# ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

  • ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ(๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ UML ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋ผ๊ณ  ํ•จ)์€ UML(Unified Modeling Language)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ ๋œ ์‹œ์Šคํ…œ์˜ ์ •์  ๊ตฌ์กฐ ๋ฐ ๋™์ž‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋””์ž์ธ ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‹ค.

# ์ฐจ์ด์ 

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

# 0929 - POC, Prototype, MVP์ฐจ์ด

# POC(Proof-of-Concept)

  • ๊ฐœ๋… ์ฆ๋ช…(POC, Proof of Concept)๋Š” ๊ธฐ์กด ์‹œ์žฅ์— ์—†์—ˆ๋˜ ์‹ ๊ธฐ์ˆ ์„ ๋„์ž…ํ•˜๊ธฐ ์ „์— ์ด๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ํŠน์ • ๋ฐฉ์‹์ด๋‚˜ ์•„์ด๋””์–ด๋ฅผ ์‹ค์ฒดํ™”ํ•˜์—ฌ ํƒ€๋‹น์„ฑ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์˜๋ฏธ : ์ƒˆ๋กœ ๋„์ž…๋˜๋Š” ๊ธฐ์ˆ ์ด๋‚˜ ์ œํ’ˆ์ด ๋„์ž… ๋ชฉ์ ์— ๋ถ€ํ•ฉ๋˜๋Š”์ง€ ๊ฒ€์ฆ
  • ๊ฒ€์ฆ : ๊ทธ ๊ธฐ์ˆ ์ด ์ƒ๊ฐํ•œ๋Œ€๋กœ ๋™์ž‘๋˜๋Š”์ง€? ๋„์ž…ํ•ด๋„ ๋˜๋Š”์ง€?
  • MVP์™€ ์ฐจ์ด์  : ์‹ค์‚ฌ์šฉ์ž์ธ ๊ณ ๊ฐ์ด ์‚ฌ์šฉ/ํ”ผ๋“œ๋ฐฑ ์„ ์•ˆํ•จ

# Prototype(ํ”„๋กœํ† ํƒ€์ž…)

  • ํ”„๋กœํ† ํƒ€์ž…์€ ์‹œ์ œํ’ˆ์ด ๋‚˜์˜ค๊ธฐ ์ „์— ์ œํ’ˆ์˜ ์›ํ˜•์ด๋ฉฐ, ๊ฐœ๋ฐœ๊ฒ€์ฆ๊ณผ ์–‘์‚ฐ ๊ฒ€์ฆ์„ ๊ฑฐ์ณ์•ผ ์‹œ์ œํ’ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋กœํ† ํƒ€์ž…์€ ์ •๋ณด์‹œ์Šคํ…œ์˜ ๋ฏธ์™„์„ฑ ๋ฒ„์ „ ๋˜๋Š” ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์‹œ์Šคํ…œ์˜ ์ดˆ๊ธฐ๋ชจ๋ธ
  • ํ”„๋กœํ† ํƒ€์ž…์€ ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ˜์˜๋ ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ๊ฐœ์„ /๋ณด์™„ ๋œ๋‹ค.
  • ์‹ค์ œ๋กœ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ์ง€์†์ ์ธ ํ”„๋กœํ† ํƒ€์ž…์˜ ํ™•์žฅ๊ณผ ๋ณด๊ฐ•์„ ํ†ตํ•ด ์ตœ์ข… ์Šน์ธ๋˜๊ณ  ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ„๋‹ค.
  • ์˜๋ฏธ : ์‹œ์Šคํ…œ์ด๋‚˜ ์ €ํ’ˆ๋“ค์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ํฌํ•จ๋œ ์ดˆ๊ธฐ๋ชจ๋ธ(SW ๊ฐœ๋ฐœ ์ฐฉ์ˆ˜์ „ ๊ฒ€์ฆ/์Šน์ธ)
  • ๊ฒ€์ฆ : ์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ•˜์—ฌ ๊ฐœ๋ฐœ/์ƒ์‚ฐ ํ•ด๋„๋˜๋Š”์ง€?
  • MVP์™€ ์ฐจ์ด์  : ์‹ค์‚ฌ์šฉ์ž์ธ ๊ณ ๊ฐ์ด ์‚ฌ์šฉ/ํ”ผ๋“œ๋ฐฑ ์•ˆํ•  ์ˆ˜๋„ ์žˆ์Œ.

# Pilot(์‹œ๋ฒ” ์ ์šฉ)

  • Pilot์€ ์ „์ฒด ํ™•๋Œ€ ์ ์šฉํ•˜๊ธฐ์ „์— ์†Œ๊ทœ๋ชจ๋กœ ํ…Œ์ŠคํŠธํ•ด์„œ ์ถ”ํ›„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์ œ์˜ ์›์ธ์„ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•˜๊ณ  ์ˆ˜์ • ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ์˜๋กœ ์‹œํ–‰ํ•ด ๋ณด๋Š” ํ™œ๋™.
  • ์˜๋ฏธ : ์ƒˆ๋กœ์šด ์ •์ฑ… ๋˜๋Š” ์„œ๋น„์Šค ํ™•์‚ฐ์˜ ์ฒซ ๋ฒˆ์งธ ์‹œ๋ฒ” ์ ์šฉ
  • ๊ฒ€์ฆ : ๋” ๋„™ใ„น์€ ๊ทธ๋ฃน์œผ๋กœ ํ™•์žฅํ•ด์„œ ์ ์šฉํ•ด๋„ ๋˜๋Š”์ง€?
  • MVP์™€ ์ฐจ์ด์  : ์‹ค์‚ฌ์šฉ์ž์ธ ๊ณ ๊ฐ์ด ์‚ฌ์šฉ/ํ”ผ๋“œ๋ฐฑ์€ ์œ ์‚ฌํ•˜๋‚˜ ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์ง€์†์ ์œผ๋กœ ๊ฒ€์ฆํ•˜๋ฉฐ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์Œ

# MVP(์ตœ์†Œ ์‹คํ–‰๊ฐ€๋Šฅ ์ œํ’ˆ,Minimum Viable Product)

  • ์ตœ์†Œ ์‹คํ–‰ ๊ฐ€๋Šฅ ์ œํ’ˆ์€ ๊ณ ๊ฐ์—๊ฒŒ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•ด์•ผํ•˜๋ฉฐ, ๊ณ ๊ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ ์ƒ์กดํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์„ ๋“ค์—ฌ ๋งŒ๋“  ๊ธฐ๋Šฅ(features)์„ ๊ตฌํ˜„ํ•œ ์ œํ’ˆ์ด๋‹ค.
  • ์ตœ์†Œ ์‹คํ–‰ ๊ฐ€๋Šฅ ์ œํ’ˆ์€ ์‹ ์ œํ’ˆ ๊ฐœ๋ฐœ์—์„œ ํ•™์Šต์˜ ์˜ํ–ฅ์„ ๊ฐ•์กฐํ•˜๋Š” Lean Startup์˜ ๊ฐœ๋…์ด๋‹ค.
  • ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ๊ฒ€์ฆ๋œ ์ •๋ณด๋ฅผ ์ตœ๋Œ€ํ•œ ์ˆ˜์ง‘ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์ œํ’ˆ ๋ฒ„์ „
  • ์˜๋ฏธ : ์ถœ์‹œ ํ›„ ์ œํ’ˆ์ด ์ƒ์กดํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ(๊ฐœ๋ฐœ๋ฒ”์œ„, ์‹œ๊ฐ„)์œผ๋กœ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ๊ฒ€์ฆ ๋œ ์ •๋ณด๋ฅผ ์ตœ๋Œ€ํ•œ ์ˆ˜์ง‘ ํ•  ์ˆ˜์žˆ๋Š” ์ œํ’ˆ ๋ฒ„์ „
  • ๊ฒ€์ฆ : ๊ณ ๊ฐ์—๊ฒŒ Value๋ฅผ ์ฃผ๋Š”๊ฐ€? ๊ณ ๊ฐ์ด ์›ํ•˜๋Š”๊ฒƒ์ด ๋งž๋Š”๊ฐ€? ๊ฐ€์„ค๋Œ€๋กœ ๊ณ ๊ฐ์ด ๋ณ€ํ™” ๋˜๋Š”๊ฐ€?
  • PoC, Prototype๊ณผ ์ฐจ์ด์  : ์‹ค์‚ฌ์šฉ์ž์ธ ๊ณ ๊ฐ์ด ์‚ฌ์šฉ/ํ”ผ๋“œ๋ฐฑ ํ•ด์•ผํ•จ
  • Pilot๊ณผ ์ฐจ์ด์  : ์„ฑ๊ณต/์‹คํŒจ ํ™•์ธ ๋ณด๋‹ค๋Š” ์ง€์†์ ์ธ ์‹คํ—˜/๊ฐœ์„  ๋ชฉ์ 
  • MVP๋Š” ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ๊ณ ๊ฐ์—๊ฒŒ Value๋ฅผ ์ฃผ๋ฉฐ ๊ฐ€์„ค์„ ๊ฒ€์ฆํ•˜๋ฉฐ ๊ฐœ์„ 

# 1001 - ๋ฉ”์‹œ์ง€ํ(Message Queue / MQ)

# ๋ฉ”์‹œ์ง€ ํ(Message Queue ์ดํ•˜ MQ)

ํ”„๋กœ์„ธ์Šค(ํ”„๋กœ๊ทธ๋žจ) ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ• ์ค‘์— ํ•˜๋‚˜๋กœ ๋” ํฐ ๊ฐœ๋…์œผ๋กœ๋Š” MOM(Message Oriented Middleware : ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด ์ดํ•˜ MOM)์„ ์˜๋ฏธํ•œ๋‹ค. MOM์ด๋ž€ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ MOM์„ ๊ตฌํ˜„ํ•œ ์‹œ์Šคํ…œ์„ MQ๋ผ๊ณ  ํ•œ๋‹ค. MQ๋Š” ์ž‘์—…์„ ๋Šฆ์ถœ ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•  ๋–„ AMQP(Advanced Message Queuing Protocol ์ดํ•˜ AMQP)๋ฅผ ์ด์šฉํ•œ๋‹ค. AMQP๋Š” ISO ์‘์šฉ ๊ณ„์ธต์˜ MOM ํ‘œ์ค€์œผ๋กœ JMS(Java Message Service)์™€ ๋น„๊ต๋˜๋Š”๋ฐ JMS๋Š” MOM์„ ์ž๋ฐ”์—์„œ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ API์ด๋‹ค. JMS๋Š” ๋‹ค๋ฅธ Java Application ๊ฐ„์— ํ†ต์‹ ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋‹ค๋ฅธ MOM(AMQP, SMTP ๋“ฑ)๋ผ๋ฆฌ๋Š” ํ†ต์‹ ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด AMQP๋Š” protocol๋งŒ ์ผ์น˜ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ AMQP๋ฅผ ์‚ฌ์šฉํ•œ Aplication๊ณผ๋„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. AMQP๋Š” wire-protocol์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๋Š” octet stream์„ ์ด์šฉํ•ด์„œ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๋งท์ด๋‹ค.

# ๋ฉ”์‹œ์ง€ํ์˜ ์žฅ์ 

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

# ๋ฉ”์‹œ์ง€ ํ ์‚ฌ์šฉ์ฒ˜

๋ฉ”์‹œ์ง€ ํ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ๊ณณ์— ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋‹ค๋ฅธ ๊ณณ์˜ API๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ 
  • ๋‹ค์–‘ํ•œ Application์—์„œ ๋น„๋™๊ธฐ ํ†ต์‹  ๊ฐ€๋Šฅ
  • ์ด๋ฉ”์ผ ๋ฐœ์†ก ๋ฐ ๋ฌธ์„œ ์—…๋กœ๋“œ ๊ฐ€๋Šฅ
  • ๋งŽ์€ ์–‘์˜ ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ

# ๋ฉ”์‹œ์ง€ ํ ์ข…๋ฅ˜

๋Œ€ํ‘œ์ ์ธ ๋ฉ”์‹œ์ง€ ํ ์ข…๋ฅ˜์˜ 3๊ฐ€์ง€

  • Kafka
  • RabbitMQ
  • ActiveMQ

๊ณตํ†ต์ ์œผ๋กœ 3๊ฐ€์ง€ ๋ชจ๋‘ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ œ๊ณตํ•˜๊ณ  ๋ณด๋‚ธ ์‚ฌ๋žŒ๊ณผ ๋ฐ›๋Š” ์‚ฌ๋žŒ์„ ๋ถ„๋ฆฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์—…๋ฌด์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์„ฑ๊ฒฉ์ƒ Kafaka(Apache)์™€ RabbitMQ, ActiveMQ(Apache)๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ Kafka๋Š” ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋งŽ์€ ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•˜๊ณ  RabbitMQ, ActiveMQ๋Š” ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ํ•ฉํ•˜๋‹ค. ์—ฌ๊ธฐ์„œ ์‹ ๋ขฐ์„ฑ์€ Kafka์— ๋น„ํ•ด ๋†’์€ ๊ฒƒ์ด์ง€ Kafka๊ฐ€ ์‹ ๋ขฐ์„ฑ์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

# RabbitMQ

RabbitMQ๋Š” AMQT ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•ด ๋†“์€ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ์จ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง๊ด€์ ์ด๋‹ค.

์žฅ์ 

  • ์‹ ๋ขฐ์„ฑ, ์•ˆ์ •์„ฑ
  • ์œ ์—ฐํ•œ ๋ผ์šฐํŒ… (Message Queue๊ฐ€ ๋„์ฐฉํ•˜๊ธฐ ์ „์— ๋ผ์šฐํŒ… ๋˜๋ฉฐ ํ”Œ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ๋” ๋ณต์žกํ•œ ๋ผ์šฐํŒ…๋„ ๊ฐ€๋Šฅ)
  • ํด๋Ÿฌ์Šคํ„ฐ๋ง (๋กœ์ปฌ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š ์—ฌ๋Ÿฌ RabbitMQ ์„œ๋ฒ„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๊ณ  ๋…ผ๋ฆฌ์ ์ธ ๋ธŒ๋กœ์ปค๋„ ๊ฐ€๋Šฅ)
  • ๊ด€๋ฆฌ UI์˜ ํŽธ๋ฆฌ์„ฑ (๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณต๋จ)
  • ๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด ๋ฐ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›
  • ์˜คํ”ˆ์†Œ์Šค๋กœ ์ƒ์—…์  ์ง€์› ๊ฐ€๋Šฅ

# Kafka

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

์žฅ์ 

  • ๋Œ€์šฉ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์— ํŠนํ™”
  • AMQP ํ”„๋กœํ† ์ฝœ์ด๋‚˜ JSM API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€ ํ—ค๋”๋ฅผ ์ง€๋‹Œ TCP ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋น„๊ต์  ์ž‘๋‹ค.
  • ๋…ธ๋“œ ์žฅ์• ์— ๋Œ€ํ•œ ๋Œ€์‘์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ํ”„๋กœ๋“€์„œ๋Š” ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐฐ์น˜๋กœ ๋ธŒ๋กœ์ปค์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ TCP/IP ๋ผ์šด๋“œ ํŠธ๋ฆฝ์„ ์ค„์˜€๋‹ค.
  • ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•˜์—ฌ ๋ณ„๋„์˜ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์˜ค๋ฅ˜ ์ง€์ ๋ถ€ํ„ฐ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค (๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ)
  • ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์ผ์‹œ์Šคํ…œ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€๊ฐ€ ๋งŽ์ด ์Œ“์—ฌ๋„ ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๊ฐ์†Œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • window ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

# ActiveMQ

ActiveMQ๋Š” ์ž๋ฐ”๋กœ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค. JMS 1.1์„ ํ†ตํ•ด ์ž๋ฐ” ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค.

์žฅ์ 

  • ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ํ”„๋กœํ† ์ฝœ ์ง€์›
  • OpenWire๋ฅผ ํ†ตํ•ด ๊ณ ์„ฑ๋Šฅ์˜ Java, C, C++, C# ํด๋ผ์ด์–ธํŠธ ์ง€์›
  • stomp๋ฅผ ํ†ตํ•ด C, Ruby, Perl, Python, PHP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ธ๊ธฐ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ActiveMQ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • Message Groups, Virtual Destinations, Wildcards์™€ Composite Destination์„ ์ง€์›
  • Spring ์ง€์›์œผ๋กœ ActiveMQ๋Š” Spring Application์— ๋งค์šฐ ์‰ฝ๊ฒŒ ์ž„๋ฒ ๋”ฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Spring์˜ XML ์„ค์ • ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์‰ฝ๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅ
  • Geronimo, JBoss4, GlassFish, WebLogic๊ณผ ๊ฐ™์€ ์ธ๊ธฐ์žˆ๋Š” J2EE ์„œ๋ฒ„๋“ค๊ณผ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธ๋จ
  • ๊ณ ์„ฑ๋Šฅ์˜ ์ €๋„์„ ์‚ฌ์šฉํ•  ๋•Œ์— JDBC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ๋น ๋ฅธ Persistence๋ฅผ ์ง€์›
  • REST API๋ฅผ ํ†ตํ•ด ์›น๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง• API๋ฅผ ์ง€์›
  • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฉ”์‹œ์ง• ๋„๊ตฌ๊ณผ ๋  ์ˆ˜ ์žˆ๋„๋ก, Ajax๋ฅผ ํ†ตํ•ด ์ˆœ์ˆ˜ํ•œ DHTML์„ ์‚ฌ์šฉํ•œ ์›น ์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์›

# 1002 - JavaScript ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ES6 ๋ฌธ๋ฒ• ์ •๋ฆฌ

# ES6(ECMAScript6)๋ž€?

ECMScript 2015๋กœ๋„ ์•Œ๋ ค์ ธ ์žˆ๋Š” ECMScript6๋Š” ECMScript ํฌ์ค€์˜ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์ด๋‹ค. ES6์€ ์ƒˆ๋กœ์šด ์–ธ์–ด ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ์ฃผ์š”์—…๋ฐ์ดํŠธ๋ฉฐ, 2009๋…„๋„์— ํ‘œ์ค€ํ™”๋œ ES5 ์ดํ›„๋กœ ์–ธ์–ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ฒซ ์—…๋ฐ์ดํŠธ์ด๊ธฐ๋„ ํ•˜๋‹ค.

ES6๋Š” ์•„๋ž˜์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์„ ํฌํ•จ

  • const and let
  • Arrow functions (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)
  • Template Literals (ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด)
  • Default parameters (๊ธฐ๋ณธ ๋งค๊ฐœ ๋ณ€์ˆ˜)
  • Array and object destructing (๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”)
  • Import and export (๊ฐ€์ ธ์˜ค๊ธฐ ๋‚ด๋ณด๋‚ด๊ธฐ)
  • Promises (ํ”„๋กœ๋ฏธ์Šค)
  • Rest parameter and Spread operator (๋‚˜๋จธ์ง€ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ ํ™•์‚ฐ ์—ฐ์‚ฐ์ž)
  • Classes (ํด๋ž˜์Šค)

# ES6 ๋ฌธ๋ฒ•

# const and let

const๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์œ„ํ•œ ES6์˜ ์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ. const๋Š” var๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๊ณ  ์ผ๋‹จ ์‚ฌ์šฉ๋˜๋ฉด ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ํ• ๋‹น ํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ๊ฐ์ฒด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋–„๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜.

# Arrow functions

  • ๊ธฐ๋ณธ
const func = (name) => {
    return ...;
}

const func = (name) => ...;
  • map, filter, reduce ๋‚ด์žฅ ํ•จ์ˆ˜ ์‚ฌ์šฉ
const arr = [1, 2, 3, 4]

let arr1 = arr.map((item) => item);

# Template Literals

const func = (name, age) => {
    return `์•ˆ๋…• ${name}, ๋„ˆ์˜ ๋‚˜์ด๋Š” ${age}์‚ด ์ด๋‹ค!`;
}

# Default parameters

const func = (name, age = 22) => {
    return `์•ˆ๋…• ${name}, ๋„ˆ์˜ ๋‚˜์ด๋Š” ${age}์‚ด ์ด๋‹ค!`;
}

console.log(func('์ฒ ์ˆ˜'));
// ์ถœ๋ ฅ ์•ˆ๋…• ์ฒ ์ˆ˜, ๋„ˆ์˜ ๋‚˜์ด๋Š” 22์‚ด ์ด๋‹ค!

# Array and object destructing

const contacts = {
    famillyName: '์ด',
    name: '์˜ํฌ',
    age: 22
}

let { famillyName, name, age } = contacts;

console.log(famillyName);
console.log(name);
console.log(age);
// ์ด
// ์˜ํฌ
// 22

let { famillyName, name: otherName, age } = contacts;

console.log(otherName);
// ์˜ํฌ

// ๋ฐฐ์—ด
const arr = [1, 2, 3];

let [value1, value2, value3] = arr;
console.log(value1);
console.log(value2);
console.log(value3);
// 1
// 2
// 3 

# Import and export

  • ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ
export default function detail(name, age) {
    return `์•ˆ๋…• ${name}, ๋„ˆ์˜ ๋‚˜์ด๋Š” ${age}์‚ด ์ด๋‹ค!`;
}

---

import detail from './detailComponet';

console.log(detail('์˜ํฌ', 20));
// ์•ˆ๋…• ์˜ํฌ, ๋„ˆ์˜ ๋‚˜์ด๋Š” 20์‚ด ์ด๋‹ค!
  • ๋‘˜ ์ด์ƒ์˜ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ธฐ
import { detail, userProfile, getPosts } from './detailComponent';

# Promises

๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์“ฐ๋Š” ๋ฐฉ๋ฒ•

const promise = () => {
    return new Promise((resolve, reject) => {
        resolve('Promise๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋์Šต๋‹ˆ๋‹ค.');
    })
}

console.log(proise());
// Promise {<resolved>: "Promise๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋์Šต๋‹ˆ๋‹ค."}
const url = 'https://jsonplaceholder.typicode.com/posts';

// fetchํ•จ์ˆ˜๋Š” Promise์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜
const getData = (url) => {
    return fetch(url);
}

getData(url).then(data => data.json()).then(result => console.log(result));

# Rest parameter and Spread operator

const arr = [1, 2, 3, 4, 5, 6, 7]

const [ val1, val2, val3, ...rest ] = arr;

const func = (restOfArr) => {
    return restOfArr.filter((item) => {return item}).join(" ");
}

console.log(func(rest));
// 4 5 6 7
const arr = [1, 2, 3, 4, 5, 6, 7]

const func = (...anArray) => {
    return anArray;
}

console.log(func(arr));
// [1, 2, 3, 4, 5, 6, 7]

# Classes

class myClass {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    syaHello() {
        console.log(`์•ˆ๋…• ${this.name} ๋„ˆ์˜ ๋‚˜์ด๋Š” ${this.age}์‚ด์ด๋‹ค`);
    }
}

--- // ์ƒ์†

class UserProfile extends myClass {
    userName() {
        console.log(this.name);
    }
}

const user = new myClass('์˜ํฌ', 22);
const profile = new UserProfile('์˜ํฌ', 22));

# 1003 - ํ–‰(hang), ํ”„๋ฆฌ์ง•(freezing), ๋ฐ๋“œ๋ฝ(deadlock)

# ํ–‰

์–ด๋– ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ ์ค‘์— ๋ฉˆ์ถ”๊ฒŒ ๋œ ํ˜„์ƒ

# ํ”„๋ฆฌ์ง•

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

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

# ๋ฐ๋“œ๋ฝ

๋ฐ๋“œ๋ฝ์€ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ์ •๋œ ์ž์›์„ ๊ฐ™์ด ์š”์ฒญํ•˜๋Š” ํ˜„์ƒ์œผ๋กœ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ง„์ „ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋Œ€๊ธฐ์ƒํƒœ๊ฐ€ ๋˜๋Š” ํ˜„์ƒ์„ ๋งํ•œ๋‹ค.

๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด๋“ค์ด ์ถฉ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  • ์ƒํ˜ธ๋ฐฐ์žฌ - ํŠน์ • ์ž์›์€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฐ–์— ๋ชป๊ฐ€์ง„๋‹ค.
  • ์ ์œ ์™€๋Œ€๊ธฐ - ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ๋น„์„ ์  - ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์˜ ์‚ฌ์šฉ์„ ๋๋‚ด๊ธฐ ์ „์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ๋กœ ๊ทธ ์ž์›์„ ๋บ์„ ์ˆ˜ ์—†๋‹ค.
  • ์ˆœํ™˜๋Œ€๊ธฐ - ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ˆœํ™˜์ ์œผ๋กœ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž์›์„ ๊ฐ–๊ณ  ์žˆ๋”ฐ.

=> ์œ„ 4๊ฐ€์ง€ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด ๋ฐ๋“œ๋ฝ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ์•„๋‹ ๊ฒฝ์šฐ ๋ฐ๋“œ๋ฝ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

Last update: September 13, 2022 21:44
Contributors: ahnjs