LG CNS 부트캠프 학습일지 48일차
학습 내용
- 대칭키와 비대칭키 적용하기
- 마이크로서비스 간에 통신하기
개요
오늘 내용은 조금 어려웠다. 서비스를 잘게 나눠서 서비스를 더 잘 제공할 수 있게 만들자는 것이 MSA의 목적인데, MSA가 장점만이 있는게 아니라는 것을 체험할 수 있었다. 가장 큰 문제는 관리해야하는 서버가 너무 많다는 것이다. 세 개 만 되도 부담스러워지기 시작했다. 익숙해지면 괜찮을지 모르겠다.
대칭키와 비대칭키 적용하기
암호화에 대한 이야기다. Spring Config Server를 사용하기 때문에 필요해진다. Spring Config Server가 원격 깃 저장소에서 설정값을 읽어들이고 그 설정값에는 공개하기 민감한 정보가 들어있다면 그 정보를 암호화시키는 것을 고려할 수 밖에 없다.
Spring Config Server는 /encrypt와 /decrypt 엔드포인트를 제공한다. 이것을 사용하면 비밀번호를 암호화해서 원격 깃 저장소에 올릴 수 있다.
1
2
3
some-information:
username: my-user
password: '{cipher}some-encrypted-random-long-string'
{cipher}가 앞에 붙어있어야 뒤에 있는 문자열을 복호화시킨다. Spring Config Server가 이것을 제대로 복호화했는지 확인하기 위해 http://localhost:8083/user-service/default 와 같은 프로파일을 엔드포인트로해서 접근하면 된다.
마이크로 서비스 간에 통신하기
실습 시간에 진행한 내용처럼 전자상거래 서비스를 예로 들어보자. 사용자 정보를 관리하는 서비스에서 사용자의 주문 내역까지 포함한 정보를 보낸다고 해보자. 그리고 그 주문 정보는 주문을 관리하는 별도의 서비스가 있다. 그렇다면 사용자 서비스는 주문 서비스와 통신해서 필요한 정보를 받아와야 한다. 아직 사용하지는 않았지만 OpenFeign이라는 솔류션이 있는데, 오늘은 RestTemplate이라는 것을 사용해서 구현했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class UserServiceImpl implements UserService {
RestTemplate restTemplate;
@Override
public UserDto getUserByUserId(String userId) {
...
String orderUrl = String.format(env.getProperty("order-service.url"), userId);
ResponseEntity<List<ResponseOrder>> orderListResponse =
restTemplate.exchange(orderUrl, HttpMethod.GET, null, ...);
List<ResponseOrder> orderList = orderListResponse.getBody();
userDto.setOrders(orderList);
return userDto;
}
}
서버가 서로 직접적으로 통신한다면 RestTemplate이나 OpenFeign을 사용해야 하지만, Kafka와 같은 메세지 시스템을 사용해야 한다. Kafka는 나중에 배우게 될 내용 같다.
Comments powered by Disqus.