- ๐ก Restful API์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก Call By Value์ Call By Reference์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก ๊ทธ๋ผ Java์์ ์ด๋ ๋ถ๋ถ์ด call by value์ด๊ณ ์ด๋ ๋ถ๋ถ์ด call by reference์ ํด๋นํ๋์?
- ๐ก CORS(๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ , Cross-Origin Resource Sharing)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก OAuth 2.0์ ํ๋ฆ์ ๋ํด ๊ฐ๋จํ ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก ๋์ ์ฟผ๋ฆฌ๋ ๋ฌด์์ด๊ณ ์ธ์ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋์?
- ๐ก CSRF(Cross-site request forgery)์ ๋ํด ์ค๋ช ํ๊ณ , ์ด๋ฅผ ๋ง๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก ๋์นญํค, ๋น๋์นญํค ์ํธํ ๋ฐฉ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก TDD(Test-Driven-Development)์ ๊ฐ๋ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ ํด์ผํ๋ ์ด์ ์ ๋ํด ์๋๋๋ก ์ค๋ช ํด์ฃผ์ธ์.
- ๐ก DDD(Domain-Driven-Design)์์ ์๊ธฐํ๋ ๊ณ์ธต๊ณผ ๊ฐ๊ฐ์ ์ญํ ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
- ๐ก MSA(Microservice Architecture)๊ฐ ๋ญ์ง ์ค๋ช ํด์ฃผ์ธ์.
๐ก Restful API์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Restful API๋ HTTP ํต์ ์ Rest ์ค๊ณ ๊ท์น์ ์ ์ง์ผ์ ๊ฐ๋ฐํ API๋ฅผ Restfulํ API๋ผ๊ณ ํฉ๋๋ค.
Rest ์ค๊ณ ๊ท์น์ URI๋ ์ ๋ณด์ ์์๋ง ํํํด์ผ ํ๋ฉฐ, ์์์ ์ํ์ ํ์๋ HTTP Method์ ๋ช
์ํ๋๊ฑธ ๋งํฉ๋๋ค.
REST๋? REST API ์ RESTful API์ ์ฐจ์ด์ ?
๐ก ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ด ๋์ ์ฐจ์ด์ ์ ์ ์ด ํ๋ฆ์ ๋ํ ์ฃผ๋๊ถ์ด ๋๊ตฌ์๊ฒ/์ด๋์ ์๋๊ฐ์ ์์ต๋๋ค.
ํ๋ ์์ํฌ๋ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์ฅ๊ณ ์๊ณ , ๊ฐ๋ฐ์๋ ๊ทธ ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํ๋ฆ์ ์ฅ๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๊ฐ๋ฐ์์ ์ ์ด๊ถ์ ํ๋ ์์ํฌ์๊ฒ ๋๊น์ผ๋ก์จ ์ ๊ฒฝ์จ์ผํ ๊ฒ์ ์ค์ผ ์ ์๋๋ฐ,
์ด๋ฅผ ์ ์ด์ ์ญ์ (Inversion of Control)์ด๋ผ ํฉ๋๋ค.
๐ก Call By Value์ Call By Reference์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- Call By Value(๊ฐ์ ์ํ ํธ์ถ) - ์ธ์๋ก ๋ฐ์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์
๋๋ค.
- ์ฅ์ - ๊ฐ์ ๋ณต์ฌํ์ฌ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋ณด์กด๋๋ค.
- ๋จ์ - ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค.
- Call By Reference(์ฐธ์กฐ์ ์ํ ํธ์ถ) - ์ธ์๋ก ๋ฐ์ ๊ฐ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ง์ ์ ์ฅํด ๊ฐ์ ์ํฅ์ ์ฃผ๋ ๋ฐฉ์์
๋๋ค.
- ์ฅ์ - ๋ณต์ฌํ์ง ์๊ณ ์ง์ ์ฐธ์กฐํ๊ธฐ์ ๋น ๋ฅด๋ค.
- ๋จ์ - ์ง์ ์ฐธ์กฐ๋ฅผ ํ๊ธฐ์ ์๋์ ๊ฐ์ด ์ํฅ์ ๋ฐ๋๋ค.
๐ก ๊ทธ๋ผ Java์์ ์ด๋ ๋ถ๋ถ์ด call by value์ด๊ณ ์ด๋ ๋ถ๋ถ์ด call by reference์ ํด๋นํ๋์?
Java๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ ๋ฌ ๋ฐฉ์์ด Call by Value ์ ๋๋ค.
์ฐธ์กฐํ์ ๊ฒฝ์ฐ ๊ฐ์ฒด์ '์ฃผ์๊ฐ'์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ call by reference๊ฐ ์๋๋๋ ์๋ฌธ์ ๊ฐ์ง ์ ์์ง๋ง,
์ ํํ๊ฒ ๋งํ๋ฉด '์ฃผ์๊ฐ'์ด ์๋๋ผ, '์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ'์ด๋ค.
๋ํ, ์ฃผ์๊ฐ ์์ฒด๋ฅผ '๋ณต์ฌ ์์ด' ์ธ์๋ก ์ ๋ฌํ๋๊ฒ ์๋๋ผ ์๊ธฐ ์์ ์ด ๊ฐ๊ณ ์๋ ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ค.
๊ฒฐ๊ตญ ๊ธฐ๋ณธํ ๋ณ์๋ ์ฐธ์กฐํ ๋ณ์ ๋ชจ๋ ์๊ธฐ ์์ ์ด ๊ฐ๊ณ ์๋ ๊ฐ์ ๋ณต์ฌํด์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ Call by value์ด๋ค.
๐ก CORS(๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ , Cross-Origin Resource Sharing)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
CORS๋ ๋๋ฉ์ธ์ด ์๋ก๋ค๋ฅธ 2๊ฐ์ ์ฌ์ดํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์
๋๋ค.
์๋ฅผ ๋ค์ด domain-a.com โ domain-b.com์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ ๋ฐ๋ก ์ค์ ํ์ง ์์ผ๋ฉด CORS ์๋ฌ๋ฅผ ๋ง๋๊ฒ ๋ฉ๋๋ค.
โป ๋ธ๋ผ์ฐ์ ๋ ๋ณด์ ์์ ์ด์ ๋ก, ์คํฌ๋ฆฝํธ์์ ์์ํ ๊ต์ฐจ ์ถ์ฒ HTTP ์์ฒญ์ ์ ํํ๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด์๋, ๊ทธ ์ถ์ฒ์์ CORS์ ๋ํ ๋ด์ฉ์ Response์ ํค๋์ ์ถ๊ฐํด์ค์ผ ํฉ๋๋ค.
- Access-Control-Allow-Orgin : ์์ฒญ์ ๋ณด๋ด๋ ํ์ด์ง์ ์ถ์ฒ [ *, ๋๋ฉ์ธ ]
- Access-Control-Allow-Methods : ์์ฒญ์ ํ์ฉํ๋ ๋ฉ์๋. Default : GET, POST
- Access-Control-Max-Age : ํด๋ผ์ด์ธํธ์์ preflight ์์ฒญ (์๋ฒ์ ์๋ต ๊ฐ๋ฅ์ฌ๋ถ์ ๋ํ ํ์ธ) ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์๊ฐ
- Access-Control-Allow-Headers : ์์ฒญ์ ํ์ฉํ๋ ํค๋
๐ก ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๋ฌผ์ด ์์์ ์๋๋ก ํ๋ฅด๋ ๊ฒ์ฒ๋ผ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ค์์ํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
- ๋ํ์ ์ธ ์ธ์ด๋ก C์ธ์ด๊ฐ ์๋ค.
- ์ปดํจํฐ์ ์ฒ๋ฆฌ๊ตฌ์กฐ์ ์ ์ฌํด ์คํ์๋๊ฐ ๋น ๋ฅด๋ค.
- ์ฝ๋์ ์์๊ฐ ๋ฐ๋๋ฉด ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ด๋ ต๋ค.
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ค์ ์ธ๊ณ์ ์ฌ๋ฌผ๋ค์ ๊ฐ์ฒด๋ก ๋ชจ๋ธ๋งํ์ฌ ๊ฐ๋ฐ์ ์งํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
- ๋ํ์ ์ธ ์ธ์ด๋ก Java๊ฐ ์๋ค.
- ์บก์ํ, ์์, ๋คํ์ฑ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ ์ด์ฉํ ์ ์๋ค.
- ์ ์ฐจ์งํฅ ์ธ์ด๋ณด๋ค ์คํ์๋๊ฐ ๋๋ฆฌ๋ค.
์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ฅ์ค์ฌ์ผ๋ก ๋ฐ๋ผ๋ณด๋ ๋ฐฉ์์ผ๋ก "๋ฌด์์ ์ด๋ค ์ ์ฐจ๋ก ํ ๊ฒ์ธ๊ฐ?"๊ฐ ํต์ฌ์ด ๋๋ฉฐ,
์ด๋ค ๊ธฐ๋ฅ์ ์ด๋ค ์์๋ก ์ฒ๋ฆฌํ๋๊ฐ์ ๋ํด ์ด์ ์ ๋ง์ถ๊ณ ,
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ฅ์ด ์๋ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๋ฐ๋ผ๋ณด๋ ๋ฐฉ์์ผ๋ก "๋๊ฐ ์ด๋ค ์ผ์ ํ ๊ฒ์ธ๊ฐ?"๊ฐ ํต์ฌ์ด๋ฉฐ,
๊ฐ์ฒด๋ฅผ ๋์ถํ๊ณ ๊ฐ๊ฐ์ ์ญํ ์ ์ ์ํด ๋๊ฐ๋ ๊ฒ์ ์ด์ ์ ๋๋ค.
๐ก OAuth 2.0์ ํ๋ฆ์ ๋ํด ๊ฐ๋จํ ์ค๋ช ํด์ฃผ์ธ์.

- ์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ(์ดํ ํด๋ผ)์๊ฒ ์ฌ์ฉ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ํด๋ผ๋ ๊ถํ ์๋ฒ์ ๊ถํ ๋ถ์ฌ ์น์ธ ์ฝ๋ ์์ฒญ(response_type=code๋ก ์ง์ ํ์ฌ ์์ฒญ)์ ๋ณด๋ธ๋ค.
- ์ดํ ํด๋ผ๋ ๊ถํ ์๋ฒ์์ ์ ๊ณตํ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ๋ฉด ๊ถํ ์๋ฒ๋ (2)๊ถํ ๋ถ์ฌ ์น์ธ ์ฝ๋ ์์ฒญ์ ์ ๋ฌ๋ฐ์ redirect_url๋ก Authorization Code๋ฅผ ์ ๋ฌํ๋ค.
- Authorization Code๋ ๊ถํ ์๋ฒ์์ ์ ๊ณตํ๋ API๋ฅผ ํตํด Access Token์ผ๋ก ๊ตํ๋๋ค.
๐ก ๋์ ์ฟผ๋ฆฌ๋ ๋ฌด์์ด๊ณ ์ธ์ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋์?
๋์ ์ฟผ๋ฆฌ๋ ์คํ์์ ํน์ ์กฐ๊ฑด์ด๋ ์ํฉ์ ๋ฐ๋ผ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ด ๋ณ๊ฒฝ๋์ด ์คํ๋๋ ์ฟผ๋ฆฌ๋ฌธ์ ๋งํฉ๋๋ค.
์ปดํ์ผ์์ SQL ๋ฌธ์ฅ์ ํ์ ํ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํฉ๋๋ค. ์คํ ์์ ์ ๋ฐ๋ผ where์ ์ ์กฐ๊ฑด์ด ๋ฌ๋ผ์ง ๋ ์ฌ์ฉํฉ๋๋ค.
์ฟผ๋ฆฌ๋ฌธ์ด ๋ณํ๋ ๋ณํ์ง ์๋๋์ ๋ฐ๋ผ ์ ์ ์ฟผ๋ฆฌ/๋์ ์ฟผ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
๐ก CSRF(Cross-site request forgery)์ ๋ํด ์ค๋ช ํ๊ณ , ์ด๋ฅผ ๋ง๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ์ ์ฝ์๋ก ์น ์ดํ๋ฆฌ์ผ์ด์
์ทจ์ฝ์ ์ค ํ๋๋ก ๊ณต๊ฒฉ์๊ฐ ์๋ํ๋๋ก ์ฌ์ฉ์๊ฐ ํ๋ํ๊ฒ ํ์ฌ ํน์ ์นํ์ด์ง๋ฅผ ๋ณด์์ ์ทจ์ฝํ๊ฒ ํ๋ค๊ฑฐ๋ ์์ , ์ญ์ ๋ฑ์ ์์
์ ํ๊ฒ ๋ง๋๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ ์๋ฏธํฉ๋๋ค.
1. ์ฌ์ฉ์์ ์์ฒญ์ referrer๋ฅผ ํ์ธํ์ฌ ๋๋ฉ์ธ์ด ์ผ์นํ๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ณต๊ฒฉ์ ๋ฐฉ์ด
โป ์์ฒญ ํค๋(request header)์์ referrer ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์
โป ๊ฐ์ ๋๋ฉ์ธ์์ ๋ค์ด์ค๋ ์ ์์ ํ์ฉํ๋ ๋ค๋ฅธ ๋๋ฉ์ธ์์ ํธ์ถํ ๋๋ ์ฐจ๋จํ๋ ๊ฐ๋
2. ์ํ๋ฅผ ๋ณํ์ํค๋ POST, PUT ๋ฑ์ ์์ฒญ์ ๋ํด csrf ํ ํฐ์ด ํฌํจ๋์ด์ผ๋ง ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ๊ณต๊ฒฉ์ ๋ฐฉ์ด
CSRF ๊ณต๊ฒฉ๊ณผ์
- 2008๋
๋์ ์์๋ ์ฅ์
ํดํน ์ฌ๊ณ ๋ CSRF ๊ณต๊ฒฉ์ ํ๋ค๊ณ ํ๋ค.
(ํด์ปค๊ฐ ์ฅ์
์ด์์์๊ฒ CSRF ์ฝ๋๊ฐ ํฌํจ๋ ์ด๋ฉ์ผ์ ๋ณด๋ด์ ๊ด๋ฆฌ์ ๊ถํ์ ์ป์ด๋๋ค)
|
... |
|
<img src="http://auction.com/changeUserAcoount?id=admin&password=admin" width="0" height="0"> |
|
... |
1. ์ฅ์
๊ด๋ฆฌ์ ์ค ํ ๋ช
์ด ๊ถํ์ ๊ฐ์ง์ฑ ํ์ฌ ๋ด์์ ์์
์ ํ๋ ์ค ๋ฉ์ผ์ ์กฐํํ๋ค. (๋ก๊ทธ์ธ์ด ๋์ด์์ผ๋ ๊ด๋ฆฌ์๋ก์์ ์ ํจํ ์ฟ ํค๋ฅผ ๊ฐ์ง๊ณ ์์)
2. ํด์ปค๋ ์์ ๊ฐ์ด ํ๊ทธ๊ฐ ๋ค์ด๊ฐ ์ฝ๋๊ฐ ๋ด๊ธด ์ด๋ฉ์ผ์ ๋ณด๋ธ๋ค.
3. ๊ด๋ฆฌ์๊ฐ ์ด๋ฉ์ผ์ ์ด์ด๋ณผ ๋, ์ด๋ฏธ์ง ํ์ผ์ ๋ฐ์์ค๊ธฐ ์ํด ์ URL์ด ์ด๋ฆฐ๋ค.
4. ํด์ปค๊ฐ ์๋ํ ๋๋ก ๊ด๋ฆฌ์ ๊ณ์ id์ pw๊ฐ admin์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
๐ก ๋์นญํค, ๋น๋์นญํค ์ํธํ ๋ฐฉ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋์นญํค์ ๋น๋์นญํค๋ ์๋ฐฉํฅ ์ํธํ ๋ฐฉ์์
๋๋ค.
๋์นญํค๋ ์ํธํ์ ๋ณตํธํ์ ๊ฐ์ ์ํธ ํค๋ฅผ ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
์ด๋ ์ค๊ฐ์ ๋๊ตฐ๊ฐ ์ํธํค๋ฅผ ๊ฐ๋ก์ฑ๋ฉด ์ ๋ณด๊ฐ ์ ์ถ๋ ์ ์๋ค๋ ๋จ์ ์ด ์๋๋ฐ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ณด์ํ ๋ฐฉ์์ด ๋ฐ๋ก ๋น๋์นญํค ์
๋๋ค.
๋น๋์นญํค๋ ์ํธํ์ ๋ณตํธํํ ๋ ์๋ก ๋ค๋ฅธ ํค๋ฅผ ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
ํ์ธ์๊ฒ ์ ๋ ๋
ธ์ถ๋์ด์๋ ์๋๋ ๊ฐ์ธํค์ ๊ณต๊ฐ์ ์ผ๋ก ๊ฐ๋ฐฉ๋์ด ์๋ ๊ณต๊ฐํค๋ฅผ ์์ผ๋ก ์ด๋ฃฌ ํํ์
๋๋ค.
๐ก TDD(Test-Driven-Development)์ ๊ฐ๋ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
TDD๋ ์์ ๋จ์์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๊ณ ๊ทธ์ ๋ง๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ํ
์คํธ๋ฅผ ํต๊ณผํ ํ์
์ํฉ์ ๋ง๊ฒ ๋ฆฌํฉํ ๋งํ๋ ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ ๋ฐฉ์์ ๋งํฉ๋๋ค.
์ด๋ ๊ฒ ๋ฐ๋ณต์ ์ธ ๋จ๊ณ๊ฐ ์งํ๋๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ์ฝ๋์ ๋ฒ๊ทธ๊ฐ ์ค์ด๋ค๊ณ , ์ฝ๋๋ ๊ฐ๊ฒฐํด์ง๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
TDD๋ ๋ ๋ ๊ทธ๋ฆฐ ์ฌ์ดํด์ด๋ผ๋ 3๊ฐ์ง ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
- Red : ์ด๋ ํ ๊ธฐ๋ฅ์ ๊ฒ์ฆํ๋ ํ ์คํธ๊ฐ ์คํจํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ค์ ๋ก ์คํจํ๋์ง ํ์ธํ๋ค.
- Green : ์ด๋ ํ ๊ธฐ๋ฅ์ ๊ฒ์ฆํ๋ ํ ์คํธ๊ฐ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ค์ ๋ก ์ฑ๊ณตํ๋์ง ํ์ธํ๋ค.
- Refactor : ์์ ์คํจํ๋ ํ ์คํธ์ ์ฑ๊ณตํ๋ ํ ์คํธ๋ฅผ ๋ชจ๋ ๊ฒ์ฆํ๋ค๋ฉด, ์์ฑํ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ณ ๊ฐ๋ ์ฑ ์ข๊ฒ ๊ณ ์น๋ค.
- Repeat : ์ด ์ธ ๊ฐ์ง ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
๐ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ ํด์ผํ๋ ์ด์ ์ ๋ํด ์๋๋๋ก ์ค๋ช ํด์ฃผ์ธ์.
1. ๊ธฐ๋ฅ์ ์ถ๊ฐ, ๋ณ๊ฒฝ, ์ญ์ ๋ก ์ธํ ์ํฅ๋๋ฅผ ์ฝ๊ฒ ํ์ ๊ฐ๋ฅ
2. ์์ํ์ง ๋ชปํ ์ค๋ฅ์ ๋ํ ํผ๋๋ฐฑ์ ์ํด
3. ์ข์ ์ค๊ณ๋ก ์์ฑ๋๊ฒ๋ ์ฝ๋๋ฅผ ์ ๋
4. ๊ธฐ๋ฅ ์ ์์ ๋ฌธ์์ ์ญํ
5. ์ค์๋ฅผ ์ค์ฌ์ค๋ค.
๐ก DDD(Domain-Driven-Design)์์ ์๊ธฐํ๋ ๊ณ์ธต๊ณผ ๊ฐ๊ฐ์ ์ญํ ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
- ํํ ๊ณ์ธต(Presentation layer) : ์ฌ์ฉ์์ ์์ฒญ์ ๋ํด ํด์ํ๊ณ ์๋ตํ๋ ์ผ์ ์ฑ
์์ง๋ ๊ณ์ธต (Controller)
- Client๋ก๋ถํฐ request๋ฅผ ๋ฐ๊ณ response๋ฅผ return ํ๋ API ์ ์
- ์์ฉ ๊ณ์ธต(Application layer) : ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ํ๊ณ ์ ์์ ์ผ๋ก ์ํ๋ ์ ์๋๋ก ๋๋ฉ์ธ ๊ณ์ธต๊ณผ ์ธํ๋ผ์คํธ๋ญ์ฒ ๊ณ์ธต์ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๋ ๊ณ์ธต (Service)
- transaction ๊ด๋ฆฌ, DTO ๋ณํ, ๋ชจ๋๊ฐ์ ์ฐ๊ณ๋ฅผ ์งํ
- ๋๋ฉ์ธ ๊ณ์ธต(Domain layer) : ๋น์ฆ๋์ค ๊ท์น, ์ ๋ณด์ ๋ํ ์ค์ง์ ์ธ ๋๋ฉ์ธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด ๋ชจ๋ ๊ฒ์ ์ฑ
์์ง๋ ๊ณ์ธต (Entity)
- Entity๋ฅผ ํ์ฉํ์ฌ ๋๋ฉ์ธ ๋ก์ง์ด ์งํ๋๋ค.
- ์ ๋ฌด ์ํฉ์ ๋ฐ์ํ์ฌ ์ํ๋ฅผ ์ ์ดํ๋ ์ญํ ์ ์ง์คํ๋ ๊ณ์ธต
- ์ธํ๋ผ์คํธ๋ญ์ฒ ๊ณ์ธต(Infrastructure layer) : ์ธ๋ถ์์ ํต์ (ORM, DB, NoSQL)์ ๋ด๋นํ๋ ๊ณ์ธต (Repository)
- ํด๋น ๊ณ์ธต์์ ์ป์ด์จ ์ ๋ณด๋ฅผ ์์ฉ ๊ณ์ธต ๋๋ ๋๋ฉ์ธ ๊ณ์ธต์ ์ ๋ฌํ๋ ๊ฒ์ ์ฃผ ์ญํ ๋ก ๋ด๋น
DDD(Domain-Driven-Design) ๊ณ์ธต๊ตฌ์กฐ ์์ธํ ์์๋ณด๊ธฐ
๐ก MSA(Microservice Architecture)๊ฐ ๋ญ์ง ์ค๋ช ํด์ฃผ์ธ์.
MSA๋ 1๊ฐ์ ์์คํ
์ ๋
๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ๊ฐ๊ฐ์ ์๋น์ค๋ก ๋ถํ ํฉ๋๋ค. ๊ฐ๊ฐ์ ์๋น์ค๋ API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ 1๊ฐ์ ํฐ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋ชจ๋ ์์คํ
์ ๊ตฌ์ฑ์์๊ฐ ํ ํ๋ก์ ํธ์ ํตํฉ๋์ด ์๋ Monolithic Architecture(๋ชจ๋๋ฆฌ์ ์ํคํ
์ณ)์ ํ๊ณ์ ์ ๊ทน๋ณตํ๊ณ ์ ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.

- ์ฅ์
- ์ผ๋ถ ์๋น์ค์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์ ์ฒด ์๋น์ค์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค.
- ๊ฐ๊ฐ์ ์๋น์ค๋ค์ ์๋ก ๋ค๋ฅธ ์ธ์ด์ ํ๋ ์์ํฌ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
- ์๋น์ค์ ํ์ฅ์ด ์ฉ์ดํ๋ค.
- ๋จ์
- ์๋น์ค๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด ํ ์คํธ๋ ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ์ด ์ด๋ ต๋ค.
- ์๋น์ค ๊ฐ์ API๋ก ํต์ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ํ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
- ์๋น์ค ๊ฐ์ ํธ์ถ์ด ์ฐ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ๋ฐ ์๋ฌ ํธ๋ ์ด์ฑ์ด ์ด๋ ต๋ค.
์ถ์ฒ: https://dev-coco.tistory.com/164 [์ฌ๊ธฐ๋ก์ด ๊ฐ๋ฐ์ํ:ํฐ์คํ ๋ฆฌ]
'Tech Interview' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM? / JRE? / JDK? (1) | 2025.06.24 |
---|---|
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ๋ฐฑ์๋, Spring (1) | 2024.05.02 |
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ์ด์์ฒด์ (0) | 2024.04.29 |
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ๋คํธ์ํฌ (0) | 2024.04.29 |
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ์๋ฃ๊ตฌ์กฐ (0) | 2024.04.29 |