Integration with Feign Client - TheOpenCloudEngine/uEngine-cloud GitHub Wiki
์ฌ๋ฌ ์๋น์ค๋ก ๋๋์ด์ง ๋ง์ดํฌ๋ก ์๋น์ค๋ค์ด ํ๋์ ๊ฑฐ๋ํ ์๋น์ค์ฒ๋ผ ํตํฉ๋๋ ๊ฒ์ Integration ์ด๋ผ๊ณ ํ๋ค.
์ฌ๋ฌ ๋ง์ดํฌ๋ก ์๋น์ค๋ค์ด ์กด์ฌ๋ฅผ ํ๋ ํ๊ฒฝ์์
์ผ์ผ์ด ๋ค๋ฅธ ๋ง์ดํฌ๋ก ์๋น์ค๋ค์ ์ฃผ์๋ฅผ ๋งค๋ฒ ์ฐพ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ฌ์ง์ด ์ฐธ์กฐํ๋ ๋ง์ดํฌ๋ก ์๋น์ค์ uri ํจํด์ด ๋ฐ๋์์ ๊ฒฝ์ฐ, ์๋น์ค ๋ด์ ๋ชจ๋ ์ฐธ์กฐ uri๋ฅผ ์ฐพ์์ ๋ณํํด์ผํ๋ ์ํฉ์ด ๋ฒ์ด์ง ์ ์๋ค.
ํ์ง๋ง Feign Client๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ด ์๊ณ ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค.
Feign Client๋ ๋จ์ํ Interface๋ก์จ๋ง ์กด์ฌ๋ฅผ ํ๋ฉฐ,
Interface์ @FeignClient(name="service_name") ์ด๋
ธํ
์ด์
์ด์ ์ถ๊ฐํ๊ฒ ๋๋ค.
FeignClient๋ Eureka์์ service_name์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ์๋น์ค๋ฅผ ์ฐพ์์ ์๋์ผ๋ก ์ฐ๊ฒฐ์ ํ๋ค.
๋ํ FeignClient์ ๋ฉ์๋๋ค์ @RequestMapping("/uri_path") ์ด๋ ธํ ์ด์ ์ ํตํด ๋ฉ์๋ํธ์ถ์ด ๋๋ฉด ์ ์ธ๋ ์๋น์ค์ uri๋ฅผ ํธ์ถ ํ ์ ์๊ฒ ๋๋ค.
service_name ์๋น์ค์์ /uri_path๋ฅผ ํธ์ถํ๋ค๋ ๋ป์ด๋ค.
์ฆ, ๊ฐ๋ฐ์๋ ์ฌ์ฉํ๊ณ ์ ํ๋ API๊ฐ ์ด๋์ ์๋์ง ๋ก์ปฌ ๋ฉ์๋ ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ๋๋ค.
์ด์ ์์ ๋ฅผ ํตํ์ฌ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ดํด๋ณธ๋ค.
Spring HATEOAS API ์์ SharedCalendarServiceImpl
์ ์ดํด ๋ณธ ๊ฒ์ ๊ธฐ์ตํ ๊ฒ์ด๋ค.
SharedCalendarServiceImpl
์ SharedCalendarService
๋ฅผ implements ํ ๊ฒ์ธ๋ค.
@FeignClient("calendar")
public interface SharedCalendarService {
@RequestMapping(
method = {RequestMethod.GET},
path = {"/calendar/{instructorId}/{date}"}
)
Resources getSchedules(@PathVariable("instructorId") Long var1, @PathVariable("date") String var2);
}
์์ ์ค๋ช
ํ ๋ด์ฉ์ฒ๋ผ SharedCalendarService
๋ interface ์ด๊ณ ,
@FeignClient("calendar") ๋ผ๋ ์ด๋
ธํ
์ด์
์ ๋ถ์๋ค.
๊ทธ๋ฆฌ๊ณ Impl ์์๋ @RequestMapping ์ด ์์ง๋ง ์ฌ๊ธฐ์์๋ @RequestMapping ์ด ์กด์ฌํ๋ค.
์ฌ์ค interface์์ @RequestMapping์ ๋ถ์์ผ๋ฉด Impl์์๋ @RequestMapping์ ๋ถ์ด๋ฉด ์๋๋ค.
๋ค๋ง ์์ ๋ก ํ์ฉํ๊ธฐ ์ํ์ฌ SharedCalendarServiceImpl์๋ @RequestMapping์ ๋ถ์๋ค.
์ด์ ์ด๋ ๊ฒ FeignClient๋ก ์ ์ธํ ์๋น์ค๋ฅผ ๋ค๋ฅธ ๋ง์ดํฌ๋ก์๋น์ค์์ ํธ์ถํ์ฌ ๋ณด๊ฒ ๋ค.
๋ณดํต REST ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ์๋น์ค๋ฅผ APIํ์์ผ๋ก call์ ํ์ฌ return data๋ก ์์
ํ๋ ๊ฒ์ด
์ต์ ํ ์๋ ์์ง๋ง, FeignClient ๋ง์ ์ฅ์ ๋ ์๋ค๋ ๊ฒ์ ์๋ ์ฝ๋๋ฅผ ํตํ์ฌ ์ ์ ์๋ค.
@Entity
public class Clazz{
// more
private void checkAvailabilityAndSetInstructor() {
if(getInstructor()!=null){
SharedCalendarService sharedCalendarService =
Application.applicationContext.getBean(SharedCalendarService.class);
for(ClazzDay clazzDay : getClazzDays()){
ResourceSupport schedules =
sharedCalendarService.getSchedules(getInstructor().getId(), clazzDay.getDate()
.toString());
// more
}
}
}
}
SharedCalendarService sharedCalendarService = Application.applicationContext.getBean(SharedCalendarService.class);
๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก
๋ค๋ฅธ ์๋ฒ์ ์๋ํ๊ณ ์๋ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ๊ฐ์ ธ์์,
sharedCalendarService.getSchedules
๋ฅผ local ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ ๊ฒ์ ๋ณผ ์ ์๋ค.