๋ฉ‹์‚ฌ Backend Plus 26์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 11์›” 27์ผ

์˜ค๋Š˜๋„ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๊ณ , ์˜ค์ „์—๋Š” ํŒ€์›๋“ค๊ณผ develop ๋ธŒ๋žœ์น˜๋กœ merge (๋ณ‘ํ•ฉ) ์„ ์ง„ํ–‰ํ•˜์˜€๊ณ  ์ฝ”๋“œ ๋ฆฌ๋ทฐ์ค‘ ๋ฐฐ์› ๋˜ ๊ฒƒ ์„ ์ •๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜คํ›„์—๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ inmemory ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์ธ H2 ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์ ์šฉํ•˜๋ฉฐ, yml ํ™˜๊ฒฝ ์„ค์ •์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

inmemory ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ด์—ฌ์„œ ๋„์ปค์— H2 ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์•ˆ๋„์›Œ๋„ (์„ค์น˜) ๋˜๋Š”๊ฒƒ ๊ฐ™๋‹ค.
โžก ํ™•์‹คํ•˜์ง€ ์•Š์Œ (Maria ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋„์ปค๋กœ ์‹คํ–‰์ค‘)

์˜ค์ „

ํŒ€์›๊ณผ์˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋ฉด์„œ ๋ฉ”์†Œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ (๋งค๊ฐœ๋ณ€์ˆ˜)์˜ ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ธ ๋ฉ”์†Œ๋“œ๋Š” ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ธฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Response ์ƒ์„ฑ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ 3๊ฐœ๊ฐ€ ์‚ฌ์šฉ ๋˜๊ฒŒ ๋˜๋Š” ์ฝ”๋“œ์˜€๋‹ค. 3๊ฐœ ์ด์ƒ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์ˆœ์ˆ˜ ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์œผ๋ฉด, ๋ฉ”์†Œ๋“œ๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐœ์–ด ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌ ํ•˜์˜€๊ฒ ์ง€๋งŒ, Spring Boot ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ž„์œผ๋กœ, ๋นŒ๋” ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@Getter
@Setter
public class Response {
    private String phoneNumber;
    private String state;
    private String city;
    
     public Response(String phoneNumber, String state, String city) {
        this.phoneNumber = phoneNumber;
        this.state = state;
        this.city = city;
    }
}
  • ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด @Builder ์–ด๋…ธํ…Œ์ด์…˜๊ณผ @Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ํ•„๋“œ์˜ ๊ฐ’์„ ์ฃผ์ž… ํ• ์ˆ˜ ์žˆ๋Š” @AllArgsConstructor ์–ด๋…ธํ…Œ์ด์…˜์ด ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Response {
    private String phoneNumber;
    private String state;
    private String city;
}

์˜คํ›„

์ฒ˜์Œ์œผ๋กœ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

dependencies {
    testImplementation 'com.h2database:h2'
}
  • root? (๊ธฐ๋ณธ) yml ์„ธํŒ…์„ ์ฒ˜์Œ์—๋Š” ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด
## spring:
##	spring: ์œผ๋กœ ํ•ด์•ผ ํ™˜๊ฒฝ ์„ค์ • ์ ์šฉ์ด ๋˜๋Š”๋ฐ ์ด์œ ๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค..

spring:
  spring:
    config:
      activate:
        on-profile: local
  profiles:
    active:
    include: secret

## test์šฉ yml ํ™˜๊ฒฝ ์„ค์ •๊ณผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์„ 
---
spring:
  config:
    activate:
      on-profile: test
  profiles:
    active:
    include: secret
  datasource:
    jdbc-url: '${test.db.url}'
    driver-class-name: org.h2.Driver
    username: '${test.db.username}'
    password: '${test.db.password}'

~~ include: secret ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ secret.yml ์„ค์ •์„ ์ธ์‹์„ ๋ชปํ•˜๋Š” ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์ด ์ƒ๊ฒผ๋‹ค. (์ด ๋ถ€๋ถ„์—์„œ ๋ช‡์‹œ๊ฐ„ ์”€)

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‹ค๋ฅธ yml ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ ์ด์˜€๋‹ค.

  • ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด yml ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.
  • test.yml,
    on-profile : ์„ ์ž‘์„ฑํ•˜๋ฉด ๋ถ„๋ฆฌ ๋˜์–ด ๋งคํ•‘์ด ๋œ๋‹ค.
  • secret.yml์— h2 ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ๋˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ ๋งคํ•‘ ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€