๋‚˜์˜ ๋‹ค์ง,๊ธฐ๋ก,์ผ์ƒ/์šฐ๋ฆฌFISA2๊ธฐ_์„ฑ์žฅ๊ธฐ๋ก

์šฐ๋ฆฌ fisa 2๊ธฐ 'ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ฐœ๋ฐœ' 12์ฃผ์ฐจ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 11. 23:55

ํ˜„์žฌ ์‹œ์  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๋ฅผ ํ•  ์˜ˆ์ •์ธ๋ฐ ์ž˜ ๊ณต๋ถ€ํ•ด์„œ ์™„๋ฒฝํ•œ ๋ฐขํ‘œ๋ฅผ ์œ„ํ•ด ์ฒ ์ €ํ•˜๊ฒŒ ์ค€๋น„ํ•˜๊ฒ ๋‹ค !!
 
์ด๋ฒˆ ํ•œ ์ฃผ๋Š” ์—ฐํœด๋„ ๋ผ์–ด ์žˆ๋‹ค๋ณด๋‹ˆ, ์ด๋ž˜์ €๋ž˜ ๊ณต๋ถ€์˜ ํšจ์œจ์€ ์•ˆ ์ข‹์ง€๋งŒ ์ถฉ๋ถ„ํžˆ ์ข‹์€ ํœด์‹ ๊ธฐ๊ฐ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค ใ…Žใ…Ž 
 
๋‹ค์‹œ ๋‹ค์Œ ์ฃผ ๋ถ€ํ„ฐ ๋ณธ์—… ! ์ œ๋Œ€๋กœ ํ•ด๋ณด์ž !!!
 
๋‹ค์Œ ์ฃผ๋„ ํ™”์ดํŒ… ใ…Žใ…Ž
 
์ƒˆํ•ด๋ณต ๋งŽ์ด ๋ฐ›์œผ์„ธ์š” ^^ โ˜€๏ธโ˜€๏ธ