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๊ฐ์ง ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ๋ง์กฑํ๋ค๋ฉด ๋ฐ๋๋ฝ ํ์์ด ๋ฐ์ํ๋ฉฐ, ์๋ ๊ฒฝ์ฐ ๋ฐ๋๋ฝ์ ๋ฐ์ํ์ง ์๋๋ค.