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 ํ์ผ ๊ด๋ฆฌ
์ค์ ํ์ผ์ ์ธ๋ถ ๋ ธ์ถ์ ๋ง๊ณ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ
- ์ค์ ํ์ผ์ .gitignore์ ์ถ๊ฐํ์ฌ ๋ฐ๋ก ๊ด๋ฆฌํ๋ค.
- ๋ฐฐํฌ์ ํ์ํ ์ค์ ํ์ผ์ ์ง์ ์ถ๊ฐํด์ผ ํ๋ค.
- ์ค์ ํ์ผ์ Private Repository์ Git Submodules ๋ก ์ฌ์ฉ.
- Private Repository๋ผ๊ณ ํด๋ ์ค์ ๊ฐ๋ค์ด ์ํธํ๋์ด์๋ ๊ฒ์ด ์๋๊ธฐ์ ๋ ธ์ถ ์ ์ทจ์ฝ.
- ์ค์ ํ์ผ ์ํธํ : Java์ Jasypt(Java Simplified Encrypotion) ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ์ผ๋ค์ ์ํธํ
- ์ํธํ ๊ฐ์ ์ถ๊ฐ(๋ณ๋ ๊ด๋ฆฌ ๋น์ฉ ๋ฐ์)
- ์ธ๋ถ ์๋น์ค ์ฐ๋(๋ณ๋ Config Server ์ฌ์ฉ)
- ๋ณ๋์ Config๋ฅผ ๊ด๋ฆฌํ๋ Server๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ์ Config server์ ํต์ ํ์ฌ ์ค์ ํ์ผ๋ค์ ๊ฐ์ ธ์จ๋ค. Spring Cloud Config ๋๋ Aws System Manager, AppConfig ๋ฑ์ ์ฌ์ฉ
- ๋ณ๋์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ฉฐ ์ธ๋ถ ์๋น์ค ๋น์ฉ์ด ๋ฐ์ํ๋ค.