๊ฐ์ฒด ์งํฅ ํน์ง ์ถ์ํ ์บก์ํ ์์ ๋คํ์ฑ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช
๋ น์ด ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๋
๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์
ํ๊ณ ์ ํ๋ ๊ฒ. ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ (ํ๋ ฅ) ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋จ. ์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ด ? ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด ํค๋ณด๋, ๋ง์ฐ์ค ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ์ปดํจํฐ ๋ถํ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ ๋คํ์ฑ ๋คํ์ฑ์ ์ค์ธ๊ณ ๋น์ ์ค์ธ๊ณ์ ๊ฐ์ฒด ์งํฅ์ 1:1๋ก ๋งค์นญ X ๊ทธ๋๋ ์ค์ธ๊ณ์ ๋น์ ๋ก ์ดํดํ๊ธฐ์๋ ์ข์ ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ์ธ์์ ๊ตฌ๋ถ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ..
์คํ๋ง
์คํ๋ง ํ๋ ์์ํฌ ํต์ฌ ๊ธฐ์ : ์คํ๋ง DI ์ปจํ
์ด๋, AOP, ์ด๋ฒคํธ, ๊ธฐํ ์น ๊ธฐ์ : ์คํ๋ง MVC, ์คํ๋ง WebFlux ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ : ํธ๋์ญ์
, JDBC, ORM ์ง์, XML ์ง์ ๊ธฐ์ ํตํฉ : ์บ์, ์ด๋ฉ์ผ, ์๊ฒฉ์ ๊ทผ, ์ค์ผ์ค๋ง ํ
์คํธ : ์คํ๋ง ๊ธฐ๋ฐ ํ
์คํธ ์ง์ ์ธ์ด : ์ฝํธ๋ฆฐ, ๊ทธ๋ฃจ๋น ์ต๊ทผ์๋ ์คํ๋ง ๋ถํธ๋ฅผ ํตํด์ ์คํ๋ง ํ๋ ์์ํฌ์ ๊ธฐ์ ๋ค์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ ์คํ๋ง ๋ถํธ ์คํ๋ง์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์, ์ต๊ทผ์๋ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ ๋จ๋
์ผ๋ก ์คํํ ์ ์๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ์์ฑ Tomcat ๊ฐ์ ์น ์๋ฒ๋ฅผ ๋ด์ฅํด์ ๋ณ๋์ ์น ์๋ฒ๋ฅผ ์ค์นํ์ง ์์๋ ๋จ ์์ฌ์ด ๋น๋ ๊ตฌ์ฑ์ ์ํ starter ์ข
์์ฑ ์ ๊ณต ์คํ๋ง๊ณผ 3rd parth(์ธ๋ถ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ๊ตฌ์ฑ ๋ฉํธ๋ฆญ, ์..
API๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ด 3๊ฐ์ ํด๋์ค๊ฐ ํ์ Request ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ DTO API ์์ฒญ์ ๋ฐ์ Controller ํธ๋์ญ์
, ๋๋ฉ์ธ ๊ธฐ๋ฅ ๊ฐ์ ์์๋ฅผ ๋ณด์ฅํ๋ Service โ
์ฌ๊ธฐ์ ๋ง์ ์คํด → Service์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ๊ฒ But, ์ ํ ๊ทธ๋ ์ง ์์ โ
Service๋ ํธ๋์ญ์
, ๋๋ฉ์ธ ๊ฐ ์์ ๋ณด์ฅ์ ์ญํ ๋ง ํจ Web Layer ํํ ์ฌ์ฉํ๋ ์ปจํธ๋กค๋ฌ(@Controller)์ JSP/Freemarker ๋ฑ์ ๋ทฐ ํ
ํ๋ฆฟ ์์ญ ์ด์ธ์๋ ํํฐ(@Filter), ์ธํฐ์
ํฐ, ์ปจํธ๋กค๋ฌ ์ด๋๋ฐ์ด์ค(@ControllerAdvice)๋ฑ ์ธ๋ถ ์์ฒญ๊ณผ ์๋ต์ ๋ํ ์ ๋ฐ์ ์ธ ์์ญ Service Layer @Service์ ์ฌ์ฉ๋๋ ์๋น์ค ์์ญ ์ผ๋ฐ์ ์ผ๋ก Controller์ Dao ์ค๊ฐ ..
MyBatis ์ค์ ๋ก ๊ฐ๋ฐํ๋ ์๊ฐ ๋ณด๋ค SQL ์ ๋ค๋ฃจ๋ ์๊ฐ์ด ๋ ๋ง์์ ๊ฐ์ฒด ๋ชจ๋ธ๋ง๋ณด๋ค๋ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์๋ง ์ง์คํ๊ณ , ๊ฐ์ฒด๋ฅผ ๋จ์ํ ํ
์ด๋ธ์ ๋ง์ถ์ด ๋ฐ์ดํฐ ์ ๋ฌ ์ญํ ๋ง ํ๋ ๊ฐ๋ฐ์ ํ๊ฒ ๋จ MyBatis๋ ORM์ด ์๋. SQL Mapper์ด๋ค. ORM์ ๊ฐ์ฒด๋ฅผ ๋งคํํ๋ ๊ฒ์ด๊ณ , SQL Mapper๋ ์ฟผ๋ฆฌ๋ฅผ ๋งคํ JPA ํ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDB, Relational Database)๋ ๋น ์ง ์ ์๋ ์์ ๊ทธ๋ฌ๋ค ๋ณด๋ ๊ฐ์ฒด๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ฌด์๋ณด๋ค ์ค์ ํ์
ํ๋ก์ ํธ ๋๋ถ๋ถ์ด ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ณด๋ค SQL๋ก ๊ฐ๋ํ๊ฒ ๋ ๊ฒ ์ด๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ SQL๋ง ์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ, SQL๋ก๋ง ๊ฐ๋ฅํ๋ ๊ฐ ํ
์ด๋ธ๋ง๋ค ๊ธฐ๋ณธ์์ธ CRUD(Create, ..
ํ
์คํธ ์ฝ๋ ์๊ฐ TDD์ Unit Test(๋จ์ ํ
์คํธ)๋ ๋ค๋ฆ TDD : ํ
์คํธ๊ฐ ์ฃผ๋ํ๋ ๊ฐ๋ฐ → ํ
์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋ ๊ฒ ํญ์ ์คํจํ๋ ํ
์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ (Red) ํ
์คํธ๊ฐ ํต๊ณผํ๋ ํ๋ก๋์
์ฝ๋๋ฅผ ์์ฑํ๊ณ (Green) ํ
์คํธ๊ฐ ํต๊ณผํ๋ฉด ํ๋ก๋์
์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง (Refactoring) ๋ฐ๋ฉด ๋จ์ ํ
์คํธ๋ TDD์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ธ ๊ธฐ๋ฅ ๋จ์์ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ ๐ ์์ํ๊ฒ ํ
์คํธ๋ง ์์ฑํ๋ ๊ฒ
Junit 5 Annotation Junit5์์ ์ ๊ณตํ๋ org.junit.jupiter.api ํจํค์ง ๋ด์ ์ด๋
ธํ
์ด์
@Test ํด๋น ์ด๋
ธํ
์ด์
์ ๋ฌ์๋ ๋ฉ์๋๊ฐ ํ
์คํธ ๋ฉ์๋์์ ๋ํ๋ธ๋ค. @BeforeEach ๊ฐ๊ฐ์ @Test, @RepeatedTest, @ParameterizedTest, @TestFactory ์ ์ ์คํ๋จ @AfterEach ๊ฐ๊ฐ์ @Test, @RepeatedTest, @ParameterizedTest, @TestFactory ํ์ ์คํ๋จ @BeforeAll ๋ชจ๋ @Test, @RepeatedTest, @ParameterizedTest, @TestFactory ์ ์ ์คํ๋จ @AfterAll ๋ชจ๋ @Test, @RepeatedTest, @ParameterizedTest, @Te..
โผ๏ธ 1.4์ผ ์์ โผ๏ธ View ํ๊ฒฝ ์ค์ static/index.html ์ ๋จผ์ ์ฐพ์ Welcome Page ๊ธฐ๋ฅ์ ์ ๊ณต ์ปจํธ๋กค๋ฌ์์ ๋ฆฌํด ๊ฐ์ผ๋ก ๋ฌธ์๋ฅผ ๋ฐํํ๋ฉด ๋ทฐ ๋ฆฌ์กธ๋ฒ (viewResolver) ๊ฐ ํ๋ฉด์ ์ฐพ์์ ์ฒ๋ฆฌ ์คํ๋ง ๋ถํธ ํ
ํ๋ฆฟ์์ง ๊ธฐ๋ณธ viewName ๋งคํ resources:templates/ + {viewName} + .html ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด 1. ์ ์ ์ปจํ
์ธ 2. MVC์ ํ
ํ๋ฆฟ ์์ง MVC : Model, View, Controller Spring MVC ์ฌ์ฉ์ ์ธํฐํ์ด์ค, ๋ฐ์ดํฐ ๋ฐ ๋
ผ๋ฆฌ ์ ์ด๋ฅผ ๊ตฌํํ๋๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋์์ธ ํจํด ์ํํธ์จ์ด์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ๋ฉด์ ๊ตฌ๋ถํ๋๋ฐ ์ค์ ์ ๋ ๊ฐ๋จํ๊ฒ Model, VIew, Controller๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐํ๋..