Skip to content

Latest commit

ย 

History

History
88 lines (83 loc) ยท 4.23 KB

chapter02.md

File metadata and controls

88 lines (83 loc) ยท 4.23 KB

2์žฅ ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ž

  • TDD์™€ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์˜ ์ฐจ์ด

    • TDD: ํ…Œ์ŠคํŠธ๊ฐ€ ์ฃผ๋„ํ•˜๋Š” ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
      • ํ•ญ์ƒ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑ
      • ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ์ž‘์„ฑ
      • ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
    • ๋‹จ์œ„ํ…Œ์ŠคํŠธ(Unit Test): ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
      • ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์˜ ์ด์ 

    • ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ
    • ์ž๋™๊ฒ€์ฆ
    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์ž˜ ์ž‘๋™๋˜๋Š” ๊ฒƒ ๋ณด์žฅ
  • ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

    • src/main/java ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ƒˆ ํŒจํ‚ค์ง€ ์ƒ์„ฑ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํŒจ์ง€ํ‚ค๋ช…์€ ์›น์‚ฌ์ดํŠธ ์ฃผ์†Œ์˜ ์—ญ์ˆœ (com.seohyun.book.springboot)
    • Application ํด๋ž˜์Šค๋Š” ๋ฉ”์ธ ํด๋ž˜์Šค
      • @SpringBootApplication์œผ๋กœ ์Šคํ”„๋ง๋ถ€ํŠธ ์ž๋™ ์„ค์ • ๋ฐ ์Šคํ”„๋ง Bean ์ฝ๊ธฐ ์ƒ์„ฑ ๋ชจ๋‘ ์ž๋™ ์„ค์ •๋จ
      • ํ”„๋กœ์ ํŠธ์˜ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•ด์•ผํ•จ
      • SpringApplication.run์œผ๋กœ ๋‚ด์žฅ WAS ์‹คํ–‰
        • ํ†ฐ์บฃ ์„ค์น˜ํ•  ํ•„์š” ์—†์Œ
        • ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ Jar(Java ํŒจํ‚ค์ง• ํŒŒ์ผ)๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋จ
        • ์–ธ์ œ๋‚˜ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Œ
    • Controller
      • @RestController
        • JSON์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ
      • @GetMapping
        • HTTP Method์ธ Get ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” API ๋งŒ๋“ค์–ด์คŒ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

    • @RunWith(SpringRunner.class)
      • JUnit์— ๋‚ด์žฅ๋œ ์‹คํ–‰์ž ์™ธ์— ๋‹ค๋ฅธ ์‹คํ–‰์ž๋ฅผ ์‹คํ–‰์‹œํ‚ด
      • SpringRunner๋ผ๋Š” ์Šคํ”„๋ง ์‹คํ–‰์ž๋ฅผ ์‚ฌ์šฉํ•จ
      • ์Šคํ”„๋ง ๋ถ€ํŠธ ํ…Œ์ŠคํŠธ์™€ JUnit ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์ž ์—ญํ• 
      • JUnit5์—์„œ๋Š” ExtendWith()์„ ์‚ฌ์šฉํ•จ
    • @WebMvcTest
      • Spring MVC Controllers๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์‚ฌ์šฉ
      • ํŠน์ • ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฐ€์ง„ Beans๋งŒ ์Šค์บ”ํ•จ
        • Web์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜
        • @Controller, @ControllerAdvice, @JsonComponent ๋“ฑ
    • @Autowired
      • ์Šคํ”„๋ง DI์— ์‚ฌ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜
      • ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” Bean์„ ์ฃผ์ž… ๋ฐ›์Œ
    • private MockMvc mvc
      • ์›น API ํ…Œ์ŠคํŠธ ์‹œ์— ์‚ฌ์šฉํ•˜๋ฉฐ GET, POST ๋“ฑ์— ๋Œ€ํ•œ API ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
    • mvc.perform(get("/hello"))
      • /hello ์ฃผ์†Œ๋กœ HTTP GET ์š”์ฒญ์„ ๋ณด๋ƒ„
      • ์ฒด์ด๋‹์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฒ€์ฆ์„ ์ด์–ด์„œ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Œ
    • .andExpect(status().isOk()
      • HTTP Header์˜ Status๋ฅผ ๊ฒ€์ฆํ•จ
    • .andExpect(content().string(hello))
      • response ๋ณธ๋ฌธ์˜ ๋‚ด์šฉ์„ ๊ฒ€์ฆํ•จ
  • ๋กฌ๋ณต (Lombok)์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ „ํ™˜ํ•˜๊ธฐ

    • Getter, Setter, ๊ธฐ๋ณธ์ƒ์„ฑ์ž, toString ๋“ฑ์„ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ž๋™ ์ƒ์„ฑํ•ด์คŒ
    • implementation('org.projectlombok:lombok')
    • @Getter()
      • ์„ ์–ธ๋œ ๋ชจ๋“  ํ•„๋“œ์˜ get ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์คŒ
    • @RequiredArgsConstructor
      • ์„ ์–ธ๋œ ๋ชจ๋“  final ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•ด์คŒ
      • final์ด ์—†๋Š” ํ•„๋“œ๋Š” ์ƒ์„ฑ์ž์— ํฌํ•จ๋˜์ง€ ์•Š์Œ
    • @assertThat()
      • assertj๋ผ๋Š” ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒ€์ฆ ๋ฉ”์†Œ๋“œ
      • ๊ฒ€์ฆํ•˜๊ณ ์‹ถ์€ ๋Œ€์ƒ์„ ๋ฉ”์†Œ๋“œ ์ธ์ž๋กœ ๋ฐ›์Œ
      • ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹ ์ง€์›
    • @isEqualTo()
      • assertj์˜ ๋™๋“ฑ ๋น„๊ต ๋ฉ”์†Œ๋“œ
      • assertThat์— ์žˆ๋Š” ๊ฐ’๊ณผ isEqualTo์˜ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๊ฐ™์„๋•Œ๋งŒ ์„ฑ๊ณต
    • assertj์˜ ์žฅ์ 
      • ์ถ”๊ฐ€์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”์—†์Œ
      • IDE์—์„œ ์ž๋™์™„์„ฑ ์ง€์› ํŽธ์˜์„ฑ
  • ์ถ”๊ฐ€๋กœ ์„ค์ •ํ•œ ๋‚ด์šฉ๋“ค

    • Gradle 7.x ๋ฒ„์ „์—์„œ Lombok ์‚ฌ์šฉํ•˜๊ธฐ
      • ์ฑ…์€ Gradle 4๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ์ฑ…๋Œ€๋กœ ์„ค์ •ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
      • ๋ฒ„์ „์„ ๋‚ฎ์ถ”๊ธด ์‹ซ์œผ๋‹ˆ, 7๋ฒ„์ „๋Œ€์—์„œ Lombok ์‚ฌ์šฉ๋ฒ•์„ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•จ
      • build.gradle์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ
        dependencies {
          compileOnly 'org.projectlombok:lombok'
          annotationProcessor 'org.projectlombok:lombok'
          testCompileOnly 'org.projectlombok:lombok'
          testAnnotationProcessor 'org.projectlombok:lombok'
        }    
        
    • JUnit ํ…Œ์ŠคํŠธ๋ช…์ด ์•ˆ๋‚˜์˜ค๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ
      • Settings - Build, Execution, Deployment - Build tools - Gradle - Run tests using "IntelliJ IDEA"๋กœ ์„ค์ •