Project/싹틔움

[싹틔움] 04/07 κ°œλ°œμΌμ§€ FeignClient λ„μž…μœΌλ‘œ λΆ„μ‚° μ„œλ²„μ—μ„œμ˜ 인증 문제 ν•΄κ²°

ν•œ33 2025. 4. 7. 18:57

 

πŸ’‘ κ°œμš”

λ©”μΈμ„œλ²„μ™€ μ•Œλ¦Όμ„œλ²„κ°€ λΆ„λ¦¬λœ ν˜„ ꡬ쑰의 μ•Œλ¦Όμ„œλ²„λŠ” λˆ„κ΅¬λ‚˜ λ‹€λ₯Έ μ‚¬λžŒμ˜ μ•Œλ¦Όμ„ 확인할 수 μžˆλ‹€λŠ” 치λͺ…적인 였λ₯˜κ°€ μžˆμ—ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 고민을 λ‹΄μ•˜λ‹€.

 

πŸ’‘ 문제 뢄석

    @GetMapping(value = "/v1/notifications/{userId}/subscribe", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public SseEmitter subscribe(@PathVariable Long userId) {
        SseEmitter emitter = notificationService.subscribe(userId);

 

κΈ°μ‘΄ λ°©μ‹μ—μ„œλŠ” λ‹¨μˆœνžˆ userId 값을 param 으둜 λ°›μ•„μ„œ κ΅¬λ…ν•˜κ³  ν•΄λ‹Ή userId 둜 λ“€μ–΄μ˜€λŠ” μ•Œλ¦Ό 메세지λ₯Ό 확인할 수 μžˆλŠ” ꡬ쑰둜 λ˜μ–΄μžˆμ—ˆλ‹€.

ν•˜μ§€λ§Œ μ΄λŒ€λ‘œλ©΄ 인증과정이 μ—†κΈ° λ•Œλ¬Έμ— λˆ„κ΅¬λ‚˜ λ‹€λ₯Έ μ‚¬λžŒμ˜ μ•Œλ¦Όμ„ 확인할 수 μžˆλ‹€λŠ” 였λ₯˜κ°€ μžˆλ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ λͺ‡ 가지 ν•΄κ²°λ°©μ•ˆμ„ 고민을 ν•΄λ΄€λ‹€.

 

🌱 1. JWT 토큰을 μ „λ‹¬ν•˜κ³  각 μ„œλ²„μ—μ„œ Spring Security λ₯Ό μ΄μš©ν•΄ 인증

 

SSE ꡬ독 μš”μ²­ api λ₯Ό ν˜ΈμΆœν•  λ•Œ JWT λ₯Ό 전달을 ν•˜κ³ , μ•Œλ¦Ό μ„œλ²„μ— μ—­μ‹œ Spring Security 섀정을 톡해 각 각의 μ„œλ²„μ—μ„œ 인증을 λ‹΄λ‹Ήν•˜λ„λ‘ 섀정을 ν•˜λŠ” 것이닀.

ν•˜μ§€λ§Œ ν•„μžλŠ” MSA 방식 λ„μž…μ˜ κ°€μž₯ μ€‘μš”ν•œ ν‚€μ›Œλ“œλŠ” 각 μ„œλ²„λ³„ ν™•μ‹€ν•œ μ—­ν•  뢄담이라고 μƒκ°ν•œλ‹€.

ν˜„μž¬λŠ” 메인 μ„œλ²„μ™€ μ•Œλ¦Ό μ„œλ²„ λ‘˜λ§Œ μžˆμ§€λ§Œ, 이후 μ•Œλ¦Ό μ„œλ²„ 증섀 λ˜λŠ” 타 도메인 μ„œλ²„λ₯Ό λ§Œλ“œλŠ” 것을 μƒκ°ν•œλ‹€λ©΄ νšŒμ› 정보λ₯Ό 뢈러였고 λ˜λŠ” 인증인가 역할을 ν•˜λŠ” μ„œλ²„κ°€ ν™•μ‹€νžˆ 있으면 μ’‹κ² λ‹€λŠ” 생각을 ν–ˆλ‹€.

 

🌱 2. JWT 토큰을 μ „λ‹¬ν•˜λ˜, ν•΄λ‹Ή μ„œλ²„μ—μ„œ λ©”μΈμ„œλ²„λ‘œ 인증을 μš”μ²­ ( Feign Client μ‚¬μš© )

 

μœ„μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ JWT ν† ν°μœΌλ‘œ μ•Œλ¦Ό μ„œλ²„μ— ꡬ독 μš”μ²­μ„ ν•˜λ˜, μ•Œλ¦Ό μ„œλ²„μ—μ„œλŠ” 인증과정을 κ±°μΉ˜μ§€ μ•Šκ³  인증 과정을 메인 μ„œλ²„μ— μ±…μž„μ„ μ „κ°€ν•˜λŠ” 것이닀.

μ΄λ ‡κ²Œ ν–ˆμ„ μ‹œμ— μ•Œλ¦Όμ„œλ²„λŠ” μ•Œλ¦Όμ„ λ³΄λ‚΄λŠ” μ—­ν• λ§Œ μ „λ‹΄ν•˜κ²Œ 되고 λ©”μΈμ„œλ²„μ— κΈ°μ‘΄ Spring Security μ„ΈνŒ…μ΄ 있기 λ•Œλ¬Έμ— JWT Token 을 claim ν•˜λŠ” 과정을 톡해 userId 값을 μ•Œλ¦Ό μ„œλ²„λ‘œ λ°˜ν™˜ν•œλ‹€.

 

ꡬ쑰 :

Feign Client 에 λŒ€ν•΄ 쑰사해 λ³΄μ•˜λ‹€.

https://hanstory33.tistory.com/317

 

Feign Client λ₯Ό λ§Œλ“  Netflix

βœ”οΈ Feign Client λž€?Feign Client λŠ” HTTP μš”μ²­μ„ μΈν„°νŽ˜μ΄μŠ€λ§ŒμœΌλ‘œ 처리λ₯Ό ν•  수 있게 λ„μ™€μ£ΌλŠ” ν΄λΌμ΄μ–ΈνŠΈμ΄λ‹€.Spring Cloud μ—μ„œ μ œκ³΅ν•˜λŠ” @FeignClient μ–΄λ…Έν…Œμ΄μ…˜μ„ μ΄μš©ν•΄μ„œ λ©”μ„œλ“œ 호좜처럼 μ™ΈλΆ€ API λ‚˜

hanstory33.tistory.com