Spring๐/๊น์ํ์ ์คํ๋ง ์์ ์ ๋ณต (6) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ (6) : AOP AOP : ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ AOP๊ฐ ํ์ํ ์ํฉ - ๋ชจ๋ ๋ฉ์๋์ ํธ์ถ ์๊ฐ์ ์ธก์ ํ๊ณ ์ถ๋ค๋ฉด? - ๊ณตํต ๊ด์ฌ ์ฌํญ vs ํต์ฌ ๊ด์ฌ ์ฌํญ - ํ์ ๊ฐ์ ์๊ฐ, ํ์ ์กฐํ ์๊ฐ์ ์ธก์ ํ๊ณ ์ถ๋ค๋ฉด? ๋ชจ๋ ๋ฉ์๋์ ์๊ฐ ์ธก์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ผ์ผํ ์ถ๊ฐํ๋ ค๋ฉด ๋ฆฌ์์ค๋ฅผ ๋๋ฌด ๋ง์ด ์ก์๋จน๋๋ค ํ์๊ฐ์ , ํ์ ์กฐํ์ ์๊ฐ์ ์ธก์ ํ๋ ๊ธฐ๋ฅ์ ํต์ฌ ๊ด์ฌ ์ฌํญ์ด ์๋๋ค. ์๊ฐ์ ์ธก์ ํ๋ ๋ก์ง์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ด๋ค. ์๊ฐ์ ์ธก์ ํ๋ ๋ก์ง๊ณผ ํต์ฌ ๋น์ฆ๋์ค์ ๋ก์ง์ด ์์ฌ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค. ์๊ฐ์ ์ธก์ ํ๋ ๋ก์ง์ ๋ณ๋์ ๊ณตํต ๋ก์ง์ผ๋ก ๋ง๋ค๊ธฐ ๋งค์ฐ ์ด๋ ต๋ค. ์๊ฐ์ ์ธก์ ํ๋ ๋ก์ง์ ๋ณ๊ฒฝํ ๋ ๋ชจ๋ ๋ก์ง์ ์ฐพ์๊ฐ๋ฉด์ ๋ณ๊ฒฝํด์ผ ํ๋ค. AOP ์ ์ฉํ๊ธฐ ๋ชฉํ : ๊ณตํต ๊ด์ฌ ์ฌํญ์ ํต์ฌ ๊ด์ฌ ์ฌํญ๊ณผ ๋ถ๋ฆฌํ๊ธฐ ํด๊ฒฐ ํ์๊ฐ์ , ํ์ ์กฐํ.. ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ (5) : ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ 1) H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น ์๋์ฐ ์คํ : h2.bat ์ฝ์์์ test.mv.db ํ์ผ ์์ฑํ๊ธฐ ์ ์ ์ jdbc:h2:tcp://localhost/~/test ํ๋ก์ ํธ ๋ฃจํธ์ sql/ddl.sql ํ์ผ๋ก sql ๋ช ๋ น์ด ๊ด๋ฆฌํ๋ฉด ํธ๋ฆฌํ๋ค. 2) ์์ JDBC build.gradle ํ์ผ์ jdbc, h2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' ์คํ๋ง ๋ถํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ค์ ์ถ๊ฐ spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource... ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ(4) : ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ 1) ํ ์ปจํธ๋กค๋ฌ ๋ฐ ํ html package hello.helloSpring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } Hello Spring ํ์ ๊ธฐ๋ฅ ํ์ ๊ฐ์ ํ์ ๋ชฉ๋ก *์ปจํธ๋กค๋ฌ๊ฐ ์ ์ ํ์ผ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค! ์์ฒญ์ด ์ค๋ฉด ๋จผ์ ์คํ๋ง ์ปจํ ์ด๋ ์์ ์๋ ์ปจํธ๋กค๋ฌ๋ถํฐ ๊ฒ์ํ๋ค. ์๋ ๊ฒฝ์ฐ static ํ์ผ ๊ฒ.. ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ (3) : ์คํ๋ง ๋น๊ณผ ์์กด ๊ด๊ณ ์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ 1. ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์๋น์ค์ ํ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์์กด๊ด๊ณ๋ฅผ ๋งบ๋๋ค๊ณ ํํ - @Controller ์ด๋ ธํ ์ด์ ์ด ์๋ค๋ฉด, ์คํ๋ง ๊ตฌ๋ ์ ๊ทธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๊ฒ ๋๋ฉฐ ๊ทธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค - @Autowired ์ด๋ ธํ ์ด์ ์ ์์ฑ์์ ์ฌ์ฉํ๋ฉด ์คํ๋ง ๊ตฌ๋ ์ ๊ทธ ์์ฑ์์ ํ๋ผ๋ฏธํฐ์ ์ค์ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๋ค, DI ! (์์ฑ์๊ฐ 1๊ฐ๋ง ์๋ค๋ฉด ์๋ต๊ฐ๋ฅ) ~ @Component ์ด๋ ธํ ์ด์ ์ด ์๋ ํด๋์ค๋ ์คํ๋ง ๊ตฌ๋ ์ ๊ฐ์ฒด ์์ฑ ํ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋๋ค (@Controller, @Service, @Repository) ** ์๋ฌด ํด๋์ค์์ @Component๋ฅผ ๋ถ์ฌ๋.. ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ (2) : ํ์ ๊ด๋ฆฌ ์์ - ๋ฐฑ์๋ ๊ฐ๋ฐ ์ปจํธ๋กค๋ฌ : ์น MVC์ ์ปจํธ๋กค๋ฌ ์ญํ ์๋น์ค : ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ ๋ฆฌํฌ์งํ ๋ฆฌ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ, ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅํ๊ณ ๊ด๋ฆฌ ๋๋ฉ์ธ : ๋น์ฆ๋์ค ๋๋ฉ์ธ ๊ฐ์ฒด ex) ํ์, ์ฃผ๋ฌธ, ์ฟ ํฐ ๋ฑ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ธํฐํ์ด์ค๋ก ์ค์ ํ ์ด์ : DB์ ๋ํ ์ ํ์ ์์ง ํ์ง ์์ DB์ ๋ฐ๋ผ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ์ธํฐํ์ด์ค๋ก ๋ง๋ ๋ค. ์ค์ต ์๊ตฌ์ฌํญ ๋ฐ์ดํฐ : ํ์ ID, ์ด๋ฆ ๊ธฐ๋ฅ : ํ์ ๋ฑ๋ก, ์กฐํ ์์ง ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์ ์ ๋์ง ์์ ์์ ๋๋ฉ์ธ๊ณผ ๋ ํฌ์งํ ๋ฆฌ ๋ง๋ค๊ธฐ 1) Domian - Member package hello.helloSpring.domain; public class Member { private Long id; // ์ฌ์ฉ์ ์์๋ก ๋ถ.. ์คํ๋ง ์ ๋ฌธ ๊ฐ์ ๋ ธํธ ์ ๋ฆฌ (1) : ํ๋ก์ ํธ ํ๊ฒฝ์ค์ 1. with Spring initializr Metadata Group : ๊ธฐ์ ์ด๋ฆ, ๋๋ฉ์ธ ๋ช Artifact : ๋น๋๋์ด ๋์จ ๊ฒฐ๊ณผ๋ฌผ์ ์ด๋ฆ ( ํ๋ก์ ํธ๋ช ) Dependencies : ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ์์ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ? ์น ํ๋ก์ ํธ -> Spring Web HTML ํ ํ๋ฆฟ ์์ง -> Thymeleaf ๋ฑ test : ํ ์คํธ์ฝ๋ ๊ด๋ จ๋ด์ฉ resources : java ํ์ผ์ ์ ์ธํ xml, ์ค์ ํ์ผ ๋ฑ build.gradle plugins : ๊ทธ๋๋ค ์ค์ repositories : ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋ URL dependencies : ๋ผ์ด๋ธ๋ฌ๋ฆฌ gitignore : ์์ค์ฝ๋ ๊ด๋ฆฌ ( ๊นํ์ ํ์์๋ ์ฝ๋๋ค์ ์ฌ๋ผ๊ฐ์ง ์๋๋ก ) ์๋ฐ ํด๋ ์ ํ๋ก์ ํธ ํจํค์ง ์ ๋ฉ์ธ ๋ฉ์๋ .. ์ด์ 1 ๋ค์