이전 페이지: root project 생성
다음 페이지: user service 생성
개요
- 각 서비스들이 사용하는 config 파일들을 공통으로 관리하는 server
- 각 서비스들은 config server의 설정을 가져다 쓰는 config client
- spring config server를 사용하여 구현하며, default로 git 레파지토리에서 config 파일을 가져오기 때문에 git 에 yaml 파일을 저장
- ms1-dev.yml 의 형태를 git에 저장한다. (ms1: 서비스, dev: 환경)
- 관련 issue github에 생성하고, feature 브랜치 생성 & develop 파일 pull 받기
private Repository 생성
- 나만 봐야하는 설정 파일 이므로 private으로 생성
- 우선 대표적으로 user와 product 서비스에 적용할 yaml 파일 생성
- user-dev.yml과 product-dev 에는 우선 간단하게 port 정보만 작성
# 예시
server:
port: 8081
private repository 접근을 위한 RSA 암호 생성(환경: mac os)
- 터미널에서 rsa 암호화키 생성
ssh-keygen -m PEM -t rsa -b 4096 -C
- ~/.ssh/ 폴더안에 개인키와 공개키가 생성
- finder에서 해당 폴더에 접근하는 방법은 다양함 (terminal에서 접근하는 방법은 쉬우니까 생략)
- 필자는 User 폴더에서 command + ↑ 를 통해서 ~/ 경로 까지 이동한 후 .ssh 폴더에 접근
- mac 에서 숨김 파일 표시 여부 단축키 : command + shift + .
- 들어가보면 개인키와 공개키가 있음.
- pub가 붙은 것이 공개키
- config 설정을 저장해둔 private repository로 이동
- 레파지토리 설정 → Deploy Keys → Add deploy Key → key-1 이라는 이름으로 만들고 그 안에 공개키 복붙해서 넣음
config server 프로젝트 생성
- spring initializr 로 config-server 프로젝트 생성
- 주의할점 : https://back-jong.tistory.com/11 에서 생성한 root project 안에서 생성해야함.
- 굳이 root project 안에서 작업을 안하더라도 나중에 생성된 config-server 프로젝트를 root project 안에 복붙하면 됨.
- project 정보는 다음과 같음
- config server와 설정 정보에 대한 보안을 위해 security 의존성 추가 필요
- config server의 application.yml 파일 설정
spring:
application:
name: keupang-config-server
cloud:
config:
server:
git:
uri: git@github.com:JongHak19/keupang-cloud-config.git
ignoreLocalSshSettings: true
private-key: ${private_key}
server:
port: 9000
- private key는 .env 파일에 넣어두고 위와 같이 변수로 접근
- 방법은 아래에 기술
- root project 에다가 바로 .env 파일을 생성함.
- 개인키 값은 아까 접근했던 .ssh 폴더의 id_rsa를 열면 있음.
- 바로 복붙하면 안됨.
- env 파일에서는 기본적으로 key=value 형식이기 때문에 비밀키와 같이 여러 줄로 구성된 PEM 형식을 제대로 파싱하지 못함.
- 터미널에서 ~/.ssh 폴더로 접근
cd ~/.ssh
- 터미널에 다음과 같이 입력하여 base 64 형태로 출력
- 기존 개인키 변경 안되니까 신경안써도 됨.
cat id_rsa | base64
- 출력된 결과는 base64 형태로 한줄로 인코딩 됨
- "한 줄" 이기 때문에 이제 .env 파일에서 값 자리에 넣을 수 있음.
- 출력된 결과
- .env 파일에 출력된 거를 전부 복사해서 .env 파일에 저장
- 무조건 "" 안에 넣어야함.
private_key= "개인키"
- config-server에서 .env 의 변수를 불러오는 작업 필요
public class KeupangConfigServerApplication {
public static void main(String[] args) {
Dotenv dotenv = Dotenv.configure()
.directory("./") // .env 파일 경로 설정
.load();
// Base64 복호화
String base64Key = dotenv.get("private_key");
String privateKey = new String(Base64.getDecoder().decode(base64Key));
System.setProperty("private_key", privateKey);
SpringApplication.run(KeupangConfigServerApplication.class, args);
}
}
- 잘보면 root 프로젝트안에 바로 만든 .env 파일을 root 안의 configserver 프로젝트 안에서 접근하는데 경로가 ./ 임.
- 프로젝트 제일 최상단으로 자동으로 찾아가는 걸 확인
- .env에 base64 로 인코딩 하여 저장 했었음.
- 사용하기 위해서 다시 인코딩 필수
- 인코딩 된 개인키 값을 시스템 속성값에 private_key라는 이름으로 추가
- 그러면 아까 application.yml에서 ${private_key}로 썼던 거에 자동으로 개인키가 들어가게 되고 github 에 접근할 권한이 생김.
build.gradle 통합
은 아직 진행 안함.
모듈이 하나라서..ㅋㅋ
보안을 위한 spring security 설정
다른 사용자가 혹시나 설정 파일에 접근할 가능성을 염두에 두고 security 설정
security config 클래스 생성
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.csrf(AbstractHttpConfigurer::disable);
http
.authorizeHttpRequests((auth)->auth.anyRequest().authenticated());
http
.httpBasic(Customizer.withDefaults());
return http.build();
}
@Bean
public UserDetailsService userDetailsService(){
UserDetails user1 = User.builder()
.username("username")
.password(bCryptPasswordEncoder().encode("password"))
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user1);
}
}
마무리
config-server 실행
- 9000 포트로 설정해서 localhost:9000/user/dev 로 접근
- github에 user-dev.yml 파일에 접근해서 안의 소스들을 가져옴.
- user는 나중에 생성할 user 서비스를 나타냄
- user 서비스의 name을 user로 지정하면 나중에 이 경로로 접근해서 값 가져옴
결과
git push
- feature 브랜치에서 add, commit 하고 push
- develop 으로 PR 한 뒤에 feature 브랜치 삭제
'MSA' 카테고리의 다른 글
[KEUPANG] API Gateway 생성 (2) | 2024.11.26 |
---|---|
[KEUPANG] EurekaClient 설정 (0) | 2024.11.26 |
[KEUPANG] Eureka Server 생성 (0) | 2024.11.25 |
[KEUPANG] User service project 생성 (0) | 2024.11.25 |
[KEUPANG] MSA Root Project 생성 (0) | 2024.11.25 |