์ฐ๋ฆฌ fisa 2๊ธฐ 'ํด๋ผ์ฐ๋ ์๋น์ค ๊ฐ๋ฐ' 12์ฃผ์ฐจ
ํ์ฌ ์์ 2/11 ํ์ฐฝ ์ค๋ ์ด๋ค. ใ
ใ
๋ค๋ค ์ ์ง๋ด๊ณ ์๊ฒ ์ง ~~
์ค๋๋ง์ ์น์ฒ๋ค ๋ค ๋ง๋๊ณ ์ข์ ์์๋ ๋ค๋ฆฌ๊ณ ~~
๋๋ ์ด์ฌํ ํด์ ์ข์ ์์์ ๋ณดํ๊ณ ์ถ์ ๋ง์ ํ ๊ฐ๋์ด๋ค!!
์ด ๋ฒ ์ฃผ๋ ์ฌ๋ฌ ์ผ๋ ์์์ง๋ง, ์ค๋ ์ด ์์ด์ ๊ทธ๋ฐ์ง ์ด์ํ๊ฒ ๋ถ์ฃผํ๋คใ
ใ
ใ
์ผ์ ์๊ธฐ

์ด ๋ฒ์ฃผ ์ฒซ ์ฃผ๋ถํฐ ๊ธฐ๋ถ์ด ์กฐํ ~~ ๋ฐ๋ก ๋ธ๋ก๊ทธ ์์ ๋ฐ์๊ธฐ ๋๋ฌธ์ด๋ค!!
์์ธ ์คํ๋ฒ
์ค ๊ฐ์ ์๋ฉ๋ฆฌ์นด๋
ธ ๊ทธ๋๋ฐ ์์ผ์ ๊ณต๋ถํด์ผ์ฅ ~~ ใ
ใ
ใ
ใ
๊ฐ๋ ๋ฐ๋ ๋ธ๋ก๊ทธ ์์ผ๋ก ๊ธฐ๋ถ์ข๊ฒ ๊ณต๋ถ๋ฅผ ํ๋ค ํธํธ

์ค๋ ์ ๋ leebrain์ด๋ผ๋ ์ฌ๋์ด ๋ฐฉ์ด๊ฐ ๋๋ฌด ๋ก๊ธด๋ค๊ณ ํด์ ์์
์ ๋ง์น๊ณ ๋จ์ฒด๋ก ๋ฐฉ์ด๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค ใ
ใ
์ ๋ฒ์๋ ์กฐํผ ๋จผ ๊ณณ์์ ํ์์ ํ๋๋ฐ ์ด๋ฒ์๋ ์ฐ๋ฆฌfisa ๊ทผ์ฒ์ธ ์์๋์์ ํ์ํ๋ค ใ
ใ
ใ
๊ทผ๋ฐ, ์ฐ๋ฆฌ๋ ๊ณต๋ถ๋ฅผ ํ๊ณ ๊ฐ์ ์ข ๋ฆ๊ฒ ๊ฐ๋๋ฐ ์ฒ์์ ๊ฐ๊ณ ์ํ ๊ณณ์ ์ด๋ฏธ ... ๋ฐฉ์ด๊ฐ ๋ค ํ๋ ธ๋ค๊ณ ํด์ ์์ฌ์ ๋ค..
ํ์ง๋ง ํฌ๊ธฐํ ์ ์์ด์ ์ด๋์ ๋ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ ๋ฐ๋ก ์์ง์ ๊ฐ์ ๋ง์ง๋ง ๋ฐฉ์ด ํ ๋ง๋ฆฌ๋ฅผ ์ฐพ์ ์ ์์๊ณ ์ฐ๋ฆฌ๋ ์ฌ์ํ๋คใ
ใ
์กด๋ง ํฑ ~!

๋ค๋ค ์๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ ๋จน๊ณ ๋ค์๋ ๋นํ๋ฏผ์ด ๋ง์ด ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋นํ๋ฏผ ์ถฉ์ ์ด ๋ง์ด ํ์ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋๋ ํด์ฅ์ผ๋ก ํ์ฑ๋ฅผ ์์ผ๋จน์๋น ใ
ใ
์ด ํ์ฑ์ง์ ์์์ ์๋ ๊ณณ์ธ๋ฐ, ์๋ ํธ์งํ๊ณ ๊ณผ์ผ๋ ์ฑ์ฑํ๊ณ ๋ค์ํด์ ์์ฃผ ์์ผ๋จน๋๋ค !!๊ทผ๋ฐ ๊ฐ๊ฒฉ์ด ๋ ๋น์ ๊ทธ๋ ๊ฒ ์์ํ๊ฒ ๋จน๊ณ ํด์ฅ์ ์๋ฃํ์๋ค !!
์์ทจ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๊ณผ์ผ์ ์์ฃผ ๋จน์ ์ ์๋๋ฐ ์ด ๊ธฐํ์ ์ผ๋ฌด์ง๊ฒ ๋ฌต์๋น

๋ค๋ค ๋์ ๊ตญ๊ฐ์ ์ํด๋ฅผ ์ ์ง๋ด๊ณ ์๋๊ฐ ? ๋๋ ๋ฐ์ ํ๋ฃจ์ด์ง๋ง .. ์ ์ฒ๊ธฐ๋ ์๊ณ sqld ์ํ๋ ์๊ณ ใ
ใ
๋ฒ ์์
๋ ํ ๋ฐฑ์ค๋๋ ๋ณต์ต์ ํด์ผํ๋๋ฐ ๋ด๋ ค์๋ค !!!
๋ถ์ฐ์ ์ฐธ ์ด๋ป๊ฒ ๋ณด๋ฉด ๋ด ๊ณ ํฅ์ด์ง๋ง, ์์ ์์ธ์์ ์ง๋ด๊ฐ๋ค ๊ฐ๋ ๋ด๋ ค์์ ๊ทธ๋ฐ์ง ํด์์ฒ์ ์จ ๊ฒ ๋ง๋ฅ
๊ธฐ๋ถ์ด ํธ์ํ๋ค ~~ ๋ด ๊ณ ํฅ์ด๋ผ์ ๊ทธ๋ฐ๊ฐ ?

๋ถ์ฐ์์๋ ํด์ผ ํ ๊ฒ๋ค์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ์ด๋๋ง ๊ณต๋ถ๋ฅผ ํ๋ค. ์ฌ๊ธฐ๋ ๋ถ์ฐ์ ํซ ํ๋ ์ด์ค ์๋ฉด์ ์คํ๋ฒ
์ค์ด๋ค.
์ฌ๊ธฐ์๋ ์ ์ ์ฌ๋๋ค์ด ์ ๋ง ๋ง์๋ฐ ์ฌ์ ํ ๋ง๋๋ผ ~ ใ
ใ
ใ
ใ
์๋ฆฌ๋ ๊ฒจ์ฐ ์ฐพ์์ ๊ณต๋ถ๋ฅผ ํ๋ค ใ
ใ
ใ
์ค๋ ๋์๋ ๋ฐ์ ์ฐ๋ฆฌ๋๋ผ ์ ์ ์ฌ๋๋ค ์ฐธ ๋๋จํ๋ค ใ
ใ
๊ณต๋ถ ์๊ธฐ
1. ์ด๋ฒ ์ฃผ ๋ฐฐ์ด ๊ฒ
์ด ๋ฒ ์ฃผ๋ ์ฐํด๊ฐ ๋ผ์ด ์์ด์ ๋ง์ ๊ฒ์ ์ ํ๋ค๊ธฐ ๋ณด๋ค๋ ํต์ฌ ๋ด์ฉ ๋ ๊ฐ๋ฅผ ๊ณต๋ถํ๋ฐ.
๋ฐ๋ก TEST์ AOP์ด ์ด๋ค.
<<TEST>>
test์์ ๋จ์ ํ
์คํธ๋ฅผ ์งํํ๋ ๊ฒ์ ๋ฐฐ์ ๋๋ฐ ! ๋จ์ ํ
์คํธ๋ฅผ ํ๊ธฐ ์ํ ๊ตฌ์กฐ๊ฐ ์๋ค.
given, when, then
์ด๋ ๊ฒ ์ธ๊ฐ๋ก ๊ตฌ์ฑํด์ test๋ฅผ ์งํํ๋ค.
given
: ํ
์คํธ๋ฅผ ์ค๋นํ๋ ๋จ๊ณ
when
: ํ
์คํธ๋ฅผ ์ค์ ๋ก ์งํ ํ๋ ๋จ๊ณ
then
: ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ ๋จ๊ณ
์ด๋ ๊ฒ ์ธ ๋จ ๊ณ๋ก ๊ตฌ์ฑ์ด ๋์ด ์งํํ๋ค.
public void addArticle() throws Exception {
// given
final String url = "/api/articles";
final String title = "title";
final String content = "content";
final AddArticleRequest userRequest = new AddArticleRequest(title, content);
// ๊ฐ์ฒด JSON์ผ๋ก ์ง๋ ฌํ
final String requestBody = objectMapper.writeValueAsString(userRequest);
//when
// ์ค์ ํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฒญ ์ ์ก
ResultActions result = mockMvc.perform(post(url)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(requestBody));
// then
result.andExpect(status().isCreated());
List<Article> articles = blogRepository.findAll();
assertThat(articles.size()).isEqualTo(1); // ํฌ๊ธฐ๊ฐ 1์ธ์ง ๊ฒ์ฆ
assertThat(articles.get(0).getTitle()).isEqualTo(title);
assertThat(articles.get(0).getContent()).isEqualTo(content);
}
์์ ํ
์คํธ๋ฅผ ๋ณด๋ฉด CRUD ์ค Create๋ฅผ ํ๋ ์ฝ๋์ด๋ค. ์ด๋ฅผ ํ
์คํธ ํ๊ธฐ ์ํด ๋ง๋ ์ฝ๋์ด๋ค.
์ฐ์ , given์์ createํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๊ทธ ๋ค์ JSON ํํ๋ก ๋ณํ์ ์ํจ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ด๋์ํฌ ๋์๋ JSON ํํ๋ก ๋ณํ์ํค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
์ค๋น๊ฐ ๋์๋ค๋ฉด
when ์์ test๋ฅผ ์งํํ๋ค. ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ ํ๋ create๋ฅผ ์คํํ๊ธฐ ์ํด์ mocMvc๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ perform ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ๊ฐ์์ post๋ฅผ ์งํํ๋ค.
๋ง์ง๋ง์ผ๋ก then ์ ํตํด postํด์ create ๋ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก create๊ฐ ๋์๋์ง ์ ๋ฒ์ ๋ฐฐ์ด AssertJ ๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก Test๋ฅผ ์งํํ๋ค. ํ์ฌ ๋ง์ด ์ด์ฉํ๊ณ ์๊ณ ์ด๋ ์ฌ์ ์ ๊ฒ์ฌ๋ฅผ ํจ์ผ๋ก์จ ์ข ๋ ์๋ฒฝํ๊ฒ ์ฝ๋๋ฅผ ์งค ์ ์์ด ํจ์จ์ฑ์ ์ฌ๋ ค์ค๋ค.
AOP
AOP๋ Aspect Oriented Programming์ ์ค์ ํํ์ผ๋ก ์ฌ์ ์ ์๋ฏธ ๊ทธ๋๋ก ๋ฒ์ญํ๋ฉด ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ค์ ๋งํ์๋ฉด
์ด๋ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ์ ์ธ ๊ด์ , ๋ถ๊ฐ์ ์ธ ๊ด์ ์ผ๋ก ๋๋์ด์ ๋ณด๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ ๋ชจ๋ํํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
์ด๋ ํ๋ก์ค ํจํด ๊ธฐ๋ฐ์ AOP ๊ตฌํ์ฒด๊ฐ ๋ํ์ ์ด๋ฉฐ ์ด๋ ์ ๊ทผ ์ ์ด ๋ฐ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด์์ด๋ค.

์ด๋ ๊ฒ ์ด๋ค ์ฐ๋ฆฌ๊ฐ ์ป๊ณ ์ ํ๋ ๊ฐ์ด AOP๋ฅผ ๊ฑฐ์ณ์ ๊ตฌํด์ง๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ง๊ธ ๋ณด๋ฉด ๋ด๊ฐ ์ด๋ฅผ ์๋ฒฝํ๊ฒ ์ค๋ช
์ ๋ชปํ๊ณ ์๊ณ ์ด๋ป๊ฒ ์ค๋ช
์ ํด์ผํ ์ง ์ ๋ชจ๋ฅด๊ณ ์๋ ์ํฉ์ด๋ค ใ
์ด์ ๋ํด ๊ณต๋ถํด์ ์ข ๋ ๋ช
ํํ ๋ด์ฉ์ ๋ฐ๋ก ์ ๋ฆฌํด์ ๋ธ๋ก๊ทธ์ ์์ฑํ๋๋ก ํ๊ฒ ๋ค !!
2. ์ด ๋ฒ ์ฃผ ์ํ ์ฐฉ์ค
์ด ๋ฒ ์ฃผ์ ์ํ์ฐฉ์ค๋ผ ํ๋ฉด ํฌ๊ฒ ์๋ค !! ๋ค๋ง ์ฐํด์ ์์ธ ๊ด๊ณ๋ก ๋์ ์์ง์ ๋ฌธ์ ๊ฐ ์๋๊น ์ถ๋ค. ์๋ฌด๋ฆฌ ์ฐํด๋ผ๊ณ ํ ๋ค ๋๋ ํ ์ผ์ด ๋์น๊ธฐ ๋๋ฌธ์ด๋ค ใ
ใ
ใ
์ต๋ํ ์ด์ฌํ ํ๊ณ ์ฐํด๋ฅผ ์์ฐจ๊ฒ ๋ณด๋ด๋ ค๊ณ ํ์ง๋ง ์ฐํด๋ ์ฐํด์ด๋ค. ์์ฒญ ํ์ด์ก๋ค ใ
ใ
ใ
๊ทธ๋๋ ์ต์ํ์ ๋์ ํ ์ผ์ ์งํํ๋ค. ๋ค์ ์ฃผ ๋ค์ ๋ณธ์
์ผ๋ก ๋์ ๊ฐ ๋ ๋ค์ ๋นจ๋ฆฌ ๋ณต๊ตฌํ ์ ์๊ฒ๋ ๋๋ฅผ ๋๋ฌด ํ์ง๋ง์ ใ
ใ
3. ์์ผ๋ก ์ด๋์ ์ ์ฉ
test ๊ฐ์ ๊ฒฝ์ฐ๋ ์ข ๋ ์๋ฒฝํ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด์ ํ์ํ ๊ณต๋ถ์ด๋ค. ์ด๋ฅผ ์ ์ฌ์ฉํด์ผ ๋ด๊ฐ ๋ง๋๋ ์ฝ๋๊ฐ ์ ํํ๊ฒ ์ ๋์๊ฐ๋ ๊ฒ์ ์ ๋ฟ ๋๋ฌ ํฅํ ํฐ ํ๋ก์ ํธ๊ฐ ์์ ๋์๋ ์ฌ์ํ ํ๋ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ๋ฅผ ์ต์ํ ์์ผ ์๊ฐ์ ์ผ๋ก๋ ๊ธฐ์ ์ ์ผ๋ก ํจ์จ์ฑ์ด ๊ทน๋ํ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ TEST ์ญ์ ์ ๊ฒฝ์ ์จ๊ฐ๋ฉฐ ์๋ฒฝํ ๋์ ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ด๋ ๋ฅ๋ ฅ์ ํค์ธ ์ ์๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค๊ณ ๋ณธ๋ค!!
AOP ๊ฐ์ ๊ฒฝ์ฐ๋ Spring์ ํ ๋ถ๋ถ์ด๋ค. ์์ง๊น์ง๋ ์๋ฒฝํ๊ฒ ์ดํด๋ ๋ชปํ์ง๋ง ํ์ฌ ์๋ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ก์ AOP์ ๊ณต๋ถ๋ ํ์์ ์ด๋ค. ์ข ๋ ์ด์ฌํ ํด์ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค๋๋ก ํ์ !
4. ํ์ฌ๊น์ง์ ํ์ต ํ๊ฐ ๋ฐ ๋ค์ ํ์ต์ ์ํ ๋ค์ง/๋ชฉํ
- ์์
-
์ด์ ๊ฑฐ์ง ๋์ด ๋ณด์ด๋๋ฐ ์กฐ๊ธ ๋ ์ง์คํ๊ณ ์ต๋ํ ๋ง์ ์ ๋ณด๋ฅผ ๋ฐ์๋๋ฆฌ๊ณ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค๋๋ก ๋
ธ๋ ฅํ์ !!
- ํ๋ก ํธ ์ค๋ -
๋ค์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ณต๋ถ๋ฅผ ํด์ ๋ณต์ต์ ์์ ํ์ !!
- ์ฝ๋ฉ ํ
์คํธ -
DFS BFS์ ๋ํ ๊ธฐ์ด์ง์ ๊ณต๋ถ๋ ๋์ด ๋ฌ๋ค. ์ด์ ๊ธฐ์ถ ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ์ข ๋ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค๋๋ก ๋
ธ๋ ฅํ๊ณ , ์ด ์ธ์๋ ๋ฐฑ์ค ํ๋ก๊ทธ๋๋จธ์ค๋ฅผ ๋ค๋ฃจ๋ฉฐ ๊ฐ๊ด์ ์ธ ์ฝ๋ฉํ
์คํธ ๋ ๋ฒจ์ ์ฐพ์ ๋๊ฐ๊ฒ ๋ค !!
- ๋ฐฑ์๋ -
์ ์ฒด์ ์ธ ํ๋ฆ์ ๊นจ์ฐ์น๊ณ ์๋ ์์ ์ ๋ฐฑ์ค๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๊ธฐ๋ก ํ ๋์ ๊ณํ์ ๋ง๊ฒ ๋ ๊น๊ฒ ์ด์ฌํ ๊ณต๋ถํด์ผ ๊ฒ ๋ค.
- ์ ์ฒ๊ธฐ -
๋ค์ ์ฃผ ํ ์์ผ์ด๋ฉด ์ ์ฒ๊ธฐ ์ํ์ด๋ค. ํ์ฌ ๊ธฐ์ถ์ ๋๋ฆฌ๊ณ ์๋๋ฐ, ๋ฌธ์ ๋ง ํธ๋๋ฐ ๋ชฐ๋ํ์ง ๋ง๊ณ ํ ๋ฌธ์ ๋ฌธ์ ๋ด ๊ฒ์ด ๋๊ณ ๋ค์ ๋์๋ ํ๋ฆฌ์ง ์๊ฒ๋ ๋๋ํ๊ฒ ๊ณต๋ถํด์ผํ ์์ ์ด๋ค.
- ๊ธฐ์ ์ธ๋ฏธ๋ -
์ฌ๋ฌ ์๊ฐ ๋์ REST API๋ฅผ ํ ์์ ์ธ๋ฐ ์ ๊ณต๋ถํด์ ์๋ฒฝํ ๋ฐขํ๋ฅผ ์ํด ์ฒ ์ ํ๊ฒ ์ค๋นํ๊ฒ ๋ค !!
์ด๋ฒ ํ ์ฃผ๋ ์ฐํด๋ ๋ผ์ด ์๋ค๋ณด๋, ์ด๋์ ๋ ๊ณต๋ถ์ ํจ์จ์ ์ ์ข์ง๋ง ์ถฉ๋ถํ ์ข์ ํด์ ๊ธฐ๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ค ใ
ใ
๋ค์ ๋ค์ ์ฃผ ๋ถํฐ ๋ณธ์
! ์ ๋๋ก ํด๋ณด์ !!!
๋ค์ ์ฃผ๋ ํ์ดํ
ใ
ใ
์ํด๋ณต ๋ง์ด ๋ฐ์ผ์ธ์ ^^ โ๏ธโ๏ธ