MSA๋ฅผ ๊ตฌ์ฑํ๋ค๋ณด๋ฉด service๊ฐ์ ํต์ ์ด ํ์ํ ๋๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์ ์ ์ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ๋๋ user-service์์ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋๊ฒ ์๋๋ผ order-service์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ user-service์์ ๋ฐํํด์ค์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. ์ด๋ด๋ Microserivce๊ฐ ํต์ ์ด ์๊ธฐ๋๋ฐ ์ด ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ํ์ธํด๋ณด์. ์ด๋ฒ์๋ java์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ RestTemplate๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
...
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
RestTemplate์ ๋ฐํํ๋ bean์ ๋ฑ๋กํด์ฃผ๊ณ
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
private final UserRepository userRepository;
private final BCryptPasswordEncoder pwdEncoder;
private final RestTemplate restTemplate;
private final Environment env;
...
@Override
public UserDto getUserByUserId(String userId) {
UserEntity userEntity = userRepository.findByUserId(userId);
if(userEntity == null) throw new UsernameNotFoundException("user name not found!");
UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
// List<ResponseOrder> orderList = new ArrayList<>(); //์ด์ ์ ๋น ๋ฐฐ์ด์ ๋ฐํํ๋ ๊ฐ
/* Using as RestTemplate */
String orderUrl = String.format(env.getProperty("order_service.url"), userId); //(1)
ResponseEntity<List<ResponseOrder>> orderListResponse = //(2)
restTemplate.exchange(orderUrl, HttpMethod.GET, null, new ParameterizedTypeReference<List<ResponseOrder>>() {
});
List<ResponseOrder> orderList = orderListResponse.getBody(); //(3)
userDto.setOrders(orderList);
return userDto;
}
}
๊ธฐ์กด์ ๋น ๋ฐฐ์ด์ ๋ฃ์ด์ ๋ฐํํ๋ ์ฝ๋๋ฅผ ์ ์ฝ๋์ ๊ฐ์ด ์์ ํด์ฃผ์ด์ ์ฌ์ฉํ๋ค.
(1) url๊ฐ์ ํ๊ฒฝ๋ณ์ ๊ฐ์ผ๋ก ๋ฐ์์ค๋ ๊ฒ์ผ๋ก ์ค์ ๊ฐ์ user-service.yml์ ์ค์ ํด๋์๋ค.
spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password: '{cipher}AQAQZKGZrGe0uaQfpDk90mzuSy8WrSHHU5S/OCTB0g9NUTSrG7x0p6qnhXb/SPHSm/dm/TjWp+BpyYzj+w7tr8uTpEkSTuvNCWPtDM813R6J7SbO2DWAccwiNp4ZoGc4KLxB2QbLTZeQxEvRPFOKUqKLkSMQQQPh+2Pxrk0QhTSbbPRIP6hmfTDQgHBjL4FkZTYaQSo6/rRDIUJdBoo248GjiBw6FYXLGQn2DgukNiuBZJlCHac7RW4Z3ZBBMV2jIn/dCjS1yJrQjKfRmK4ZRZ/39+5+If+leMwRIgAr/u3J7TeCMKofJOJc23wt+JILb30ap2f+is7Nqgmyp3yvTQM4PVO/wPlf2ewRyhbYWSB7cY7+QPGBFnMpo+D8to7Dzlg=' token: expiration_time: 86400000 secret: '{cipher}AQBz0/LWzW++38OSlEhkxwNSROmThDnC8EqAXqFlQSJy0dAMBYByPuJMeYExEGKhazdH8NWNlAA1Dn1iMCTyQF2AdwUtvtAE2ieyJ/gEv/fJ89rOFAskWw8Gzpp5zLOqqh3JocnTbOwgvcsEs8AtnesUthoHJ+/5f1ii5weBYj7ymqo4PW5Q1uSXY55eVHUZIYhreb1Dn5J9wkTaBTTTSjWJNppzAPZsFSvc8n9SgewWqLRIzoS+BNIL2ctuWrfpTyu/ZNrxiuAKezGXarOhg1k/6IWE/H3lCwZdH5a9EpwTcHTOqTH5fYUUVYxP5EtiD1ZgPN1rpPLXeLtULDCNSWoUyxx5fcbqc+BGUXX6/xtW6gViV2+vqStBdSEWlyh7xu0=' order_service: url: http://127.0.0.1:8000/order-service/%s/orders
(2) restTemplate์ exchange method๋ฅผ ์ฌ์ฉํ์ฌ url๋ก ์์ฒญํ๋ ๋ฐฉ๋ฒ์ด๋ค.
exchange(url, method, parameter, response type)์์๋ก ๋ฃ๋๋ค.
(3) getBody()๋ฅผ ํตํด ๋ฐํ๋ฐ์ ๋ฐ์ดํฐ์์ body๋ฅผ ๊บผ๋ด์์ orderList ๋ฐฐ์ด์ ๋ด๋๋ค.
๋ก๊ทธ์ธํ ์ ์ ID๋ก ์ฃผ๋ฌธ์ ํ๋ ์์ฑํ๊ณ
์์ฒญํ๋ฉด
order-service
์์ ์ ์์ ์ผ๋ก ์ฃผ๋ฌธ ๋ด์ญ์ ๊ฐ์ ธ์์ user-service
์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฃผ๋ฌธ๋ด์ญ์ ์ ์์ ์ผ๋ก ๊ฐ์ ธ์จ๊ฒ์ ํ์ธํ ์ ์๋ค.
userid๊ฐ์ด ๋ณ๊ฒฝ๋์๋๋ฐ ์ค๊ฐ์ ์ฝ๋์ ๋ฌธ์ ๊ฐ ์์ด์ ์์ ํ๊ณ ์ฌ์คํ ํ๋๋ผ ๋ณ๊ฒฝ๋์๋ค.
์ ๋ฐฉ๋ฒ์ ๋ฐ๋ผํ๋ค๋ณด๋ฉด yml์ ์ค์ ๋ด์ฉ์ url์ด ์ค์ ์๋ฒ์ ip๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค ๋ณ๊ฒฝํด์ฃผ์ด์ผํ๋ ๋จ์ ์ด ์๋ค. ์ด ์ ์ ์๋น์ค ๋ช ์ผ๋ก ์ฌ์ฉํด๋ ์ ์ ์๋๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ
order_service:
url: http://ORDER-SERVICE/order-service/%s/orders
#url: http://127.0.0.1:8000/order-service/%s/orders
๊ธฐ์กด url ์ ๋ณด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํด์ฃผ๊ณ
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
//password encode๋ฅผ ์ฌ์ฉ์ ์ํด bean์ผ๋ก ๋ฑ๋ก
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
๊ธฐ์กด์ ์ฌ์ฉํ๊ณ ์๋ user-service์ RestTemplate์ @LoadBalanced
๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
๊ทธ ํ์ ๋์ผํ๊ฒ ์ฃผ๋ฌธํ๊ณ user ์ ๋ณด๋ฅผ ๋ถ๋ฌ์๋ณด๋ฉด
order_service.url
์ ๊ฐ์ด ip๊ฐ์ด ์๋ microservice ์ด๋ฆ ๊ฐ์ผ๋ก ๋ณ๊ฒฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฒฐ๊ณผ๋ ๋์ผํ๊ฒ ์ ๋์๋ค!