Published on

문제는 항상 괜찮겠지 하는 부분에서 발생한다

Authors
  • avatar
    Name
    손예지(Liv)

문제상황

이번 프로젝트에서 저는 배송을 담당했는데, 주문과 하나의 트랜잭션으로 연결되어 있었습니다. 주문, 배송 개발 담당자가 달랐고 개발 진행 중에는 연동 테스트가 불가능한 상황이어서 이후에 테스트 해야 하는 상황이었습니다. 주문 쪽에서 주문 생성 요청을 보냈을 때 아래와 같은 오류가 발생했습니다.

c.s.l.d.l.e.GlobalExceptionHandler       : FeignException occurred : status = 500 message = [500] during [GET] to [http://company-service/companies/] [CompanyServiceClient#getCompany(UUID)]: [서버 내부 오류가 발생했습니다.]
org.springframework.web.servlet.resource.NoResourceFoundException: No static resource companies.

상세 오류 내역을 살펴보면 'No static resource' 즉, companies이라는 정적 자원을 찾았지만 찾지 못해 오류가 발생했다는 것을 의미합니다. 전체 프로젝트에서 companies라는 이름을 가진 정적 자원 디렉터리는 존재하지 않았기 때문에 업체 서비스를 조회하는 과정에서 문제가 생겼으리라 판단했습니다.

해결방법

배송서비스에서는 업체ID 값을 받아서 업체 정보를 조회합니다. 이때 Feign Client를 통해 업체조회 API를 호출합니다.

import java.util.UUID;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "company-service")
public interface CompanyServiceClient {

  @GetMapping("/companies/{companyId}")
  CompanyClientResponse getCompany(@PathVariable UUID companyId);
}

배송 서비스에서는 수령업체, 공급업체 조회를 위해 각각 한 번씩 총 2번 조회를 하고 있었는데, 호출 횟수가 3번이어서 여기서 이상한 점을 발견하게 되었습니다. 전체 서비스 중 companyId 값으로 조회하고 있는 부분을 찾다 보니, 주문에서도 업체 API를 호출하는 부분이 있었고 경로 매핑이 잘못되어 있다는 것을 알게 되었습니다. 경로매핑을 수정하고 주문에서 호출하는 서비스 로직을 함께 수정한 후 값이 정상적으로 출력되는 점을 알게 되었습니다.

2024-12-18T03:24:16.960+09:00  INFO 4640 --- [company-service] [io-19097-exec-1] c.s.l.c.p.controller.CompanyController   : Received GET request for company ID: fa2578b4-986f-4c9e-9e22-8a615760c41a
2024-12-18T03:24:17.062+09:00  INFO 4640 --- [company-service] [io-19097-exec-1] c.s.l.c.a.service.CompanyService         : Received request to get company with ID: fa2578b4-986f-4c9e-9e22-8a615760c41a
2024-12-18T03:24:17.081+09:00  INFO 4640 --- [company-service] [io-19097-exec-2] c.s.l.c.p.controller.CompanyController   : Received GET request for company ID: 9fa49404-7b8a-4ed5-95c3-5449e94c7f05
2024-12-18T03:24:17.084+09:00  INFO 4640 --- [company-service] [io-19097-exec-2] c.s.l.c.a.service.CompanyService         : Received request to get company with ID: 9fa49404-7b8a-4ed5-95c3-5449e94c7f05
2024-12-18T03:24:17.297+09:00 ERROR 4640 --- [company-service] [io-19097-exec-3] c.s.l.c.l.e.GlobalExceptionHandler       : Unexpected Exception occurred

org.springframework.web.servlet.resource.NoResourceFoundException: No static resource companies.

알게된점

경로 매핑 부분은 이전에 발견했던 부분이었는데 확인이 이미 되었던 부분이라고 해서 그냥 지나갔던 적이 있습니다. 누군가의 잘잘못을 따지기보다 발견했는데도 다시 한 번 확인하지 않았던 저에게도 책임이 있다는 생각이 들었습니다. 사전협의 시 충분한 논의를 했다고 생각했지만, 상대방과 같은 이해를 하고 있는지는 중간에 확인하지 않고 각자 작업을 진행했습니다. 다른 사람과 소통하기 어려웠던 제 마음이 반영된 것으로 생각합니다. 이 부분을 개선하기 위해서는 절대적으로 상대방과 소통하는 시간을 확보하는 게 중요하다는 생각이 들어, 앞으로 협업하게 될 때 내용을 모두가 볼 수 있게 정리하는 습관을 들이는 것이 좋을 것 같습니다.

처음에 resources 부분에 집중해서 시간을 많이 쏟았는데, 처음부터 로그를 찍어봤으면 실제로 호출이 되는지 확인할 수 있었고 잘못 호출되는 부분도 더 빠르게 확인 할 수 있었을 것 같습니다. 디버깅도 중요하지만 디버깅을 효과적인 방향으로 하는 것도 중요하다는 것을 알게되었습니다.