๋๋์ด ์คํ๋ง ์
๋ฌธ ๊ฐ์๋ฅผ ๋ง์ณค๋ค !
.
.
.
.
.
.
..ใฑ..๊ทธ์น๋ง.. ์ด๋๋ก ๋ค์ ๋ก๋๋งต์ผ๋ก ๋์ด๊ฐ๋ค๋ฉด....ํฐ ์ผ์ด ๋๊ฒ ์ง์...?
๋จธ๋ฆฌ์์์ ์์ฃผ ๋๋ฆฌ๋๋ฆฌ๊ฐ ๋ ๊ฒ์ด ์์๋๊ธฐ ๋๋ฌธ์๐
๋ก๋๋งต1๋ก ๋์ด๊ฐ๊ธฐ ์ ์, ์ค์ํ ๊ฐ๋ ๊ณผ ์ดํด๊ฐ ์ ๋์ง ์์๋ ๋ถ๋ถ๋ค์ ๋ค์ ํ ๋ฒ ์ง๊ณ ๊ฐ๋ ค๊ณ ํ๋ค! ๋น ์ดํ !!!!!!!!! ์์!!!!!!!!!!!!!!!!!!!!!
์คํ๋ง๋ถํธ ๋โ
์คํ๋ง ํ๋ ์์ํฌ ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ๋ณต์กํ๊ฒ ์ค์ ํ์ง ์๊ณ ๋ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค!
ํ๋ํ๋ ๋ชจ๋ ์ค์ ์ ํด์ฃผ์ง ์์๋ ๊ธฐ๋ณธ ์ค์ ์ ์์์ ํด์ฃผ๋ ํธ๋ฆฌํจ!์ด ํน์ง์ด๋ค.
์คํ๋ง ๊ด๋ จ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ์ฌ์ดํธ๋ก๋ ์คํ๋ง ๋ถํธ ์คํํฐ ์ฌ์ดํธ๊ฐ ์๋ค!
์ฌ๊ธฐ์ Dependencies๋ผ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ํด ์ฃผ๋ ๋ถ๋ถ์ด ์๋๋ฐ, ์ค์ ๋ก ํ๋ก์ ํธ๋ฅผ ์ด์ด ํ์ธํด๋ณด๋ฉด ์ค์ ์ง์ ํด์คฌ๋ ๊ฐ์๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ค์น๋ผ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค ๐คญ
์ฌ๊ธฐ์ ์์๋ณด๋ Gradle์ ์ผ์ ๋์ ์ฅ์ ๐!
"Gradle์ ์์กด๊ด๊ณ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํจ๊ป ๋ค ๋ค์ด๋ก๋ ํ๋ค"
์ฒ์ ์ฐ์ปด ํ์ด์ง๋ฅผ ๋ง๋ค ๋ ์ ์ ํ์ด์ง๋ก ๋ง๋ค์๋๋ฐ, ํ
ํ๋ฆฟ ์์ง์ ์ฌ์ฉ ํ๋ฉด ๋ชจ์๊ณผ ํ์์ ์์ ์์ฌ๋ก ๋ฐ๊ฟ ์ ์๋ค !! -> thymeleaf ํ
ํ๋ฆฟ ์์ง
html ํ์ผ์ <html xmlns:th="http://www.thymeleaf.org">
์ด ๋ฌธ์ฅ์ ์ฐ๋ฉด,
thymeleaf ๋ฌธ๋ฒ์ ํ
ํ๋ฆฟ ์์ง์ผ๋ก์จ ์ธ ์ ์๋ค! (th ํ๊ทธ๋ฅผ ์ฌ์ฉํด ์์ ๋กญ๊ฒ ์ฌ์ฉ)
@Controller
: ์ฌ์ฉ์์ ์์ฒญ์ด ์ง์
ํ๋ ์ง์ (entry point)์ผ๋ก ์์ฒญ์ ๋ฐ๋ผ ์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ ์ง ๊ฒฐ์ ๋ง ํด์ค๋ค.(์ฒ๋ฆฌ๋ ๋ค๋ฅธ ๊ณณ์์ ํจ) ์ฌ์ฉ์์๊ฒ View๋ฅผ ์๋ต์ผ๋ก ๋ณด๋ด์ฃผ๋ ์ญํ ์ ํจ
-> ์ปจํธ๋กค๋ฌ ์์ฑ ์ ๊ผญ ์ฌ์ฉํด์ผ ํ๋ ์ด๋
ธํ
์ด์
MVC์ ํ
ํ๋ฆฟ ์์ง
: ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก, HTML์ ๊ทธ๋ฅ ์ฃผ๋ ๊ฒ์ด ์๋๋ผ ์๋ฒ์์ ํ๋ก๊ทธ๋๋ฐ์ ํด์ ๋์ ์ผ๋ก ๋ฐ๊ฟ์ ๋ด๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค(Model View Controller).
: ์ ์ ์ปจํ
์ธ ์๋ ๋ฌ๋ฆฌ, MVC๋ ๋ง์ง๋ง์ HTML ๋ณํ ๊ณผ์ ์ด ์ถ๊ฐ๋๋ค.
API
: ์๋ฒ๋ผ๋ฆฌ ํต์ ํ ๋ ์ฌ์ฉ
: @ResponseBody
html์์์ body๊ฐ ์๋ http์ ์๋ต body๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฃ์ด์ค ๋ ์ฌ์ฉํ๋ ๊ฒ. ํ
ํ๋ฆฟ ์์ง๊ณผ์ ์ฐจ์ด๋, view ์์ด ์
๋ ฅํ ๋ฌธ์๊ฐ ๊ทธ๋๋ก ๋ค์ด๊ฐ!
-
@ResponseBody
๋ผ๋ annotation์ด ๋ถ์ด์๊ธฐ ๋๋ฌธ์ http ์๋ต์ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋๊ธด๋ค.
(๋ง์ฝ ์ ๋ถ์ด์๋ค๋ฉด, ์ด์ ์ template์์์ ๊ฐ์ดviewResolver
์๊ฒ ๋์ง)
์ด ํ๋ก์ ํธ์์์ ๋ฐ์ดํฐ๋ ํ์ID์ ์ด๋ฆ, ๊ธฐ๋ฅ์ ํ์ ์กฐํ์ ๋ฑ๋ก๋ง ์๋ค๊ณ ๊ฐ์ ํ๋ค.
-> ์ปจํธ๋กค๋ฌ: ์น MVC์ ์ปจํธ๋กค๋ฌ ์ญํ
-> ์๋น์ค: ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ ex)ํ์์ ์ค๋ณต๊ฐ์
์ด ์ ๋๋ค
-> ๋ฆฌํฌ์งํ ๋ฆฌ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ, ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅํ๊ณ ๊ด๋ฆฌ
-> ๋๋ฉ์ธ: ๋น์ฆ๋์ค ๋๋ฉ์ธ ๊ฐ์ฒด, ex) ํ์, ์ฃผ๋ฌธ ๋ฑ
Junit
์ด๋ผ๋ ํ๋ ์์ํฌ๋ก ํ
์คํธ๋ฅผ ์คํํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค!@Test
์ด๋
ธํ
์ด์
(Test org.junit.jupiter.api)์ ์ฌ์ฉํ๋ค๐ก ์ ์ฒด๋ฅผ ํ ์คํธ ํ ๋, ์คํ์์ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ๐ก
ํ๋์ ํ ์คํธ๊ฐ ๋๋ ๋๋ง๋ค ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊น๋ํ ๋น์์ฃผ๋ ์ญํ
@AfterEach
: ํ๋ฒ์ ์ฌ๋ฌ ํ ์คํธ๋ฅผ ์คํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ DB์ ์ง์ ํ ์คํธ์ ๊ฒฐ๊ณผ๊ฐ ๋จ์ ์ ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋ค์ ์ด์ ํ ์คํธ ๋๋ฌธ์ ๋ค์ ํ ์คํธ๊ฐ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.@AfterEach
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ํ ์คํธ๊ฐ ์ข ๋ฃ๋ ๋ ๋ง๋ค ํด๋น ๊ธฐ๋ฅ์ ์คํํ๋ค.
(์ฌ๊ธฐ์ ์ฃผ์ํ ์ , ํ ์คํธ๋ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ด์ผ ํ๋ค)@BeforeEach
: ๊ฐ ํ ์คํธ ์คํ ์ ์ ํธ์ถ๋๋ฉฐ, ํ ์คํธ๋ผ๋ฆฌ ์๋ก ์ํฅ์ ๋ฐ์ง ์๋๋ก ํญ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์กด๊ด๊ณ ๋ํ ๋งบ์ด์ค๋ค.
๐ ํ : ํ ์คํธ ํ๋ ค๋ ํ์ผ์ ํด๋์ค๋ช ์์
command + shift + T
๋จ์ถํค๋ฅผ ๋๋ฅด๋ฉด ์๋์ผ๋ก ํ ์คํธ ํ์ผ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์๋น์ค์ ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ด์ค๋ค.
DI (Dependency Injection)
: ์์ฑ์์ @Autowired
๊ฐ ์์ผ๋ฉด ์คํ๋ง์ด ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ
์ด๋์์ ์ฐพ์์ ๋ฃ์ด์ค๋ค.
: ์ด๋ ๊ฒ ๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ DI๋ผ ํ๋ค.
: ์ด์ ํ
์คํธ์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฃผ์
ํ๊ณ , ์ฌ๊ธฐ์๋ @Autowired
์ ์ํด ์คํ๋ง์ด ์ฃผ์
ํด์ค๋ค.
: DI์๋ ํ๋ ์ฃผ์
, setter ์ฃผ์
, ์์ฑ์ ์ฃผ์
์ด ์๋ค.
1) ํ๋ ์ฃผ์
: ์์ฑ์ ์์ด ํ๋์ @Autowired
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ (๋ณ๋ก ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๋)
2) setter ์ฃผ์
: setter
์ @Autowired
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
3) ์์ฑ์ ์ฃผ์
: ์์ฑ์๋ฅผ ํตํด ๋ฉค๋ฒ ์๋น์ค๊ฐ ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ์ ์ฃผ์
์ด ๋๋ ๋ฐฉ๋ฒ
(์์กด๊ด๊ณ๊ฐ ์คํ์ค์ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ผ๋ฏ๋ก ์์ฑ์ ์ฃผ์
์ ๊ถ์ฅํจ)
์ปดํฌ๋ํธ ์ค์บ์ผ๋ก ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
(์ปดํฌ๋ํธ ์ค์บ : ์ค์ ์ ๋ณด ์์ด ์๋์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํด์ฃผ๋ ์ด๋
ธํ
์ด์
)
: @Component
์ ๋
ธํ
์ด์
์ด ์์ผ๋ฉด ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
: @Controller
์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋ ์ด์ ๋ ์ปดํฌ๋ํธ ์ค์บ ๋๋ฌธ์ด๋ค.
: @Component
๋ฅผ ํฌํจํ๋ ์ ๋
ธํ
์ด์
(@Controller
, @Service
, @Repository
)๋ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
: SpringConfig.java
ํ์ผ์ ์์ฑํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค
: @Bean
- ์คํ๋ง ๋น์ ๋ฑ๋กํ๊ฒ ๋ค๋ ์๋ฏธ
: @Configuration
- ํด๋น ํด๋์ค์์ 1๊ฐ ์ด์ Bean์ ๋ฑ๋กํ๊ณ ์์์ ๋ช
์ํ๋ ์ด๋
ธํ
์ด์
main/resources/template/home.html
ํ์ผ ์์ฑํ๊ธฐmain/resources/static/index.html
ํ์ผ๊ณผ ๋ค๋ฅธ์ ์ ๋ฌด์์ผ๊นโstatic
์ผ๋ก ๊ฐ์ ์ฐพ๋๋ค!H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น ํ์
: hello-spring/sql/ddl.sql
ํ์ผ์ ์์ฑํ ํ sql ํ์ผ์ ๋ฃ์ด์ ๊ด๋ฆฌํ๋ฉด ํธ๋ฆฌํ๋ค
์์ JDBC
: ์ฝ 20๋
์ ๊ณ ๋ ๊ฐ๋ฐ์๋ค์ด ์ง์ JDBC API๋ก ์ฝ๋ฉํ ๊ฒ
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ค์ ์ถ๊ฐ(application.properties
) ํ์ผ ์์ฑ ์, ์คํ๋ง๋ถํธ 2.4๋ถํฐ๋ spring.datasource.username=sa
๋ฅผ ๊ผญ ์ถ๊ฐํด์ฃผ์ด์ผ ํจ(๊ณต๋ฐฑ ๋ชจ๋ ์ ๊ฑฐ)
Jdbc
: ๋ฐ์ดํฐ๋ฒ ์ด์ค sql์ ๊ฐ์ง๊ณ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์ DB๋ฅผ ์ฐ๊ฒฐํ ๋ ํ์ํ ๊ธฐ์
์คํ๋ง JdbcTemplate
: ์์ํ Jdbc๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ด ๋๋ฌด ์ด๋ ค์์ ์คํ๋ง์ด ์ค๋ณต์ ์ ๊ฑฐํด์ ์ ๊ณตํ๋ ํ
ํ๋ฆฟ
: ์์ Jdbc์ ๋์ผํ ํ๊ฒฝ์ค์ ์ ํ์๋ก ํจ.
: ์คํ๋ง JdbcTemplate์ JDBC API์์์ ๋ฐ๋ณต ์ฝ๋๋ฅผ ๋๋ถ๋ถ ์ ๊ฑฐํด์ค๋ค.(๋จ, SQL์ ์ง์ ์์ฑํด์ผ ํจ)
JPA
: ๊ธฐ์กด์ ๋ฐ๋ณต ์ฝ๋๋ ๋ฌผ๋ก ์ด๊ณ , ๊ธฐ๋ณธ์ ์ธ SQL๋ JPA๊ฐ ์ง์ ๋ง๋ค์ด์ ์คํํด์ค๋ค. (๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ ํ์๊ฐ ์๋ค)
: ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก DB์ ์ฟผ๋ฆฌ ์์ด ์ ์ฅ ๋ฐ ๊ด๋ฆฌํ ์ ์์(์คํ๋ง ๋งํผ์ด๋ ์ค๋๋ ๊ธฐ์ )
--> ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ผ ์ ์๊ณ , ๊ฐ์ฒด ์ค์ฌ์ ์ค๊ณ๋ก ํจ๋ฌ๋ค์์ ์ ํํด์ค๋ค.
๐ก JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋
EntityManager
๊ฐ ๊ผญ ํ์ํ๋ค
๐ก JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋
@Transactional(org.springframework.transaction.annotation.Transactional)
์ด ๊ผญ ํ์ํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ํ์ํ๊ธฐ ๋๋ฌธ!
SpringDataJpaMemberRepository
๋ง ๋ง๋ค์ด ๋์ผ๋ฉด,) ์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ์ธํฐํ์ด์ค์ ๋ํ ๊ตฌํ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ ์คํ๋ง ๋น์ ๋ฑ๋ก๊น์ง ํด์ค๋ค!๐ ํ : ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์ฝ๋ ์์ฑ ์, ์์ฑ์๊ฐ ๋ฑ ํ๊ฐ๋ง ์กด์ฌํ๋ค๋ฉด
@Autowired
๋ฅผ ์๋ตํ ์ ์๋ค.
AOP๋ ๋ฉ์๋์ ํธ์ถ์๊ฐ์ ์ธก์ ํ ๋ ์ฌ์ฉํ๋ค.
๊ธฐ์กด์ ๋ฐฉ์๋๋ก๋ ๋์์ ์ ์ด๋ฃจ์ด์ง๋, ์ด ์๊ฐ ์ธก์ ๋ก์ง๊ณผ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ด ์์ฌ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๊ณ ๋ณ๊ฒฝ๋ ๊น๋ค๋ก์์ง๋ค.
AOP(Aspect Oriented Programming)๋ ๊ณตํต ๊ด์ฌ ์ฌํญ๊ณผ ํต์ฌ ๊ด์ฌ ์ฌํญ์ ๋ถ๋ฆฌํ ๊ฒ์ผ๋ก, ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํด์ค๋ค !!
-> ์ด์ ๊น์ง๋ ์๊ฐ ์ธก์ ๋ก์ง์ ๋งค์๋๋ง๋ค ๋ถ์ฌ์ ๋ฒ๊ฑฐ๋ก์ ๋๋ฐ, ์ด์ ์๊ฐ ์ธก์ ๋ก์ง์ ํ ๊ณณ์ ๋ชจ์๋๊ณ ๋ด๊ฐ ์ฐ๊ณ ์ถ์ ๊ณณ์๋ง ๋ถ์ฌ ์ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ์ด๊ฒ์ด ๋ฐ๋ก AOP !!
@Aspect
: AOP๋ฅผ ์ฌ์ฉํ ๋ ํ์ํ ์ด๋
ธํ
์ด์
@Around
: ์ด ๋ก์ง์ ์ด๋์ ์ ์ฉํ ๊ฒ ์ธ์ง ํ๊ฒํ
ํ๋ ๊ฒ
AOP ์ ์ฅ์ ์ ๋ฆฌ
: ํต์ฌ ๊ด์ฌ ์ฌํญ์ ๊น๋ํ๊ฒ ์ ์งํ ์ ์๋ค.
: ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ์ด ๋ก์ง๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
: ์ํ๋ ์ ์ฉ ๋์์ ์ ํํ ์ ์๋ค.(@Around
)
๋๋ฆ ์ด๋ ๊ฒ ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค!
์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ ๋ถ๋ถ์ด ์ ์ผ ์ด๋ ค์ ๋๋ฐ, ์ด ๋ถ๋ถ์ ๋์ค์ ํ๋ฒ ๋ ๋ณต์ตํด๋ด์ผ๊ฒ ๋ค!
์ด์ ๋ก๋๋งต1๋ก ๊ฐ๋ด
์๋ค ๐