0815 ~ 0824


# 0815 ~ 0824

# 0820 - ํ™œ์„ฑ ํ”„๋กœํŒŒ์ผ(Profile)์˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ @Profile๊ณผ @ActiveProfiles

# ํ™œ์„ฑ ํ”„๋กœํŒŒ์ผ๊ณผ @Profile, @ActiveProfiles

# [ ํ™˜๊ฒฝ์˜ ๋ถ„๋ฆฌ ]

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ, ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์•ŒํŒŒ ํ™˜๊ฒฝ, ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋งž์ถฐ๋‘๊ณ  QA ๋“ฑ์„ ์ง„ํ–‰ํ•˜๋Š” ์Šคํ…Œ์ด์ง€ ํ™˜๊ฒฝ, ์‹ค์ œ ์„œ๋น„์Šค๊ฐ€ ์šด์˜๋˜๋Š” ์šด์˜ ํ™˜๊ฒฝ ๋“ฑ์ด ์žˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ๋“ค์— ๋งž๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋นˆ ๋˜๋Š” ํ”„๋กœํผํ‹ฐ๋“ค์„ ์ •์˜ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ๋ฐœ์„ ์œ„ํ•ด์„œ๋Š” ๋กœ์ปฌ ๋˜๋Š” ๋‚ด์žฅ ์บ์‹œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ ์šด์˜์„ ์œ„ํ•ด์„œ๋Š” ์™ธ๋ถ€ ์บ์‹œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ์šฐ์ด๋‹ค.
Spring์€ 3.1๋ถ€ํ„ฐ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋นˆ ์ •๋ณด๊ฐ€ ๋‹ฌ๋ผ์ ธ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋Œ€์‹  ๋นˆ ๊ตฌ์„ฑ์ด ๋‹ฌ๋ผ์ง€๋Š” ๋‚ด์šฉ์„ ํ”„๋กœํŒŒ์ผ๋กœ ์ •์˜ํ•ด์„œ ๋งŒ๋“ค์–ด๋‘๊ณ , ์‹คํ–‰ ์‹œ์ ์— ์–ด๋Š ํ”„๋กœํŒŒ์ผ์˜ ๋นˆ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๊ณ  ์žˆ๋‹ค. ์ฆ‰, ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋นˆ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ˜์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด์™€ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์ด @Profile๊ณผ @ActiveProfile ์ด๋‹ค.

# [ ํ™œ์„ฑ ํ”„๋กœํŒŒ์ผ์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ @ActiveProfiles ์–ด๋…ธํ…Œ์ด์…˜ ]

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

-Dspring.profiles.active=dev

๊ทธ๋ฆฌ๊ณ  JVM์ด ์•„๋‹Œ ์Šคํ”„๋ง์—์„œ ํ˜„์žฌ์˜ ํ”„๋กœํŒŒ์ผ(ํ™˜๊ฒฝ)์„ ์ง€์ •ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด @ActiveProfiles ์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ํ˜„์žฌ์˜ ํ”„๋กœํŒŒ์ผ์„ test๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด @ActiveProfiles๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ํ”„๋กœํŒŒ์ผ๋กœ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

@ActiveProfiles("test")
public class UnitTestConfig {
    ...
}

๋งŒ์•ฝ ํ™œ์„ฑ ํ”„๋กœํŒŒ์ผ์ด test๋ผ๋ฉด test ํ”„๋กœํŒŒ์ผ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํ”„๋กœํŒŒ์ผ์„ ์œ„ํ•ด ๋“ฑ๋ก๋œ ๋นˆ๋“ค์ด๋‚˜ ์„ค์ • ํŒŒ์ผ๋“ค์€ ๋ชจ๋‘ ๋ฌด์‹œ(๋น„ํ™œ์„ฑํ™”) ๋œ๋‹ค.

# [ ํŠน์ • ํ”„๋กœํŒŒ์ผ์— ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•œ @Profile ์–ด๋…ธํ…Œ์ด์…˜ ]

์˜ˆ๋ฅผ ๋“ค์–ด Redis ์บ์‹œ ์„ค์ •์€ ์šด์˜ ํ™˜๊ฒฝ(prod)์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ ํ•ด๋‹น ์„ค์ • ํด๋ž˜์Šค๊ฐ€ ์›ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋งŒ ๋“ฑ๋ก(ํ™œ์„ฑํ™”)๋˜๋„๋ก ์„ค์ •์„ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด @Profile ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

@Profile("prod")
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60 * 60 * 24 * 30)
public class RedisConfig extends AbstractHttpSessionApplicationInitializer {

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(host, port);
        return new LettuceConnectionFactory(redisStandaloneConfiguration);
    }

    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        return serializer;
    }

}

์œ„์™€ ๊ฐ™์€ ์„ค์ • ํด๋ž˜์Šค๋Š” @Profile์ด prod๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„ใ…‡์žฌ์˜ ํ”„๋กœํŒŒ์ผ(ํ™˜๊ฒฝ)์ด prod์ธ ๊ฒฝ์šฐ์—๋งŒ ํ™œ์„ฑํ™”๋œ๋‹ค. ๋งŒ์•ฝ prod๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด !prod์™€ ๊ฐ™์ด ์„ค์ •ํ• ์ˆ˜๋„ ์žˆ๋‹ค


# 0821 - Credential ํŒŒ์ผ ๊ด€๋ฆฌ

์„ค์ •ํŒŒ์ผ์˜ ์™ธ๋ถ€ ๋…ธ์ถœ์„ ๋ง‰๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์„ค์ •ํŒŒ์ผ์„ .gitignore์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๋ฐฐํฌ์‹œ ํ•„์š”ํ•œ ์„ค์ • ํŒŒ์ผ์„ ์ง์ ‘ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.
  2. ์„ค์ •ํŒŒ์ผ์„ Private Repository์˜ Git Submodules ๋กœ ์‚ฌ์šฉ.
    • Private Repository๋ผ๊ณ  ํ•ด๋„ ์„ค์ • ๊ฐ’๋“ค์ด ์•”ํ˜ธํ™”๋˜์–ด์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ์— ๋…ธ์ถœ ์‹œ ์ทจ์•ฝ.
  3. ์„ค์ •ํŒŒ์ผ ์•”ํ˜ธํ™” : Java์˜ Jasypt(Java Simplified Encrypotion) ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ • ํŒŒ์ผ๋“ค์„ ์•”ํ˜ธํ™”
    • ์•”ํ˜ธํ™” ๊ฐ’์„ ์ถ”๊ฐ€(๋ณ„๋„ ๊ด€๋ฆฌ ๋น„์šฉ ๋ฐœ์ƒ)
  4. ์™ธ๋ถ€ ์„œ๋น„์Šค ์—ฐ๋™(๋ณ„๋„ Config Server ์‚ฌ์šฉ)
    • ๋ณ„๋„์˜ Config๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Server๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ์‹œ Config server์™€ ํ†ต์‹ ํ•˜์—ฌ ์„ค์ • ํŒŒ์ผ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค. Spring Cloud Config ๋˜๋Š” Aws System Manager, AppConfig ๋“ฑ์„ ์‚ฌ์šฉ
    • ๋ณ„๋„์˜ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์™ธ๋ถ€ ์„œ๋น„์Šค ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.
Last update: September 13, 2022 21:44
Contributors: ahnjs