< inflearn "์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ " ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ํ ๋ง๋ค์ด๋ณด๊ธฐ >
1. https://start.spring.io/ ์์ springboot ํ๋ก์ ํธ ์์ฑ
2. HomeController ๋ฐ home.html ์์ฑ โท ์คํํ๊ณ localhost:8080 ์ ์ ํ์ธ
- ์ต์ด ์ ์ ์ ๋์ค๋ ํ์ด์ง ์ฐ๊ฒฐ by @GetMapping("/") → return "home"
- home.html์์ [๊ธ์ฐ๊ธฐ] ํ๋ฉด๊ณผ [๋ชฉ๋ก๋ณด๊ธฐ] ํ๋ฉด ๋งํฌ๋ฅผ ๊ฑธ์ด์ค
- ์คํ๋ฐฉ๋ฒ: src/main/java ์๋์ XXXApplication์ main ํจ์ ์คํ
- spring์ด ์ค๋ฅ ์์ด ์ ๋จ๋์ง ์ฝ์๋ก ํ์ธํ๊ณ , home.html์ด ์ ๋จ๋์ง ํ์ธ
3. ๋๋ฉ์ธ ํด๋์ค (Post) ์์ฑ
- ๊ฒ์๊ธ ํ๋์ ํด๋น๋๋ ํด๋์ค๋ก, ์ด๋ค ํ๋๊ฐ ๊ด๋ฆฌ๋์ด์ผ ํ๋์ง ๊ฒฐ์
- idx, title, writer, password, contents ํ๋๋ฅผ private์ผ๋ก ์ ์ธํ๊ณ getter, setter ์์ฑ (Alt+Insert๋ก ์๋ ์์ฑ)
- TODO: dttm, hits
4. Repository Interface (PostRepository) ์์ฑ
- ๊ฒ์๊ธ ํ๋์ ๋ํ์ฌ (๋ณด๋ค DB ์นํ์ ์ผ๋ก) ์ด๋ค ๊ธฐ๋ฅ์ด ๊ตฌํ๋์ด์ผ ํ๋์ง ๊ฒฐ์
- ๊ฒ์๊ธ ์ ์ฅ(save), ๊ฒ์๊ธ ์ฐพ๊ธฐ(findByIdx), ๊ฒ์๊ธ ์ ์ฒด ์กฐํ(findAll) 3๊ฐ์ง๋ฅผ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ผ๋ก ๊ฒฐ์
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ, DB ๊ธฐ๋ฐ ๋ชจ๋ ์๋ํ ์ ์๋๋ก Interface๋ก ์ค๊ณ
- TODO: edit, delete, matchPassword
5. ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ Repository ๊ตฌํ์ฒด (MemoryPostRepository) ์์ฑ โท @Repository
- DB ์ฐ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ํ์ด ์ ์๋๋๋์ง ํ์ธ
- DB ์ฐ๋์ ์๋๊ธฐ ๋๋ฌธ์ spring์ ๋ด๋ ธ๋ค ์ฌ๋ฆฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ง ์์
- PostRepository๋ฅผ implementsํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ by Map<Long, Post>
- ์ผ๋จ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ์๋๋๋์ง ํ์ธํ๊ธฐ ์ํด์ @Repository๋ฅผ ๋ถ์ฌ์ ์ปดํฌ๋ํธ ๋ฑ๋ก
6. ์๋น์ค ํด๋์ค (PostService) ์์ฑ โท @Service ๋ถ์ด๊ณ PostRepository @Autowired
- Repository๋ณด๋ค ์๋น์ค ๋จ์ ๊ฐ๊น๊ฒ ๊ธฐ๋ฅ์ ๊ตฌํ
- ๊ฒ์๊ธ ๋ฑ๋ก(registerPost), ๊ฒ์๊ธ ์ฐพ๊ธฐ(findOne), ๊ฒ์๊ธ ์ ์ฒด ์กฐํ(findPosts)
- Repository์ ๋ด์ฉ๊ณผ ๋น์ทํ์ง๋ง ๋ฉ์๋ ์ด๋ฆ์ ์๋น์ค ๋จ์ ๊ฐ๊น๊ฒ ๋ถ์ด๋ ค๊ณ ๋ ธ๋ ฅํ์
- ์์ฑ์๋ก PostRepository ๊ฐ์ฒด๋ฅผ DI (@Autowired) ๋ฐ๊ณ , PostRepository์ ๋ฉ์๋๋ฅผ ์ฌ์ฉ (์์์ @Repository๋ก ์ปดํฌ๋ํธ ๋ฑ๋ก์ ํด์ DI๊ฐ ๊ฐ๋ฅํ ๊ฒ์)
7. PostController โท @Controller ๋ถ์ด๊ณ PostService @Autowired โท ์คํํ๊ณ localhost:8080 ํ์ธ
- ์์ฑ์๋ก PostService ๊ฐ์ฒด๋ฅผ DI ๋ฐ๊ณ , PostService์ ๋ฉ์๋๋ฅผ ์ฌ์ฉ
- home.html์์ ๊ฑธ์ด์ค [๊ธ์ฐ๊ธฐ]์ [๋ชฉ๋ก๋ณด๊ธฐ] ๋งํฌ๊ฐ ์ด๋๋ก ์ฐ๊ฒฐ๋์ด์ผ ํ๋์ง @GetMapping์ ํตํด html ์๋ด
- [๊ธ์ฐ๊ธฐ] - createPostForm.html, [๋ชฉ๋ก๋ณด๊ธฐ] - postList.html
- createPostForm.html์์๋ form tag์ input tag๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์
- PostForm ํด๋์ค๋ฅผ ์ ๊ท ์์ฑํ๊ณ , input tag์ name๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ํ๋๋ฅผ ๋ง๋ค๋ฉด spring์ด ์์์ ๊ฐ๊ฐ์ ํ๋์ ๋งคํํด์ค (getter, setter๋ ๋ง๋ค๊ธฐ)
- ๋ค์ PostController๋ก ๋์๊ฐ์ PostForm์ผ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ Post๋ก ๋ด๊ณ , PostService์ registerPost ๋ฉ์๋๋ฅผ ์ฌ์ฉ with @PostMapping
8. JDBC Template์ ํ์ฉํ mysql ์ฐ๊ฒฐ์ ์ํ์ฌ build.gradle, application.properties์ ๋ผ์ธ ์ถ๊ฐ
dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'mysql:mysql-connector-java'}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/board-spring?serverTimezone=UTC&characterEncoding=UTF-8spring.datasource.username=rootspring.datasource.password=XXXX
9. DB ๊ธฐ๋ฐ Repository ๊ตฌํ์ฒด (JdbcTemplatePostRepository) ์์ฑ โท @Repository (MemoryPostRepository์ @Repository๋ ์ ๊ฑฐ)
- JDBC Template์ ํตํด ์์์ ๋ฑ๋กํ mysql DB์ ์ฐ๋
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ๊ตฌํ์ฒด ๋์ DB ๊ธฐ๋ฐ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์, ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ๊ตฌํ์ฒด์ ์ ์๋ @Repository๋ ์ ๊ฑฐํ๊ณ ์๋ก ๋ง๋ DB ๊ธฐ๋ฐ ๊ตฌํ์ฒด์ @Repository๋ฅผ ๋ถ์
'Web Application' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
wsl๋ก django ํ๋ก์ ํธ ์์ํ๊ธฐ (2) (0) | 2022.01.02 |
---|---|
wsl๋ก django ํ๋ก์ ํธ ์์ํ๊ธฐ (0) | 2021.12.26 |
Java ๋ชจ๋ฅด๋ ๋ด์ฉ (0) | 2021.09.12 |
Java ๊ฐ์ฒด ์งํฅ (0) | 2021.08.29 |
Java ๋ฉ๋ชจ๋ฆฌ ๋ ๋ฒจ ์ดํด (0) | 2021.08.29 |
๋๊ธ