๐ Contents
- TDD๋
- ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ์ด๋ค ํ์ด์ง๋ฅผ ์์ฒญํ๋ฉด ์ผ์ด๋๋ ์ผ๋ จ์ ๊ณผ์ ์ ์ค๋ช
- ์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ
- ๋ถ์ฐ๋ฝ
- ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด
- 64bit CPU์ 32bit CPU ์ฐจ์ด
- CVS, SVN, Git
- Git Branch ์ข ๋ฅ(5๊ฐ์ง)
- ์น ์๋ฒ(Web Server)์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ(WAS)์ ์ฐจ์ด
- ์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ด๋
- Servlet๊ณผ JSP
- Redis์ Memcached์ ์ฐจ์ด
- Maven๊ณผ Gradle์ ์ฐจ์ด
- Blocking๊ณผ Non-Blocking
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ด๋
- Mock์ด๋
- Test Driven Development
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ: ํ ์คํธ๊ฐ ๊ฐ๋ฐ์ ์ด๋์ด ๋๊ฐ๋ค.
- ๊ตฌ์ฒด์ ์ธ ํ๋ ๋ ๋ฒจ์์์ TDD์ ๊ฐ๋
- ํ ์คํธ๋ฅผ ๋จผ์ ๋ง๋ค๊ณ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํ ๊ฒ์ ์ง๋ ๊ฒ
- ์ฆ, ๋ง๋๋ ๊ณผ์ ์์ ์ฐ์ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ๊ทธ๊ฑธ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ฉด์ ์ ๋๋ก ๋์ํ๋์ง์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ทน์ ์ผ๋ก ๋ฐ๋ ๊ฒ์ด๋ค.
- ์ถ์์ ์ธ ๋ ๋ฒจ์์์ TDD์ ํต์ฌ ๊ฐ๋
(์ค์)
- ๊ฒฐ์ ๊ณผ ํผ๋๋ฐฑ ์ฌ์ด์ ๊ฐญ์ ๋ํ ์ธ์, ๋ ๋์๊ฐ ๊ฒฐ์ ๊ณผ ํผ๋๋ฐฑ ์ฌ์ด์ ๊ฐญ์ ์กฐ์ ํ๊ธฐ ์ํ ํ ํฌ๋์ด๋ผ๊ณ ๋ ํ ์ ์๋ค.
์น ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ์ด๋ค ํ์ด์ง๋ฅผ ์์ฒญํ๋ฉด ์ผ์ด๋๋ ์ผ๋ จ์ ๊ณผ์ ์ ์ค๋ช
- Ex. url์ 'www.naver.com' ์ ์
๋ ฅํ๋ค. ์ผ์ด๋๋ ํ์์ ๋ํด ์๋๋๋ก ์ค๋ช
ํ๋ผ.
- ๊ด๋ จ ๋งํฌ: http://owlgwang.tistory.com/1
- ํ๋ ์์ํฌ(Framework)๋
- ์ํํธ์จ์ด์ ๊ตฌ์ฒด์ ์ธ ๋ถ๋ถ์ ํด๋นํ๋ ์ค๊ณ์ ๊ตฌํ์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ๋ ์ผ๋ จ์ ํ์ ํ๋ ํํ๋ก ํด๋์ค๋ค์ ์ ๊ณตํ๋ ๊ฒ
- Ex) ์๋์ฐจ์ ํ๋ ์, ์ฆ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑํ๊ณ ์๋ ๋ผ๋
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Library)๋
- ์์ฃผ ์ฌ์ฉ๋๋ ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๋๋ก ์ ์ ๋ฆฌํ ์ผ๋ จ์ ์ฝ๋๋ค์ ์งํฉ
- Ex) ์๋์ฐจ์ ๊ธฐ๋ฅ์ ํ๋ ๋ถํ
- ํ์๊ด๋ฆฌ ํด
- ์์ค์ ๋ณํ๋ฅผ ๋์์์ด ๊ด๋ฆฌํ๋ ํด
- ์์ค๋ฅผ ๋ฒ์ ๋ณ๋ก ๊ด๋ฆฌํ ์ ์๊ณ , ์ค์ํ ๊ฒฝ์ฐ ์๋ณต ๊ฐ๋ฅํ๊ฒ ํ๋ ํด
- ๊ฐ๋
- Concurrent Versions System
- GNU ๋ผ์ด์ผ์ค
- ์ค์์ ์์นํ Repository์ ํ์ผ์ ์ ์ฅํ๊ณ , ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ
- checkout์ผ๋ก ํ์ผ ๋ณต์ฌ, commit์ผ๋ก ๋ณ๊ฒฝ์ฌํญ ์ ์ฅ
- ์ต์ข ๋ฒ์ ์ ์์ค๋ง ๊ด๋ฆฌ
- ๋จผ์ ๋ฐ์ํ ์์ค๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋๋ ์์คํ
- ์ฅ์
- ์ค๋ซ๋์ ์ฌ์ฉ์ด ๋์์ผ๋ฉฐ ์์ ์
- ํ์ผ ์ ์ฒด๋ฅผ ์ ์ฅํ์ง ์๊ณ ๋ณ๊ฒฝ์ฌํญ๋ง ์ ์ฅํ์ฌ ์ ์ ์ฉ๋ ์ฌ์ฉ
- ๋จ์
- ํ์ผ ์ด๋์ด๋ ์ด๋ฆ ๋ณ๊ฒฝ์ ๋ฒ์ ๋ณ๊ฒฝ ๋ฏธ๋ฐ์(ํ์ผ ์ง์ฐ๊ณ ๋ค์ ์ถ๊ฐ)
- ๋ฒ์ ๋ถ๊ธฐ๊ฐ ํ๋ค๊ณ , ์ฅ๊ธฐ๊ฐ ๋ถ๊ธฐ๋ ๋ฒ์ ์ด์์ ๋ํด ๋ฏธ์ค๊ณ
- commit ์คํจ ์ ๋กค๋ฐฑ ๋ถ๊ฐ๋ฅ
- ์๋์ ์ผ๋ก ๋๋ฆฐ ์๋
- ํผ์ ๊ฐ๋ฐํ ๊ฒฝ์ฐ ์ต์ข ๋ฒ์ ๋ง ๊ด๋ฆฌํ๋ CVS ํด ์ฌ์ฉ์ด ํธ๋ฆฌ
- ๊ฐ๋
- Apache Subversion
- CVS์ ๋์ ํธํ์ฑ์ ์ ์งํ๋ฉฐ ์ฝ๊ฐ์ ๋ฒ๊ทธ๋ฅผ ์์ ํ ๋์ฒด ์์คํ ์ผ๋ก ๊ฐ๋ฐ
- ์ค์ ๊ด๋ฆฌ
- ์ต์ด 1ํ์ ํํด ํ์ผ ์๋ณธ ์ ์ฅ, ์ดํ์๋ ์๋ณธ๊ณผ ์ฐจ์ด์ ์ ์ ์ฅ
- ๋ฒ์ ๋ถ๊ธฐ๊ฐ ์ฝ๊ณ , ๋๊ท๋ชจ์ ๋ถ๊ธฐ๋ ํ๋ก์ ํธ์ ๋์
- ์ฅ์
- ์์์ commit์ผ๋ก ๋ค๋ฅธ ์ฌ์ฉ์์ commit๊ณผ ์ํค์ง ์์ผ๋ฉฐ commit ์คํจ ์ ๋กค๋ฐฑ ์ง์
- ์์์ commit : ํ์ผ ๋จ์๊ฐ ์๋ change set์ด commit ๋จ์
- ํจ์จ์ ์ธ ๋ฒ์ ๋ถ๊ธฐ, ์ธ์ ๋ ์ง ์ํ๋ ๋ฒ์ ์ผ๋ก ๋ณต๊ตฌ ๊ฐ๋ฅ
- ์ด์งํ์ผ๋ ํจ์จ์ ์ผ๋ก ์ ์ฅ ๊ฐ๋ฅ
- ์์์ commit์ผ๋ก ๋ค๋ฅธ ์ฌ์ฉ์์ commit๊ณผ ์ํค์ง ์์ผ๋ฉฐ commit ์คํจ ์ ๋กค๋ฐฑ ์ง์
- ๋จ์
- ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ ๋ณ๊ฒฝ ๊ด๋ จ ๋ฒ๊ทธ
- ๋ถ์ถฉ๋ถํ ์ ์ฅ์ ๊ด๋ฆฌ ๋ช ๋ น์ด
- CVS์ ๋นํด ์๋์ ์ผ๋ก ๋ถ์์
- Local Repository๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ ๋ง์ version history ๊ด๋ฆฌ ๋ถ๊ฐ๋ฅ
- commit์ ์ค์๊ฐ ์์ ์ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ ๋ฐ๋ก ์ํฅ ๊ฐ๋ฅ์ฑ
- ๊ฐ๋
- CVS๋ฅผ ๊ฐ์ ํ๊ณ , ๋ณด๋ค ๋น ๋ฅธ ๋ถ์ฐ ๋ฒ์ ์ ์ด ์์คํ
- ์๋ฒ ์ ์ฅ์์ ๊ฐ๋ฐ์ ์ ์ฅ์๊ฐ ๋ ๋ฆฝ์
- ์ฌ์ฉ์ ๊ธฐ๋ก ํ์ ๊ฐ๋ฅ
- ์ฅ์
- ๋น ๋ฅธ ์๋
- ๋ถ๊ธฐ ๋ฒ์ ์ ํจ์จ์ ์ธ ์ด์
- ์คํ๋ผ์ธ์์๋ ์ ์ฒด ์ด๋ ฅ ์ด์ฉ ๊ฐ๋ฅ
- ๋ถ์ฐ๋ P2P ๋ชจ๋ธ
- commit์ ์ค์๊ฐ ์์ด๋ ์๋ฒ์ ๋ฐ๋ก ์ํฅ ์์
- ๋จ์
- SVN๋ณด๋ค ๋ง์ ๊ธฐ๋ฅ์ ์ง์ํ๋ ๋งํผ ๋์ ์ง์ ์ฅ๋ฒฝ
- ๊ฐ์ธ ๊ฐ๋ฐ์์๊ฒ ๋ถ์ ์
- ํ ๊ฐ๋ฐ์ ์ํ ๋ถ์ฐ ํ๊ฒฝ ์ฝ๋ฉ์ ์ต์ ํ
- Master Branch
- ์ ํ์ผ๋ก ์ถ์๋ ์ ์๋ ๋ธ๋์น
- ๋ฐฐํฌ(Release) ์ด๋ ฅ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ. ์ฆ, ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ๋ง์ ๊ด๋ฆฌํ๋ค.
- Develop Branch
- ๋ค์ ์ถ์ ๋ฒ์ ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํ ๋ธ๋์น๋ค์ ๋ณํฉํ๊ธฐ ์ํด ์ฌ์ฉ. ์ฆ, ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ณ ๋ฒ๊ทธ๊ฐ ์์ ๋์ด ๋ฐฐํฌ ๊ฐ๋ฅํ ์์ ์ ์ธ ์ํ๋ผ๋ฉด develop ๋ธ๋์น๋ฅผ โmasterโ ๋ธ๋์น์ ๋ณํฉ(merge)ํ๋ค.
- ํ์์๋ ์ด ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ๋ค.
- Feature branch
- ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- feature ๋ธ๋์น๋ ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ฐ ๋ฒ๊ทธ ์์ ์ด ํ์ํ ๋๋ง๋ค โdevelopโ ๋ธ๋์น๋ก๋ถํฐ ๋ถ๊ธฐํ๋ค. feature ๋ธ๋์น์์์ ์์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต์ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ์์ ์ ๋ก์ปฌ ์ ์ฅ์์์ ๊ด๋ฆฌํ๋ค.
- ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด โdevelopโ ๋ธ๋์น๋ก ๋ณํฉ(merge)ํ์ฌ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ํ๋ค.
- Release Branch
- ์ด๋ฒ ์ถ์ ๋ฒ์ ์ ์ค๋นํ๋ ๋ธ๋์น
- ๋ฐฐํฌ๋ฅผ ์ํ ์ ์ฉ ๋ธ๋์น๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํ ํ์ด ํด๋น ๋ฐฐํฌ๋ฅผ ์ค๋นํ๋ ๋์ ๋ค๋ฅธ ํ์ ๋ค์ ๋ฐฐํฌ๋ฅผ ์ํ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ๊ณ์ํ ์ ์๋ค. ์ฆ, ๋ฑ๋ฑ ๋์ด์ง๋ ๊ฐ๋ฐ ๋จ๊ณ๋ฅผ ์ ์ํ๊ธฐ์ ์์ฃผ ์ข๋ค.
- ์๋ฅผ ๋ค์ด, โ์ด๋ฒ ์ฃผ์ ๋ฒ์ 1.3 ๋ฐฐํฌ๋ฅผ ๋ชฉํ๋ก ํ๋ค!โ๋ผ๊ณ ํ ๊ตฌ์ฑ์๋ค๊ณผ ์ฝ๊ฒ ์ํตํ๊ณ ํฉ์ํ ์ ์๋ค๋ ๋ง์ด๋ค.
- Hotfix Branch
- ์ถ์ ๋ฒ์ ์์ ๋ฐ์ํ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น
- ๋ฐฐํฌํ ๋ฒ์ ์ ๊ธด๊ธํ๊ฒ ์์ ์ ํด์ผ ํ ํ์๊ฐ ์์ ๊ฒฝ์ฐ, โmasterโ ๋ธ๋์น์์ ๋ถ๊ธฐํ๋ ๋ธ๋์น์ด๋ค. โdevelopโ ๋ธ๋์น์์ ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ์ ์์ ํ์ฌ ๋ฐฐํฌ ๊ฐ๋ฅํ ๋ฒ์ ์ ๋ง๋ค๊ธฐ์๋ ์๊ฐ๋ ๋ง์ด ์์๋๊ณ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ๋ ์ด๋ ค์ฐ๋ฏ๋ก ๋ฐ๋ก ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ โmasterโ ๋ธ๋์น์์ ์ง์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ํ์ํ ๋ถ๋ถ๋ง์ ์์ ํ ํ ๋ค์ โmasterโ๋ธ๋์น์ ๋ณํฉํ์ฌ ์ด๋ฅผ ๋ฐฐํฌํด์ผ ํ๋ ๊ฒ์ด๋ค.
- Web Server
- Web Server์ ๊ฐ๋
- ์ํํธ์จ์ด์ ํ๋์จ์ด๋ก ๊ตฌ๋ถ๋๋ค.
-
- ํ๋์จ์ด
- Web ์๋ฒ๊ฐ ์ค์น๋์ด ์๋ ์ปดํจํฐ
-
- ์ํํธ์จ์ด
- ์น ๋ธ๋ผ์ฐ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ HTTP ์์ฒญ์ ๋ฐ์ **์ ์ ์ธ ์ปจํ ์ธ (.html .jpeg .css ๋ฑ)**๋ฅผ ์ ๊ณตํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ
- Web Server์ ๊ธฐ๋ฅ
- HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์น ๋ธ๋ผ์ฐ์ ์ ์์ฒญ์ ์๋น์ค ํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ค.
- ์์ฒญ์ ๋ฐ๋ผ ์๋์ ๋ ๊ฐ์ง ๊ธฐ๋ฅ ์ค ์ ์ ํ๊ฒ ์ ํํ์ฌ ์ํํ๋ค.
- ๊ธฐ๋ฅ 1)
- ์ ์ ์ธ ์ปจํ ์ธ ์ ๊ณต
- WAS๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ์์์ ์ ๊ณตํ๋ค.
- ๊ธฐ๋ฅ 2)
- ๋์ ์ธ ์ปจํ ์ธ ์ ๊ณต์ ์ํ ์์ฒญ ์ ๋ฌ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ(Request)์ WAS์ ๋ณด๋ด๊ณ , WAS๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ(์๋ต, Response)ํ๋ค.
- Web Server์ ์
- Ex) Apache Server, Nginx, IIS(Windows ์ ์ฉ Web ์๋ฒ) ๋ฑ
- Web Server์ ๊ฐ๋
- WAS(Web Application Server)
- WAS์ ๊ฐ๋
- DB ์กฐํ๋ ๋ค์ํ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ์๊ตฌํ๋ ๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง Application Server
- HTTP๋ฅผ ํตํด ์ปดํจํฐ๋ ์ฅ์น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํํด์ฃผ๋ ๋ฏธ๋ค์จ์ด(์ํํธ์จ์ด ์์ง)์ด๋ค.
- **"์น ์ปจํ
์ด๋(Web Container)" ํน์ "์๋ธ๋ฆฟ ์ปจํ
์ด๋(Servlet Container)"**๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- Container๋ JSP, Servlet์ ์คํ์ํฌ ์ ์๋ ์ํํธ์จ์ด๋ฅผ ๋งํ๋ค.
- ์ฆ, WAS๋ JSP, Servlet ๊ตฌ๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
- WAS์ ๊ธฐ๋ฅ
- WAS = Web Server + Web Container
- Web Server ๊ธฐ๋ฅ๋ค์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํ๊ณ ์ํ๋ ๋ชฉ์ ์ผ๋ก ์ ์๋์๋ค.
- ๋ถ์ฐ ํธ๋์ญ์ , ๋ณด์, ๋ฉ์์ง, ์ฐ๋ ๋ ์ฒ๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ ๋ถ์ฐ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ค.
- ์ฃผ๋ก DB ์๋ฒ์ ๊ฐ์ด ์ํ๋๋ค.
- WAS์ ์
- Ex) Tomcat, JBoss, Jeus, Web Sphere ๋ฑ
- WAS์ ๊ฐ๋
- ๊ธฐ๋ฅ์ ์ฐจ์ด๋ ์๊ณ ์ญํ ์ ์ฐจ์ด๋ง ์๋ค. (ํ๋ ์ผ์ ๋์ผ)
- Servlet์ด๋
- ์น ๊ธฐ๋ฐ์ ์์ฒญ์ ๋ํ ๋์ ์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ Server Side์์ ๋์๊ฐ๋ Java Program
- Java ์ฝ๋ ์์ HTML ์ฝ๋ (ํ๋์ ํด๋์ค)
- ์น ๊ฐ๋ฐ์ ์ํด ๋ง๋ ํ์ค
- data processing(Controller) ์ ์ข๋ค.
- ์ฆ DB์์ ํต์ , Business Logic ํธ์ถ, ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํ์ธํ๋ ์์ ๋ฑ์ ์ ์ฉํ๋ค.
- Servlet์ด ์์ ๋ ๊ฒฝ์ฐ Java ์ฝ๋๋ฅผ ์ปดํ์ผ(.class ํ์ผ ์์ฑ)ํ ํ ๋์ ์ธ ํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๋ค์ ์ปดํ์ผํ ํ ์ฌ๋ฐฐํฌํ๋ ์์ ์ด ํ์ํ๋ค. (๊ฐ๋ฐ ์์ฐ์ฑ ์ ํ)
- ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ https://gmlwjd9405.github.io/2018/10/28/servlet.html ์ฐธ๊ณ
- JSP๋
- Java ์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Server Side ์คํฌ๋ฆฝํธ ์ธ์ด
- HTML ์ฝ๋ ์์ Java ์ฝ๋
- Servlet๋ฅผ ๋ณด์ํ๊ณ ๊ธฐ์ ์ ํ์ฅํ ์คํฌ๋ฆฝํธ ๋ฐฉ์ ํ์ค
- presentation(View) ์ ์ข๋ค.
- ์ฆ ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ HTML ์์ฑํ๋๋ฐ ์ ์ฉํ๋ค.
- JSP๊ฐ ์์ ๋ ๊ฒฝ์ฐ ์ฌ๋ฐฐํฌํ ํ์๊ฐ ์์ด WAS๊ฐ ์์์ ์ฒ๋ฆฌํ๋ค. (์ฌ์ด ๋ฐฐํฌ)
- ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ https://gmlwjd9405.github.io/2018/11/03/jsp.html ์ฐธ๊ณ
- ๋ถ์ฐ ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ ์์คํ (์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์)
- ๋ฐ์ดํฐ๋ฅผ Key-Value ํํ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๋ฐฉ์(NoSql)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ๋ฅผ ์ค์ฌ ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ๊ฐ์ ์ ์ํด ์ฌ์ฉ
- ๋ฐ์ดํฐ ํํฐ์ ๋์ ํตํด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- Memcached ๋ฏธ์ฌ์ฉ ์(์)
- ๊ฐ ์น ์๋ฒ๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋งํผ๋ง ์บ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์น ์๋ฒ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ฒด ์ฉ๋์ ์ผ๋ถ๋ถ๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ญ๋น ๋ฐ์
- Memcached ์ฌ์ฉ ์(์๋)
- ๊ฐ ์น ์๋ฒ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ ผ๋ฆฌ์ ์ผ๋ก ํตํฉ๋ ๊ฐ์ ํ์ ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋งํผ์ ์บ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ํจ์จ์ฑ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ด์ฉ ๊ฐ๋ฅ
- ํน์ ํญ๋ชฉ์ด ์ฃผ์ด์ก์ ๋ ์ ์ฒด ์น ํด๋ฌ์คํฐ์์ ํญ์ ๋์ผํ ์์น์ ์ ์ฅ ๋ฐ ๊ฒ์ ๊ฐ๋ฅ
- ์๋ฒ ์ฆ์ค ์, ์ ๊ธฐ์ ์ผ๋ก ์ ๊ทผ๋๋ ๋ฐ์ดํฐ์ ์บ์ฑ์ ํตํด DB๋ API ํธ์ถ ํ์ ๊ฐ์
Redis | Memcached | |
---|---|---|
๋ฐ์ดํฐ ํ์ | String, Set, Sorted Set, Hash, List | String |
๋ฐ์ดํฐ ์ ์ฅ | Memory, Disk | Memory |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ | X ๋ช ์์ ์ผ๋ก๋ง ๋ฐ์ดํฐ ์ ๊ฑฐ ๊ฐ๋ฅ |
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ LRU ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ์ดํฐ ์ญ์ ํ ์ฌ์ฌ์ฉ |
์ค๋ ๋ | ๋จ์ผ ์ค๋ ๋ | ๋ฉํฐ ์ค๋ ๋ |
์บ์ฑ ์ฉ๋ | Key, Value ๋ชจ๋ 512MB | Key 250byte, Value 1MB |
- ๋ค์ํ ์๋ฃ๊ตฌ์กฐ ์ง์
- ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ ๋ฐ ๋ฐ์ดํฐ ์์์ฑ
- Snapshots ๋ฐฉ์ : ํน์ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ์ฌ ํ์ผ ๋ณด๊ด
- AOF ๋ฐฉ์ : ์ด๋ฒคํธ๋ฅผ ๋ก๊ทธ์ ๋จ๊ฒจ์ ๋ก๊ทธ ๊ธฐ๋ฐ ๋ณต๊ตฌ
- ๋ง์คํฐ ์ฌ๋ ์ด๋ธ ๊ตฌ์กฐ๋ก ์ฌ๋ฌ๊ฐ์ ๋ณต์ ๋ณธ ์์ฑ ๊ฐ๋ฅ
- ๋ค์ํ ๋ฐ์ดํฐ Eviction ์ ์ฑ
์ง์
- Eviction : ์บ์๊ฐ ๋ฐ์ดํฐ ๊ณต๊ฐ ํ๋ณด๋ฅผ ์ํด ์ฌ์ฉํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๋ ๊ฒ
- PUB/SUB ๊ธฐ๋ฅ ์ ๊ณต
- ๊ฒ์์/๊ตฌ๋ ์์ ๋ฉ์์ง ํจ๋ฌ๋ค์์ ๊ตฌํ
- ๊ฒ์๋ ๋ฉ์์ง๋ ๊ตฌ๋ ์๊ฐ ๋๊ตฌ์ธ์ง๋ ๋ชจ๋ฅด๊ณ ์ฑ๋๋ก ๊ตฌ๋ถ
- ๊ตฌ๋ ์๋ ํ๋ ์ด์์ ์ฑ๋์ ๊ด์ฌ์ ๊ฐ๊ณ (๊ตฌ๋ ), ๊ฒ์์๋ ๋๊ตฌ์ธ์ง ์ ํ์ ์์ด ๊ด์ฌ์๋ ๋ฉ์์ง๋ง ์์
- ํธ๋์ญ์ ์ง์
- ์์น๊ธฐ๋ฐ ๋ฐ์ดํฐ ํ์ ์ง์
- Copy-on-Write ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ์ ๋ ๋ฐฐ ํ์
- ๋ฆฌ๋ ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋๋ฐ, ๊ณต์ ํ ์ ์๋ ์ํฉ์ ๋๋นํด ๋ณต์ฌํ ๋ค์ ์์ ํ๋ ํน์ง
- ์ค์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ์์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๊ณ ์์ ํ ์ ์๋ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ํ์
- Copy-on-Write๋ Redis์ ์์ ๊ด๋ จ ๋ช ๋ น ์คํ ์ ๋ฐ์
- ์ฐธ๊ณ
- ๋ฉ๋ชจ๋ฆฌ ํํธํ ๋ฐ์ ๊ฐ๋ฅ
- ๋ฉํฐ์ค๋ ๋ ์ํคํ ์ฒ ์ง์
- Redis์ ๋นํด ์ ์ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ
- ์ ์ ์ธ ๋ฐ์ดํฐ ์บ์ฑ ์ ์ ๋ฆฌ
- Maven
- Gradle
- ์ง์ ์ ์ดํ ์ ์๋ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ธ๋ก/๋ ผ๋ธ๋ก
- ex. IO, ๋ฉํฐ์ฐ๋ ๋ ๋๊ธฐํ
- Blocking
- ํจ์ ํธ์ถ ์ ํธ์ถ๋ ํจ์์๊ฒ ์ ์ด๊ถ์ด ๋์ด๊ฐ๊ณ , ํด๋น ํจ์๊ฐ ๋๋ ๋๊น์ง ํธ์ถํ ํจ์๋ ๋๊ธฐ
- Non-Blocking
- ํธ์ถ๋ ํจ์๊ฐ ๋ฐ๋ก returnํด์ ํธ์ถํ ํจ์์๊ฒ ์ ์ด๊ถ์ ๋๋ ค์ฃผ์ด ๋ค๋ฅธ ์์ ์งํ ๊ฐ๋ฅ
- ๋ ๊ทธ๋ฃน์ ์ฐจ์ด์ ์ ๊ด์ฌ์ฌ
- Blocking/Non-Blocking
- ํธ์ถ๋ ํจ์์ return ์ฌ๋ถ์ ๊ด์ฌ
- ํธ์ถ๋ ํจ์์ ์ ์ด๊ถ ์์ ์ฌ๋ถ๋ก ๊ตฌ๋ถ
- Synchronous/Asynchronous
- ํธ์ถ๋ ํจ์์ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ๋ ์ฃผ์ฒด์ ๊ด์ฌ
- Asynchronous
- ํธ์ถ๋ ํจ์์ callback์ ์ ๋ฌํ์ฌ ํด๋น ํจ์๊ฐ ์์ ์๋ฃ ์ callback์ ์คํ
- ์ด ๋, ํธ์ถํ ํจ์๋ ํธ์ถ๋ ํจ์์ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋จ
- Synchronous
- ํธ์ถํ ํจ์๊ฐ ํธ์ถ๋ ํจ์์ return์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ๋๋ ๋ฐ๋ก return ๋ฐ๋๋ผ๋ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ๋ ๊ฒ
- ํธ์ถ๋ ํจ์๋ ๋ฐ๋ก return, ํธ์ถํ ํจ์๋ ํธ์ถ๋ ํจ์์ ์์ ์๋ฃ ์ฌ๋ถ ํ์ธ
- ํธ์ถํ ํจ์ ๋ณธ์ธ์ ํจ์ ํธ์ถ ํ ๋ฐ๋ก ๋ค๋ฅธ ์์ ์ํ์ด ๊ฐ๋ฅํ์ง๋ง ํธ์ถ๋ ํจ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ๊ณ์ ํ์ธํ๋ ๋์
- ํธ์ถ๋ ํจ์๋ ๋ฐ๋ก returnํ์ง ์๊ณ , ํธ์ถํ ํจ์๋ ํธ์ถ๋ ํจ์์ ์์ ์๋ฃ ์ฌ๋ถ ๋ฏธํ์ธ
- Blocking, Synchronous ๋ฐฉ์๊ณผ ํฐ ์ฐจ์ด ์์
- [์ฐธ๊ณ ] Non-Blocking, Asynchronous ๋ฐฉ์์ ์ฌ์ฉํ๋ ค๋ ์๋์ ๋ค๋ฅด๊ฒ Blocking, Asynchronous ๋์ด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌ
- ex. Node.js์ MySQL ์กฐํฉ
- Node.js๊ฐ Async ๋์์ ํด๋, DB ํธ์ถ ์ MySQL ๋๋ผ์ด๋ฒ๊ฐ Blocking ๋ฐฉ์
- Non-Blocking, Asynchronous ๋ฐฉ์ ์ฌ์ฉ ์ค ํ๋๋ผ๋ Blocking ๋์์ ํ๋ค๋ฉด ์๋์น ์๊ฒ Blocking, Asynchronous ๋์
- ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ๊ตฌ๋ฌธ์ ๊ด์ ์์ ์ฐ์ฐ์ ์ค๋ช ํ๋ ๋ฐฉ์
- ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ํํ
- ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
- ๋ฌด์์ ํ ๊ฒ์ธ์ง ํํ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ๋ฌด์์ ํ ๊ฒ์ธ์ง ํํ
- ํ๋์จ์ด์ ๋ฐ์ ๊ณผ ํจ๊ป ์ํํธ์จ์ด ํจ๋ฌ๋ค์์ TEXT๊ธฐ๋ฐ์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์์ GUI๊ธฐ๋ฐ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ณํํ์๊ณ , ์ด์ ๋ฉํฐ์ฝ์ด๋ฅผ ๋ฐฐ๊ฒฝ์ผ๋ก ํ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ณํ
- ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ๋ฉํฐ์ฝ์ด๋ฅผ ํ์ฉํ๋ ๋ณ๋ ฌ์ฒ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ ๋์ ์ด ํ์
- ์์ ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํด์๋ ํจ์ํ ํ๋ก๊ทธ๋จ์ด ํ์ฐ์ ์ธ ์ ํ
- ๋ํ, ํ๋ก๊ทธ๋จ์ ๋ณด๋ค ๋จ์ํ๊ฒ ํ๋ ค๋ ์๊ตฌ์ฌํญ์ ์ํด ๋ฑ์ฅ
- ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ณ์ฐ์ ์ํ์ ํจ์์ ์กฐํฉ์ผ๋ก ์๊ฐํ๋ ๋ฐฉ์
- ํจ์๋ฅผ 1๊ธ ๊ฐ์ฒด๋ก ์ฌ์ฉ(๊ณ ์ฐจ ํจ์)
- 1๊ธ ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ ์กฐ๊ฑด
- ๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ๋ด์ ์ ์๋ ๊ฐ์ฒด
- ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๊ฐ๋ฅ
- ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ํ ๋น์ ์ฌ์ฉ๋ ์ด๋ฆ๊ณผ ๊ด๊ณ์์ด ๊ณ ์ ํ ๊ตฌ๋ณ ๊ฐ๋ฅ
- ๋์ ์ผ๋ก ํ๋กํผํฐ ํ ๋น ๊ฐ๋ฅ
- 1๊ธ ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ ์กฐ๊ฑด
- ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ๋ ์์ ํจ์๋ฅผ ํตํด ์ ๋ฌ
- ๊ณต์ ์ํ์ side effect ๋์ ์์ ํจ์๋ฅผ ์ฌ์ฉ
- ์์ ํจ์ : ๊ฐ์ ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ฉด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํํ๋ ํจ์
- ๋ช
๋ นํ ํ๋ฆ ์ ์ด๋ณด๋ค ํฉ์ฑ ํจ์๋ฅผ ์ฌ์ฉ
- ํฉ์ฑ ํจ์ : ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ณ์ฐํ๊ธฐ ์ํด ๋ ์ด์์ ํจ์๋ฅผ ์กฐํฉ
- ex. ๋ฉ์๋ ์ฒด์ด๋
- ๋ถ๋ณ์ฑ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋
- ํจ์๋ฅผ 1๊ธ ๊ฐ์ฒด๋ก ์ฌ์ฉํ๋ฉฐ ํจ์๋ฅผ ์กฐํฉํ๊ณ , ๊ณต์ ์ํ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๋ฐ ์ฌ์ด๋ ์ดํํธ๋ฅผ ํผํด ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ํ๋ก์ธ์ค
- ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๋ฅผ ๋ถ๋ณ ์ํ๋ก ๋ง๋ค์ด side effect ๋ฐฉ์ง ๊ฐ๋ฅ
- ๊ณ ์ฐจํจ์๋ฅผ ํตํ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
- ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํ๊ณ ๊ฐ๋ ์ฑ์ ๋์ฌ ๊ตฌํํ ๋ก์ง์ ์ง์ค
- ๋์์ฑ ์์ ์ ๋ณด๋ค ์ฝ๊ณ ์์ ํ๊ฒ ๊ตฌํ ๊ฐ๋ฅ
- ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ด ์ด๋ฒคํธ์ ๋ฐ์์ ์ํด ๊ฒฐ์ ๋๋ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
- ํ๋ก๊ทธ๋จ์ด ๋ค์ํ ํํ์ ์ฌ์ฉ์ ์ด๋ฒคํธ(ํด๋ฆญ, ํค ์ ๋ ฅ)์ ์๋ต
- ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋๊ธฐํ๊ณ , ์ด๋ฒคํธ๊ฐ ๋ฐ์(์์ฒญ)ํ๋ฉด ํด๋น ์ด๋ฒคํธ์ ์ํฉ์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ(์ฝ๋ฐฑ ํจ์)๋ฅผ ์คํํ์ฌ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด ์๋ต
- ๋ง์ดํฌ๋ก ์๋น์ค ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ๋น๋๊ธฐ์ ์ธ ๋ฌธ์ ์ฒ๋ฆฌ ์ ์ ์ฉ
- ์ด๋ฒคํธ ์์ค(๋ง์ฐ์ค, ํค๋ณด๋ ๋ฑ)๋ ๋ณธ์ธ์ด ๋ฐ์์ํฌ ์ ์๋ ์ด๋ฒคํธ๋ฅผ ๋ณด์
- ์ด๋ฒคํธ ์์ค๋ฅผ ๋จผ์ ์ ์ํ๊ณ , ์์ค๊ฐ ์ผ์ผํฌ ์ ์๋ ์ด๋ฒคํธ๋ฅผ ์ ์ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ
- ์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๊ธฐ์๋ ๋น์ฉ์ด ํฌ๊ณ , ๊ฐ์ฒด๊ฐ ์์กด์ฑ์ด ๋์ ๊ตฌํํ๊ธฐ ํ๋ค ๊ฒฝ์ฐ ๋ง๋๋ ๊ฐ์ง ๊ฐ์ฒด
- ํ ์คํธ ์์ฑ์ ์ํ ํ๊ฒฝ ๊ตฌ์ถ
- ํ ์คํธ๊ฐ ํน์ ๊ฒฝ์ฐ๋ ์๊ฐ์ ์์กด์ ์ธ ๊ฒฝ์ฐ
- ํ ์คํธ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ
- ๊ฐ์ธ PC๋ ์๋ฒ์ ์ฑ๋ฅ ๋ฌธ์ ๋ก ๋์์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ ๊ฒฝ์ฐ
-
ํ ์คํธ ๋๋ธ(Test double)
- ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ, ๋์ ํ ์คํธ๋ฅผ ์งํํ ์ ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฐ์ฒด
- Mock ๊ฐ์ฒด์ ๋น์ทํ์ง๋ง ํ ์คํธ ๋๋ธ์ด Mock ๊ฐ์ฒด๋ณด๋ค ์์ ๊ฐ๋
-
๋๋ฏธ๊ฐ์ฒด(Dummy object)
- ๋จ์ํ ์ธ์คํด์คํ ๋ ์ ์๋ ์์ค์ผ๋ก๋ง ๊ฐ์ฒด ๊ตฌํ
- ์ธ์คํด์คํ ๋ ๊ฐ์ฒด ์์ฒด๋ฅผ ํ์๋กํ๊ณ , ํด๋น ๊ฐ์ฒด์ ๊ธฐ๋ฅ๊น์ง๋ ํ์ํ์ง ์์ ๋ ์ฌ์ฉ
-
ํ ์คํธ ์คํ (Test stub)
- ๋๋ฏธ ๊ฐ์ฒด๊ฐ ์ค์ ๋ก ๋์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ค์ด๋์ ๊ฐ์ฒด
- ๊ฐ์ฒด์ ํน์ ์ํ๋ฅผ ๊ฐ์ ํด์ ์์ฑํ๊ณ ํน์ ๊ฐ์ ๋ฐํํ๊ฑฐ๋ ๋ฉ์์ง ์ถ๋ ฅ
- ๊ฐ์ ํ ๊ฐ์ ํ๋์ฝ๋ฉ์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ณ๊ฒฝ์ ํ ์คํธ ๋ถ๊ฐ๋ฅ
- ์ด๋ค ํ์๊ฐ ํธ์ถ๋์ ๋ ํน์ ๊ฐ์ผ๋ก ๋ฐํํด์ฃผ๋ ํํ
- ๊ฐ์ฒด์ ์ํ๋ฅผ ๊ฒ์ฆ
-
ํ์ดํฌ ๊ฐ์ฒด(Fake object)
- ์ค์ ๋ก์ง์ด ๊ตฌํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฐ์ฒด
- ์ค์ ๋ก DB์ ์ ์ํด์ ๋น๊ตํ ๋์ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋ณด์ด๋๋ก ๊ฐ์ฒด ๋ด๋ถ์ ๊ตฌํ ๊ฐ๋ฅ
- ๋ณดํต List๋ Map์ ์ด์ฉ
- ํ ์คํธ์ผ์ด์ค ์์ฑ ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ์์กด์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฌ์ฉ
- ํ์ดํฌ ๊ฐ์ฒด ๋ง๋ค ๋ ๋น์ฉ์ด ๋ง์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ ์ ํ ์์ค์ผ๋ก๋ง ๊ตฌํํ๊ฑฐ๋ Mock ํ๋ ์์ํฌ ์ฌ์ฉ ๋๋ ์ค์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ํ ์คํธ
-
ํ ์คํธ ์คํ์ด(Test spy)
- ํ ์คํธ์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ๋ฉ์๋์ ์ฌ์ฉ ์ฌ๋ถ ๋ฐ ์ ์ ํธ์ถ ์ฌ๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ์์ฒญ ์ ์๋ฆผ
- ํ์ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ(ํน์ ๋ฉ์๋ ํธ์ถ ์ ๋๋ค๋ฅธ ๋ฉ์๋ ์คํํ๋ ๋ฑ)
-
Mock ๊ฐ์ฒด
- ํ์๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด
public class MessageSender { private CellphoneService service; public MessageSender(CellphoneService service) { this.service = service; } public void send(String msg) { service.sendMMS(msg); } }
CellphoneService
์MessageSender
๊ฐ์ฒด๊ฐ ์์ ๋, ์ค์ ๋ก ๋ฌธ์๋ฅผ ๋ณด๋ด๋ ๊ฒ์CellphoneService
์ ์ฑ ์์ด๋ฉฐ,MessageSender
๋CellphoneService
์sendMMS()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ญํ- ํธ์ถ ์ฌ๋ถ๋ฅผ ํ
์คํธํ๋ ๊ฒ์ด ํ์๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ
- stub๊ณผ์ ์ฐจ์ด
- stub์ ๊ฐ์ฒด์ ๋ฐํ๊ฐ์ด๋ ์ํ๊ฐ์ ๊ฒ์ฆํ๋ ๊ฒ
- mock์ ๋ฉ์๋ ํธ์ถ ์ฌ๋ถ, ๋ฉ์๋์ ๋์ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆ
- stub๊ณผ์ ์ฐจ์ด
MessageSender
ํ ์คํธ ์,CellphoneService
์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๊ฒ์ฆํ ์ ์์ผ๋ฉฐ ์ด ๊ฐ์ง ๊ฐ์ฒด๊ฐ Mock ๊ฐ์ฒด- Mock ๊ฐ์ฒด ์๋ ์์ฑ
public class CellphoneServiceMock extends CellphoneService { private boolean isSendMMSCalled = false; private String sendMsg = ""; @Override public void sendMMS(String msg) { // ์ค์ ๋์ํ๋ ๋ถ๋ชจ ๊ฐ์ฒด ํธ์ถ ๋์ ํ ์คํธ ๋์ ์ฒ๋ฆฌ ํธ์ถ ์ฌ๋ถ๋ง ํ์ธํ๋๋ก ๊ตฌํ // super.sendMMS(msg); isSendMMSCalled = true; sendMsg = msg; } public boolean isSendMMSCalled() { return isSendMMSCalled; } public Stirng getSendMsg() { return sendMsg; } }
// Mock ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ํ ์คํธ ์ฝ๋ public class MessageSenderTest { @Test public void testSend() throws Exception { // Given final String message = "ํ ์คํธ ๋ฌธ์ ๋ฉ์์ง์ ๋๋ค."; CellphoneServiceMock mock = new CellphoneServiceMock(); MessageSender sender = new MessageSender(mock); // When sender.send(message); // Then assertTrue(mock.isSendMMSCalled()); assertEqual(message, mock.getSendMsg()); } }
- ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ Mock ๊ฐ์ฒด ์์ฑ
- ๋ํ์ ์ผ๋ก Mockito๊ฐ ์ง์ํ๋ mock์ ์ฌ์ฉํด ๋ณ๋์ Mock ๊ฐ์ฒด(CellphoneServiceMock)๋ฅผ ๋ง๋ค์ง ์๊ณ Mock ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
public class MessageSenderTest { @Test public void testSend() throws Exception { // Given final String message = "ํ ์คํธ ๋ฌธ์ ๋ฉ์์ง"; CellphoneService mock = mock(CellphoneService.class); MessageSender sender = new MessageSender(mock); // When sender.send(message); // Then - CellphoneService์ sendMMS() ํธ์ถ ์ฌ๋ถ ๊ฒ์ฆ verify(mock).sendMMS(message); } }
- Mock ๊ฐ์ฒด ์๋ ์์ฑ
- ํ์ ๊ธฐ๋ฐ ํ ์คํธ๋ ์์ฑํ๊ธฐ ์ด๋ ค์ด ๋ถ๋ถ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ํ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค๋ฉด ์๋ต ๊ฐ๋ฅ
- ํ์๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด