DTO?
ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC, Inter-Process Communication)์ ์ฌ์ฉ๋๋ค.
IPC๋ ? ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์๊ฒฉ์ผ๋ก ํต์ ํ๋ ๋ฐฉ์์ด๋ค. ์์ฆ์๋ B/E์ F/E Tier๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ํ์์ ์ธ ๊ตฌ์กฐ์ด๋ค.
File ํํ์ ์ ๊ทผ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ฅํ์ง๋ง ์๋ก ๊ฐ์ ํ์ผ์ ์์ ํ๊ณ ์ฝ๋ ๋์์ฑ ๋ฌธ์ ๋ฑ์ผ๋ก ์ธํด ํ์ฉ์ด ์ด๋ ค์ธ ์ ์๋ค.
Socketํต์ ๋ฐฉ์๋ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง, Socket์ ์ ์์ค์์ ๋ค๋ฃจ๊ธฐ์๋ ๊ตฌํ ๋ฐ ์ ์ง๊ด๋ฆฌ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ์ HTTP๊ฐ์ ๊ณ ์์ค์ ํ๋กํ ์ฝ์ ๊ธฐ๋์ด ์ฌ์ฉํ๋ฉด ๋ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
HTTP์ REST๋ฅผ ์ฌ์ฉํ๋ฉด Resource์ ๋ํ CRUD๋ฅผ ์ ๋ฆฌํ๊ณ ๊ณต์ ํด์ผ ํ๋ค.
JAVA์์๋ RMI๋ผ๋ ๊ธฐ์ ์ ํตํด์ RPC๋ฅผ ์ ๊ณตํ๋ค.
RPC : ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ด๋ผ๋ ์๋ฏธ(wikipedia)์ธ๋ฐ, ๊ฑฐ์น ๊ฒ ๋งํด์ ์๊ฒฉ์ ์๋ ํจ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ํต์ ๊ธฐ์ ์ด๋ค.
์์ฆ์๋ ์ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ํ๋ค.
REST์๋ DTO๋ฅผ ํตํด ํํ(representation)์ ๋ค๋ฃฌ๋ค. ํํ์ด๋ ์ํ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ผ๊ณ ์ดํดํ๋ฉด ๋๊ฒ ๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ฒ ์ธ์๋ ๋ณ๋ค๋ฅธ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ก์์ ์ญํ ์ ํ์ง๋ ์๋๋ค๊ณ ๋ณผ ์ ์๋ค.
โ๋ฌด๊ธฐ๋ ฅํ ๋๋ฉ์ธ ๋ชจ๋ธโ(Anemic Domain Model) ์ด๋ ๊ทธ๋ฆฌ๊ณ ์ํฐ ํจํด์ธ ์ด์
Martin Fowler : "์ ์ด๋ ๊ฒ Anemic Domain Model์ ๋ง์ด ์ฐ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์ด๊ฑด ์ํฐํจํด์ด๋ค. J2EE's Entity Bean์ด ์์ธ์ด์ง ์์๊น?"
๊ฐ์ฒด์งํฅ์์๋ ๊ฐ์ฒด๋ ์๋ก ํ๋ ฅํ๊ณ ์ฑ ์์ด ์์ง๋ง, ๊ทธ๋ฐ๊ฒ ํ๋๋ ์์ด ๋จ์ํ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋จ์ํ๊ฒ setter์ getter๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ด ๋ฉ์๋๋ค์ public์ผ๋ก ๋ผ ์๋ค.
์ด setter/getter ํํ๋ JavaBeans์์ ์ ๋๋ ํํ์ ๊ฐ๊น๋ค.๊ทธ๋์ ๋ถ๋ฅผ๋ JavaBeans ํน์ ๊ทธ๋ฅ Beans๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค. Spring Beans์๋ ๋ค๋ฅด๋ค.
์๋ฐ๋น์ฆ(JavaBeans)์ ๊ด๋ จ์ด ์๋ DTO
์๋ฐ๋ก ์์ฑ๋ ์ํํธ์จ์ด ์ปดํฌ๋ํธ์ด๋ค. ๊ณผ๊ฑฐ์ ์ฌ ๋ง์ดํฌ๋ก์์คํ ์ฆ์ ์์ ๊ถ์ด ์๋ค๊ฐ, ์ต๊ทผ ์ค๋ผํด์ ์ธ์๋์๋ค.
์๋ฐ๋น์ฆ์ ๊ด๋ก
์๋ฐ๋น์ฆ ํด๋์ค๋ก์ ์๋ํ๋ ค๋ฉด ๋ช ๋ช ๋ฒ, ์์ฑ๋ฒ ํ๋๊ณผ ๊ด๋ จ๋ ๊ด๋ก๋ฅผ ๋ฐ๋ผ์ผ ํ๋๋ฐ, ์ด ๊ด๋ก๋ฅผ ํตํด์ ํด๋์ค์ ์ฌ์ฉ๊ณผ ์ฌ์ฌ์ฉ, ์ฌ๋ฐฐ์น ๋ฑ์ ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
ํด๋์ค๋ ์ง๋ ฌํ๋์ด์ผ ํ๋ค.
ํด๋์ค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ง ์๋ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ด์ผ ํ๋ค.
getter , setter ๋ฉ์๋์ ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํ๋ค.
ํด๋์ค๋ ํ์ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฉ์๋๋ค์ ํฌํจํด์ผ ํ๋ค.
C/C++์์๋ ๊ตฌ์กฐ์ฒด(struct)๋ก ๊ตฌ๋ถํ ์ ์๋ค.
Java์์๋ data๋ฅผ ๋ฐ๋ก ํด๋์ค๋ก ๊ตฌ๋ถํ ์ ์๋ค. ์ต์ Java์์๋ record๋ก ๊ตฌ๋ถํ์ง๋ง, ์ค๋๋ Bean๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ง์ํ์ง ์๋๋ค.
kotlin์์๋ dataํด๋์ค๋ก ๋ฐ๋ก ์ทจ๊ธํ ์ ์๋ค.
DTO๋ Tier๊ฐ ํต์ ์ ์ฌ์ฉ๋๋ค.
F/E์ B/E ์ฌ์ด
DTO๋ ๊ฒฐ๊ตญ์๋ ๊ฐ์ฒด์ด๋ค. ๊ทธ๋๋ก ์ ์กํ๋ฉด ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ง๋ ฌํ(๋ง์ฌ๋ง)์ ๊ฑฐ์ณ์ผ ํ๋ค. ์ง๋ ฌํ ๊ธฐ์ ๋ ์ฌ๋ฌ๊ฐ์ง์ธ๋ฐ ์์ฆ์๋ JSON์ ๋ง์ด ์ฌ์ฉํ๋ค. XML๋ ์๊ธด ํ๋ค. JSON์ ๊ตฌ์กฐ๊ฐ ํจ์ฌ ๋จ์ํ๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ๋ค.
B/E์ DB(๋ฐ์ดํฐ ๊ณ์ธต) ์ฌ์ด
3 Tier๋ฅผ ๋ถ๋ฆฌํ๋ค๋ฉด ํํ๊ณ์ธต , ๋น์ฆ๋์ค ๊ณ์ธต, ๋ฐ์ดํฐ ๊ณ์ธต์ผ๋ก ๋๋ ์ ์๋ค. B/E์ DB์ฌ์ด์์๋ ๋ฐ์ดํฐ ๊ต๋ฅ๋ฅผ ์ํด ์ฌ์ฉ๋ ์ ์๋ค.
์์ ์๋ Value Object(VO)๋ผ๋ ์ฉ์ด๋ก๋ ๋ง์ด ์ฐ์๋ค. Sun์ฌ์์ ์์ ๋ค์ ํจํด ์ฉ์ด์ง์ ๋๋๋ฐ ๊ฑฐ๊ธฐ์ VO๋ฅผ DTO๋ก ์ฌ์ฉํ์๋ค๊ฐ, ๋ค์ DTO๋ก ์ ์ ํ๋ค.
๊ด๋ จ ํค์๋
EJB(Enterprise JavaBeans)
๊ธฐ์ ํ๊ฒฝ์ ์์คํ ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฒ ์ธก ์ปดํฌ๋ํธ ๋ชจ๋ธ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ๋ฌด ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ EJB๋ผ๊ณ ํ๋ค. ๋ค์ํ Platform๊ณผ์ ์ฐ๊ณ๋ฅผ ์ถ๊ตฌํ๊ณ , ๋น์ฆ๋์ค๋ก์ง๊ณผ ์์คํ ๋ก์ง์ ๋ถ์ฐํด ๊ทธ ์ฌ์ด์ ๊ท์ฝ์ ๊ท์ ํ๊ณ ์๋ค.
๋น์ฆ๋์ค ๋ก์ง์ ํ์ฌํ ๋ถ๋ถ์ "Enterprise Bean"์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ
DataBase์ Transaction ์ฒ๋ฆฌ ๋ฑ์ ์์คํ ์๋น์ค ๊ด๋ จ ๋ก์ง ๋ถ๋ถ์ container๋ผ๊ณ ๋ถ๋ฅธ๋ค.
EJB๋ฅผ ์ฌ์ฉํ ์ดํ๋ฆฌ์ผ์ด์ ๋ผ๋ฆฌ๋ container๋ผ๋ ๊ท๊ฒฉํ๋ ๋ถํ์ด ์๊ธฐ ๋๋ฌธ์ ๋น์ฆ๋์ค ๋ก์ง์ ํ์ฌํ Enterprise Bean๋ถ๋ถ์ ๋ ์ง์คํ ์ ์๊ณ , ๊ณตํต๋ ๊ท๊ฒฉ์ ์ฌ์ฉํ EJB๋ผ๋ฆฌ๋ ์ด๋์ฑ์ด ์ข๋ค.
์ข๋ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ
Enterprise Bean
Container
EJB server
Client application
EJB๋ ์ฌ์ค์ ํ์ฌ๋ ๋ง์ด ์ฐ์ด์ง ์๋๋ค. ์ด์ ๋ ๋น์ฐํ ์ฅ์ ๋ณด๋ค ๋จ์ ์ด ์ปค์์ผํ ๋ฐ ์๋์ ๊ฐ์ ๋จ์ ์ด ์๋ค.
๊ฐ์ฒด์งํฅ์ ์ด์ง ์๋ค.
๋ณต์กํ๋ค.
ํน์ ํ๊ฒฝ์ด๋ ๊ธฐ์ ์ ์ข ์์ ์ด๋ค.
์ปจํ ์ด๋ ์์์๋ง ๋์์ด ๊ฐ๋ฅํ ๊ฐ์ฒด๊ตฌ์กฐ
์๋ํ๋ ํ ์คํธ๊ฐ ์ด๋ ต๋ค.
Java์ record
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํด๋์ค ํ์ ์ด๋ค.
jdk14์์ ์๊ฐ๋๊ณ , 16์์ ์ ์์ผ๋ก ํฌํจ๋๋ค.
์ด์ ๊น์ง ๋ถ๋ณ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์, final๊ณผ ๋ชจ๋ ํ๋๊ฐ ํฌํจ๋ ์์ฑ์ ๋ฑ์ ์ฌ์ฉํด์๊ณ , toString / hashCode / equals ๋ฉ์๋๋ค์ ์ฌ์ ์ ํ์ง๋ง, record์์๋ ๊ธฐ๋ณธ์ผ๋ก ๊ตฌํํด์ค๋ค.
record ํด๋์ค๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ฉด ๋ถ๋ณ๊ฐ์ฒด๋ก ์์ฑ๋ ๋ฟ ์๋๋ผ toString / hashCode / equals ๋ฉ์๋๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๊ตฌํํด์ค๋ค.
๋ค๋ง ์๋ฌต์ finalํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์์์ด ๋ถ๊ฐํ๊ณ , ๋ํ abstract ์ ์ธ์ด ๋ถ๊ฐํ๋ค(final์ด๋ฏ๋ก ์ฌ์ ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ธ ๊ฒ ๊ฐ๋ค.). ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก ์์์ ๋ฐ์ ์๋ ์๋ค. ์์ธ์ ์ผ๋ก interface ๊ตฌํ์ ๊ฐ๋ฅํ๋ค.
ORM(JPA, ํ์ด๋ฒ๋ค์ดํธ)์ Active Record + DTO ํํ๋ก ์ ๊ทผํ๊ธฐ๋ ํ๋ค.
DAO
Data access object์ ์ค์๋ง
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํ ๊ฐ์ฒด์ด๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ ์ํ ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
ORM
Object Relationship Mapping
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ์ ๊ฐ์ ๊ธฐ์ ์ด๋ค. OOP์ธ์ด๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ CRUD์ ๊ฐ์ ์์ ์ ํ ์ ์๊ฒ ํด์ค๋ค.
Last updated