๐Ÿ’ป PROJECT/[์Šคํ”„๋ง ๋ถ€ํŠธ] ๊ฒŒ์‹œํŒ

[์Šคํ”„๋ง ๋ถ€ํŠธ] 2. ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

devCloud 2023. 10. 22. 17:10
728x90

01. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

→ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด spring initializr๋กœ ์ด๋™ํ•œ๋‹ค. https://start.spring.io

์ธํ…”๋ฆฌ์ œ์ด์—์„œ๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ณด๋‹ค ๋” ํŽธํ•˜๊ฒŒ ์›น์—์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” spring initializr๋ผ๋Š” ๊ฒƒ์„ ํ†ตํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •์„ ํ•ด์ค€๋‹ค.

• ๊ด€๋ฆฌ ํˆด : Gradle - Groovy (Gradle : ๋นŒ๋“œ ๋„๊ตฌ)

• ์–ธ์–ด : Java
• ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฒ„์ „ : 3.1.0 (์ตœ์‹ ๋ฒ„์ „) (SNAPSHOT์€ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ๋ฒ„์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒX)
•  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ : Traveling.Webproject
•  ์ž๋ฐ” ๋ฒ„์ „ : 17 (์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฒ„์ „ 3.0.X ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ž๋ฐ” 17์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.)
•  Dependency(์˜์กด์„ฑ ๋„๊ตฌ) ์ถ”๊ฐ€
          - Spring Web : ํ†ฐ์บฃ์„ ๊ธฐ๋ณธ์œผ๋กœ ํƒ‘์žฌํ•˜๊ณ , ์›น ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ
          - Spring Data JPA : ๊ธฐ๋ณธ์ ์ธ CRUD ๋ฉ”์„œ๋“œ ์ œ๊ณต
          - MySQL Driver : MySQL๊ณผ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ ๋“œ๋ผ์ด๋ฒ„(MariaDB๋กœ ํ•  ์‹œ MariaDB Driver ์˜์กด์„ฑ ์ถ”๊ฐ€)
          - Thymeleaf : ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•  ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• 

          - Lombok : ๋ฐ˜๋ณต๋˜๋Š” ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ๋‹ค์ด์–ดํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

GENERATE๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด board๋ผ๋Š” zip ํŒŒ์ผ์ด ํ˜•์„ฑ๋œ๋‹ค. ์••์ถ•์„ ํ’€์–ด์ฃผ๊ณ  ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ํŒŒ์ผ์„ ์—ฐ๋‹ค.

 

โ€ป ์ค‘๊ฐ„์— DB๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ MariaDB๋กœ ์•ˆ ํ•˜๊ณ  MySQL๊ณผ ์—ฐ๋™ํ•˜๋Š” ๊ฑธ๋กœ ํ–ˆ๋‹ค. MariaDB๋กœ ํ•˜๋‹ˆ๊น ์ถฉ๋Œ๋„ ์ƒ๊ธฐ๊ณ  ํฌํŠธ ๋ฌธ์ œ ๋“ฑ ์—ฌ๋Ÿฌ ์—๋Ÿฌ๊ฐ€ ๋–ด๋Š”๋ฐ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋ผ์„œ ๊ธฐ์กด์— ์žˆ๋˜ MySQL๊ณผ ํ•˜๋Š” ๊ฑธ๋กœ ์ •ํ–ˆ๋‹ค.

 

02. ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ํŒŒ์ผ ์—ด๊ธฐ

์ธํ…”๋ฆฌ์ œ์ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ open์„ ํด๋ฆญํ•˜๊ณ  ์••์ถ•์„ ํ’€์–ด์ค€ ํŒŒ์ผ์„ ์ฐพ์•„์„œ ํด๋ฆญํ•œ๋‹ค.

(์ธํ…”๋ฆฌ์ œ์ด๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ์„ ๋ฐ”๋กœ ์—ฌ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.  ํŒŒ์ผ ๋‚ด์— build.gradle์ด๋ผ๋Š” ๊ฑธ ํด๋ฆญํ•˜๋ฉด ์•Œ์•„์„œ ์‹คํ–‰ํ•œ๋‹ค.)

 

์‹คํ–‰ํ•ด๋ณด๊ธฐ

์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๋˜๋Š”์ง€ board > main > java > com.study.board > BoardApplication์—์„œ ์‹คํ–‰์„ ํ•ด๋ณธ๋‹ค.

 

์˜ค๋ฅ˜

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์†์„ฑ์—์„œ Gradle์„ ๊ฒ€์ƒ‰ or Build > Build Tools > Gradle์— ๋“ค์–ด๊ฐ€์„œ ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์‹คํ–‰.

 

DB์˜ค๋ฅ˜๋ฅผ ์ œ์™ธํ•˜๊ณ , ์ •์ƒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

jpa๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด db์™€ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

 

03. MySQL Workbench์—์„œ ์Šคํ‚ค๋งˆ ์ƒ์„ฑ

ํ•ด๋‹น ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๊ณ  board๋ผ๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

๊ทธ๋Ÿฌ๋ฉด board๋ผ๋Š” ์Šคํ‚ค๋งˆ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

(sakila, sys, world๋ผ๋Š” ํ…Œ์ด๋ธ”์ด ์žˆ๋Š”๋ฐ ์‚ญ์ œํ•ด๋„ ๋œ๋‹ค. ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ•˜๊ณ  drop schema ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.)

 

04. ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€

board > src > main > resources > application.properties์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

server.port=8080 
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/board?serverTimezone=UTC&characterEncoding=UTF-8

 

MariaDB์ผ ๊ฒฝ์šฐ

server.port=8080 
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/board

 

05. ์‹คํ–‰ํ•˜๊ธฐ

chrome์ฐฝ์—์„œ localhost:8080 ์ž…๋ ฅํ•ด์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค. ๊ทธ๋Ÿผ ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค.

์ธํ…”๋ฆฌ์ œ์ด ์ƒ๋‹จ์— ์ดˆ๋ก์ƒ‰ run ์•„์ด์ฝ˜์„ ๋ˆŒ๋Ÿฌ์•ผ ์‹คํ–‰์ด ๋œ๋‹ค.

06. ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ

board > src > main > java > com.study.board ์— controller ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (ํŒจํ‚ค์ง€๋ช… : controller)

 

ํŒจํ‚ค์ง€ ๋‚ด์— ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ ํ˜€ ์žˆ๋Š” ํŒจํ‚ค์ง€๋ช… ๋’ค์— ์ ์–ด์•ผ ํ•œ๋‹ค. (ํด๋ž˜์Šค๋ช… : BoardController) 

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ํด๋ž˜์Šค ์œ„์— @Controller๋ฅผ ์ ์–ด์ฃผ๋ฉด ์ž๋™์œผ๋กœ import ํ•œ๋‹ค.

package com.study.board.controller;

import org.springframework.stereotype.Controller;

@Controller
public class BoardController {
}

@Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ€์—ฌํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ์ด๋Š” ์Šคํ”„๋ง์ด ์ปจํŠธ๋กค๋Ÿฌ์ธ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

package com.study.board.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BoardController {
    @GetMapping("/")
    @ResponseBody
    public String main() {
        return "Hello World"
    }
}

@GetMapping - ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ”์„ ๋•Œ /๋ฅผ ์ž๋™์œผ๋กœ ๋ถ™์—ฌ์ค€๋‹ค.

@ResponseBody - main์— ์ ์—ˆ๋˜ Hello World๋ฅผ ๋„์›Œ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

๋‹ค์‹œ ์‹คํ–‰

localhost:8080์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด Hello World๊ฐ€ ์ฐํžŒ ํŽ˜์ด์ง€๊ฐ€ ๋ณด์ผ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌ๋ฉด ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค.

728x90