/MySpringBootTemplate

๐Ÿ“Œ ๋‚˜๋งŒ์˜ ์Šคํ”„๋ง๋ถ€ํŠธ ํ…œํ”Œ๋ฆฟ ๋งŒ๋“ค๊ธฐ!

Primary LanguageJava

Spring Boot Template

โœจCommon

REST API

REST API์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์›๋ฆฌ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌ๊ธ€๋งํ•˜์—ฌ ์ตํžŒ ๋’ค์— Route๋ฅผ ๊ตฌ์„ฑํ•˜์ž.

Folder Structure

  • src: ๋ฉ”์ธ ๋กœ์ง src์—๋Š” ๋„๋ฉ”์ธ ๋ณ„๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋„๋ก ํ–ˆ๋‹ค. ๋„๋ฉ”์ธ์ด๋ž€ ํšŒ์›(User), ๊ฒŒ์‹œ๊ธ€(Post), ๋Œ“๊ธ€(Comment), ์ฃผ๋ฌธ(Order) ๋“ฑ ์†Œํ”„ํŠธ์›จ์–ด์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ ํ˜น์€ ๋ฌธ์ œ ์˜์—ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ฐ์ž ์„ค๊ณ„ํ•  APP์„ ๋ถ„์„ํ•˜๊ณ  ํ•„์š”ํ•œ ๋„๋ฉ”์ธ์„ ๋„์ถœํ•˜์—ฌ src ํด๋”๋ฅผ ๊ตฌ์„ฑํ•˜์ž.
  • config ๋ฐ util ํด๋”: ๋ฉ”์ธ ๋กœ์ง์€ ์•„๋‹ˆ์ง€๋งŒ src ์—์„œ ํ•„์š”ํ•œ ๋ถ€์ฐจ์ ์ธ ํŒŒ์ผ๋“ค์„ ๋ชจ์•„๋†“์€ ํด๋”
  • ๋„๋ฉ”์ธ ํด๋” ๊ตฌ์กฐ

Route - Controller - Provider/Service - DAO

  • Route: Request์—์„œ ๋ณด๋‚ธ ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ

  • Controller: Request๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  Response ํ•ด์ฃผ๋Š” ๊ณณ. (Provider/Service์— ๋„˜๊ฒจ์ฃผ๊ณ  ๋‹ค์‹œ ๋ฐ›์•„์˜จ ๊ฒฐ๊ณผ๊ฐ’์„ ํ˜•์‹ํ™”), ํ˜•์‹์  Validation

  • Provider/Service: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ, ์˜๋ฏธ์  Validation

  • DAO: Data Access Object์˜ ์ค„์ž„๋ง. Query๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ๊ณณ.

  • ๋ฉ”์†Œ๋“œ ๋„ค์ด๋ฐ๋ฃฐ ์ด ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ ๋ช…๋ช… ๊ทœ์น™์€ User ๋„๋ฉ”์ธ์„ ์ฐธ๊ณ ํ•˜์ž. ํ•ญ์ƒ ์ด ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋„ค์ด๋ฐ์€ ํ†ต์ผ์„ฑ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹๋‹ค.

Comparison

3๊ฐœ ํ…œํ”Œ๋ฆฟ ๋ชจ๋‘ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Request์— ๋Œ€ํ•ด DB ๋‹จ๊นŒ์ง€ ๊ฑฐ์นœ ๋’ค, ๋‹ค์‹œ Controller๋กœ ๋Œ์•„์™€ Response ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์ดํ•ดํ•˜๊ณ  ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์ž.

Request -> Route -> Controller -> Service/Provider -> DAO -> DB

DB -> DAO -> Service/Provider -> Controller -> Route -> Response

๋‹ค์Œ์€ ๊ฐ ํ…œํ”Œ๋ฆฟ ๋ณ„ ์ฐจ์ด์ ์„ ๋น„๊ต ๊ธฐ์ˆ ํ•ด ๋†“์€ ๊ฒƒ์ด๋‹ค.

PHP (ํŒจํ‚ค์ง€๋งค๋‹ˆ์ € = composer)

Request(์‹œ์ž‘) / Response(๋) โ‡„ Router (index.php) โ‡„ Controller โ‡„ Service (CUD) / Provider (R) โ‡„ PDO (DB)

Node.js (ํŒจํ‚ค์ง€๋งค๋‹ˆ์ € = npm)

Request(์‹œ์ž‘) / Response(๋) โ‡„ Router (*Route.js) โ‡„ Controller (*Controller.js) โ‡„ Service (CUD) / Provider (R) โ‡„ DAO (DB)

Springboot java (ํŒจํ‚ค์ง€๋งค๋‹ˆ์ € = Maven (= Spring ์„ ํ˜ธ), Gradle (Springboot ์„ ํ˜ธ))

Request(์‹œ์ž‘) / Response(๋) โ‡„ Controller(= Router + Controller) โ‡„ Service (CUD) / Provider (R) โ‡„ DAO (DB)

Validation

์„œ๋ฒ„ API ๊ตฌ์„ฑ์˜ ๊ธฐ๋ณธ์€ Validation์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์™ธ๋ถ€์—์„œ ์–ด๋–ค ๊ฐ’์„ ๋‚ ๋ฆฌ๋“  Validation์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ง€๋Š” ์ผ์ด ์—†๋„๋ก ์œ ์˜ํ•˜์ž. ๊ฐ’, ํ˜•์‹, ๊ธธ์ด ๋“ฑ์˜ ํ˜•์‹์  Validation์€ Controller์—์„œ, DB์—์„œ ๊ฒ€์ฆํ•ด์•ผ ํ•˜๋Š” ์˜๋ฏธ์  Validation์€ Provider ํ˜น์€ Service์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

โœจStructure

์•ž์— (*)์ด ๋ถ™์–ด์žˆ๋Š” ํŒŒ์ผ(or ํด๋”)์€ ์ถ”๊ฐ€์ ์ธ ๊ณผ์ • ์ดํ›„์— ์ƒ์„ฑ๋œ๋‹ค.

api-server-spring-boot
  > * build
  > gradle
  > * logs
    | app.log // warn, error ๋ ˆ๋ฒจ์— ํ•ด๋‹นํ•˜๋Š” ๋กœ๊ทธ๊ฐ€ ์ž‘์„ฑ ๋˜๋Š” ํŒŒ์ผ
    | app-%d{yyyy-MM-dd}.%i.gz
    | error.log // error ๋ ˆ๋ฒจ์— ํ•ด๋‹นํ•˜๋Š” ๋กœ๊ทธ๊ฐ€ ์ž‘์„ฑ ๋˜๋Š” ํŒŒ์ผ
    | error-%d{yyyy-MM-dd}.%i.gz
  > src.main.java.com.example.demo
    > config
      > secret
        | Secret.java // git์— ์ถ”์ ๋˜์ง€ ์•Š์•„์•ผ ํ•  ์‹œํฌ๋ฆฟ ํ‚ค ๊ฐ’๋“ค์ด ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋Š” ๊ณณ
      | BaseException.java // Controller, Service, Provider ์—์„œ Response ์šฉ์œผ๋กœ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ ๋  ์ต์…‰์…˜ ํด๋ž˜์Šค
      | BaseResponse.java // Controller ์—์„œ Response ์šฉ์œผ๋กœ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ ํด๋ž˜์Šค
      | BaseResponseStatus.java // Controller, Service, Provider ์—์„œ ์‚ฌ์šฉ ํ•  Response Status ๊ด€๋ฆฌ ํด๋ž˜์Šค 
      | Constant.java // ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ƒ์ˆ˜ ๊ฐ’๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ณณ
    > src
      > test
        | TestController.java // logger๋ฅผ ์–ด๋–ป๊ฒŒ ์จ์•ผํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค
      > user
        > models
          | GetUserRes.java        
          | PostUserReq.java 
          | PostUserRes.java 
        | UserController.java
        | UserProvider.java
        | UserService.java
        | UserDao.java
      | WebSecurityConfig.java // spring-boot-starter-security, jwt ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค 
    > utils
      | AES128.java // ์•”ํ˜ธํ™” ๊ด€๋ จ ํด๋ž˜์Šค
      | JwtService.java // jwt ๊ด€๋ จ ํด๋ž˜์Šค
      | ValidateRegex.java // ์ •๊ทœํ‘œํ˜„์‹ ๊ด€๋ จ ํด๋ž˜
    | DemoApplication // SpringBootApplication ์„œ๋ฒ„ ์‹œ์ž‘ ์ง€์ 
  > resources
    | application.yml // Database ์—ฐ๋™์„ ์œ„ํ•œ ์„ค์ • ๊ฐ’ ์„ธํŒ… ๋ฐ Port ์ •์˜ ํŒŒ์ผ
    | logback-spring.xml // logger ์‚ฌ์šฉ์‹œ console, file ์„ค์ • ๊ฐ’ ์ •์˜ ํŒŒ์ผ
build.gradle // gradle ๋นŒ๋“œ์‹œ์— ํ•„์š”ํ•œ dependency ์„ค์ •ํ•˜๋Š” ๊ณณ
.gitignore // git ์— ํฌํ•จ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ํด๋”, ํŒŒ์ผ๋“ค์„ ์ž‘์„ฑ ํ•ด๋†“๋Š” ๊ณณ

โœจDescription

Annotation

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ค์–‘ํ•˜๊ฒŒ ์•„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. SpringBoot์˜ ์‹œ์ž‘์ ์„ ์•Œ๋ฆฌ๋Š” @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์Šคํ”„๋ง ๋ถ€ํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋กœ ๊ตฌ๊ธ€๋ง ํ•ด์„œ ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ดํ•ดํ•˜๊ณ  ์™ธ์›Œ๋‘์ž.

Lombok

Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐ˜๋ณต๋˜๋Š” getter, setter, toString ๋“ฑ์˜ ๋ฉ”์„œ๋“œ ์ž‘์„ฑ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ๋„๋ฉ”์ธ์˜ model ํด๋” ๋‚ด์— ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค์— lombok์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์งค ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ตฌ๊ธ€๋ง๊ณผ model > PostUser, User๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•˜์ž.

src - main - resources

ํ…œํ”Œ๋ฆฟ์€ ํฌ๊ฒŒ log ํด๋”์™€ src ํด๋”๋กœ ๋‚˜๋‰œ๋‹ค. log๋Š” ํ†ต์‹  ์‹œ์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋“ค์„ ๊ธฐ๋กํ•˜๋Š” ๊ณณ์ด๋‹ค. ์‹ค์ œ ๋ฉ”์ธ ์ฝ”๋“œ๋Š” src์— ๋‹ด๊ฒจ์žˆ๋‹ค. src > main > resources๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด์ž.

application.yml

์—์„œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ •์˜ํ•˜๊ณ  DataBase ์—ฐ๋™์„ ์œ„ํ•œ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

logback-spring.xml

logs ํด๋”์— ๋กœ๊ทธ ๊ธฐ๋ก์„ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๋‚จ๊ธธ ๊ฒƒ์ธ์ง€ ์„ค์ •ํ•œ๋‹ค. logs ํด๋”์— ์–ด๋–ป๊ฒŒ ๊ธฐ๋ก์ด ๋‚จ๊ฒจ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์‹œ๋ผ. (์ปค์Šคํ…€ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋ฉดlogback-spring.xml ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๋Š” ์—†๋‹ค.)

src - main - java

com.example.demo ํŒจํ‚ค์ง€์—๋Š” ํฌ๊ฒŒ config ํด๋”, src ํด๋”์™€ ์ด ํ”„๋กœ์ ํŠธ์˜ ์‹œ์ž‘์ ์ธ DemoApplication.java๊ฐ€ ์žˆ๋‹ค.

DemoApplication.java ์€ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ์˜ ์‹œ์ž‘์„ ์•Œ๋ฆฌ๋Š” @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. (๊ตฌ๊ธ€๋ง ํ†ตํ•ด @SpringBootApplication์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋„ ์‚ดํŽด๋ณด์ž.)

srcํด๋”์—๋Š” ์‹ค์ œ API๊ฐ€ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ด์•˜๊ณ  config ํด๋”์—๋Š” src์—์„œ ํ•„์š”ํ•œ Secret key, Base ํด๋ž˜์Šค, ์ƒ์ˆ˜ ํด๋ž˜์Šค๋ฅผ, util ํด๋”์—๋Š” JWT, ์•”ํ˜ธํ™”, ์ •๊ทœํ‘œํ˜„์‹ ๋“ฑ์˜ ํด๋ž˜์Šค๋ฅผ ๋ชจ์•„๋†จ๋‹ค.

src๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ž. src๋Š” ๊ฐ ๋„๋ฉ”์ธ๋ณ„๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ๋ถ„ํ•ด ๋†“๋Š”๋‹ค. ํ˜„์žฌ๋Š” user ๋„๋ฉ”์ธ๊ณผ test ๋„๋ฉ”์ธ์ด ์žˆ๋‹ค. ๋„๋ฉ”์ธ์ด๋ž€ ๊ฒŒ์‹œ๊ธ€, ๋Œ“๊ธ€, ํšŒ์›, ์ •์‚ฐ, ๊ฒฐ์ œ ๋“ฑ ์†Œํ”„ํŠธ์›จ์–ด์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ ํ˜น์€ ๋ฌธ์ œ ์˜์—ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ด ๋„๋ฉ”์ธ๋“ค์€ API ํ†ต์‹ ์—์„œ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋กœ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€? API ํ†ต์‹ ์˜ ๊ธฐ๋ณธ์€ Request โ†’ Response์ด๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์–ด๋–ป๊ฒŒ Request๋ฅผ ๋ฐ›์•„์„œ, ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ์–ด๋–ป๊ฒŒ Response ํ•˜๋Š”์ง€๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์‚ดํŽด๋ณด์ž. ์ „๋ฐ˜์ ์ธ API ํ†ต์‹  ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Request โ†’ XXXController.java(=Router+Controller) โ†’ Service (CUD) / Provider (R) (=Business Logic) โ†’ Dao (DB) โ†’ Response

1. Controller / UserController.java / @RestController

  1. API ํ†ต์‹ ์˜ Routing ์ฒ˜๋ฆฌ
  2. Request๋ฅผ ๋‹ค๋ฅธ ๊ณ„์ธต์— ๋„˜๊ธฐ๊ณ  ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ ๊ฐ’์„ Response ํ•ด์ฃผ๋Š” ๋กœ์ง
  • Request์˜ ํ˜•์‹์  Validation ์ฒ˜๋ฆฌ (DB๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ ๋„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š”)

1) @Autowired

UserController์˜ ์ƒ์„ฑ์ž์— @Autowired ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ๋‹ค. ์ด๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ, UserController ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์Œ์— ์‚ดํŽด๋ณผ UserService, UserProvider์˜ ์ƒ์„ฑ์ž์—๋„ ๊ฐ๊ฐ ๋ถ™์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ์—ญํ• ์ด๋‹ค. ์ž์„ธํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž.

๋‚˜๋จธ์ง€ ์–ด๋…ธํ…Œ์ด์…˜๋“ค ์—ญ์‹œ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ์ดํ•ดํ•˜์ž.

2) BaseResponse

Responseํ•  ๋•Œ, ๊ณตํ†ต ๋ถ€๋ถ„์€ ๋ฌถ๊ณ  ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ์ œ๋„ค๋ฆญ์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ค€๋‹ค. (BaseResponse.java ์ฝ”๋“œ ์‚ดํŽด ๋ณผ ๊ฒƒ. ์—ฌ๊ธฐ์— ์“ฐ์ด๋Š”BaseResponseStatus ๋Š” enum์„ ํ†ตํ•ด Status ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.)

3) ๋ฉ”์†Œ๋“œ ๋„ค์ด๋ฐ๋ฃฐ

์ด ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ ๋ช…๋ช… ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

HTTP Method + ํ•ต์‹ฌ URI

  • GET /users ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ช… โ†’ getUsers
  • PATCH /users ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ช… โ†’patchUsers

ํ•ญ์ƒ ์ด ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋„ค์ด๋ฐ์€ ํ†ต์ผ์„ฑ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹๋‹ค.

4) Res, Req ๋„ค์ด๋ฐ๋ฃฐ

๊ฐ ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Res, Req ๋ชจ๋ธ์˜ ๋ช…๋ช… ๊ทœ์น™๋„ ๋ฉ”์†Œ๋“œ ๋ช…๊ณผ ๋น„์Šทํ•˜๋‹ค.

HTTP Method + ํ•ต์‹ฌ URI +Res/Req

Patch /users/:userId โ†’ PatchUserRes / PatchUserReq

์ด Res, Req ๋ชจ๋ธ์€ (๋„๋ฉ”์ธ๋ช…) / models ํด๋”์— ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

2. Service ์™€ Provider / UserService.java UserProvider.java / @Service

  1. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ค๋ฃจ๋Š” ๊ณณ (DB ์ ‘๊ทผ[CRUD], DB์—์„œ ๋ฐ›์•„์˜จ ๊ฒƒ ํ˜•์‹ํ™”)
  • Request์˜ ์˜๋ฏธ์  Validation ์ฒ˜๋ฆฌ (DB๋ฅผ ๊ฑฐ์ณ์•ผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š”)

Service์™€ Provider๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ค๋ฃจ๋Š” ๊ณณ์ด๋‹ค. CRUD ์ค‘ R(Read) ์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๊ธด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— R(Read) ๋งŒ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด Service๋Š” CUD(Create, Update, Delete) ๋ฅผ, Provider๋Š” R(Read) ๋ฅผ ๋‹ค๋ฃจ๋„๋ก ํ–ˆ๋‹ค. ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค.

Provider

R(Read) ์™€ ๊ด€๋ จ๋œ ๊ณณ์ด๋‹ค. DB์—์„œ select ํ•ด์„œ ์–ป์–ด์˜จ ๊ฐ’์„ ๊ฐ€๊ณตํ•ด์„œ ๋ฑ‰์–ด์ค€๋‹ค.

Service

CUD(Create, Update, Delete) ์™€ ๊ด€๋ จ๋œ ๊ณณ์ด๋‹ค. CUD์—์„œ R์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๋Ÿด ๋•Œ๋Š” Provider์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ Service์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

1) ๋ฉ”์†Œ๋“œ๋ช…

๋ฉ”์†Œ๋“œ์˜ prefix๋กœ ๋‹ค์Œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค.

C โ†’ createXXX createInfo

R โ†’ retrieveXXX retrieveInfoList

U โ†’ updateXXX updateInfo

D โ†’ deleteXXX deleteInfo

2) BaseException

BaseException์„ ํ†ตํ•ด Service๋‚˜ Provider์—์„œ Controller์— Exception์„ ๋˜์ง„๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Status ๊ฐ’์€ BaseResponseStatus ์˜ enum์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.

3. DAO / UserDao.java

JdbcTemplate์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๊ณณ ๊ณต์‹ ๋ฌธ์„œ ์™€ ํ…œํ”Œ๋ฆฟ์˜ ๊ธฐ๋ณธ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

โœจUsage

API ๋งŒ๋“ค๊ธฐ ์˜ˆ์ œ

๋กœ์ปฌ์—์„œ DemoApplication์„ ์‹คํ–‰์‹œํ‚จ๋‹ค. (๋กœ์ปฌ ์„œ๋ฒ„ ๊ตฌ๋™ ์‹œ)

[DB ์—ฐ๊ฒฐ ์—†์ด TEST]

  1. src > test > TestController.java์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” API๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณด์ž.
  2. ํฌ์ŠคํŠธ๋งจ์„ ํ†ตํ•ด GET localhost:9000/test/log๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

[DB ์—ฐ๊ฒฐ ์ดํ›„ TEST]

  1. resources > application.yml์—์„œ ๋ณธ์ธ์˜ DB ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  2. DB์— TEST๋ฅผ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค.
  3. UserController.java, UserProvider.java, UserService.java, UserDao.java๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๊ฐ’๋“ค์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์„ ๋งŒ๋“ ๋‹ค.
  4. ํฌ์ŠคํŠธ๋งจ์„ ํ†ตํ•ด ๋ณธ์ธ์ด ๋งŒ๋“  API ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

nohup

๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด nohup์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์‹ค์Šต ์˜์ƒ์„ ์ฐธ๊ณ ํ•˜์ž.

Error

์„œ๋ฒ„ Error๋ฅผ ๋งˆ์ฃผํ–ˆ๋‹ค๋ฉด, ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ํ†ตํ•ด ๋ฌธ์ œ ์›์ธ์„ ์ฐพ์ž.

  • ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ™•์ธ
  • log ํด๋” ํ™•์ธ
  • ๊ทธ ์™ธ ๋ฐฉ๋ฒ•๋“ค

โœจLicense

  • ๋ณธ ํ…œํ”Œ๋ฆฟ์˜ ์†Œ์œ ๊ถŒ์€ ์†Œํ”„ํŠธ์Šคํ€˜์–ด๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์ž๋ฃŒ์— ๋Œ€ํ•œ ์ƒ์—…์  ์ด์šฉ ๋ฐ ๋ฌด๋‹จ ๋ณต์ œ, ๋ฐฐํฌ ๋ฐ ๋ณ€๊ฒฝ์„ ์›์น™์ ์œผ๋กœ ๊ธˆ์ง€ํ•˜๋ฉฐ ์ด๋ฅผ ์œ„๋ฐ˜ํ•  ๋•Œ์—๋Š” ํ˜•์‚ฌ์ฒ˜๋ฒŒ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.