inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[백엔드 모의면접] 트랜잭션 안에서 외부 API를 호출하면 어떻게 될까?

약풍
1

안녕하세요.
인프랩에서 모의면접 서비스를 개발/운영하고 있는 약풍이라고 해요.

일주일의 절반이 지난 목요일입니다.
"물컵에 물이 절반이나 남았네"라고 생각할 수도 있지만, "벌써 물컵의 물을 반이나 먹었네!"라고 생각할 수도 있어요.

이 글을 읽으시는 분들께, 목요일도 화이팅입니다 🚀

 

오늘의 백엔드 질문

하나의 트랜잭션 안에서 결제 요청이나 메일 발송 같은 외부 API를 호출하는 코드가 있다면, 어떤 문제가 생길 수 있을까요?

주문, 예약, 알림처럼 외부 연동이 들어간 프로젝트를 이력서에 썼다면 자주 이어지는 질문이에요.

@Transactional을 메서드 위에 붙이고 그 안에서 외부 호출까지 같이 하는 코드는 실제로 굉장히 흔하게 보게 돼요.

이 질문은 단순히 프레임워크 사용법을 아는지가 아니라, 트랜잭션이 붙잡고 있는 자원이 무엇이고 그 시간이 길어지면 서비스가 어떻게 무너지는지를 그려볼 수 있는지 보는 질문이에요.

 

답변 키포인트

 

응답 속도만이 문제인가

이 질문에서 "외부 API가 느리면 응답이 느려진다"까지만 말하면 아쉬운 답변이에요.

한 요청이 커넥션을 점유한 채로 기다리면, 풀에 남은 커넥션이 하나씩 사라지고, 결국 그 API와 아무 상관 없는 조회 요청까지 커넥션을 못 받아 전체 장애로 번지거든요.

DB 작업을 먼저 끝내고 커밋한 뒤에 외부 호출을 하는 구조로 바꿀 수 있는지,
그리고 외부 호출은 성공했는데 DB가 롤백된 경우처럼 두 시스템의 상태가 갈라지는 지점을 어떻게 맞출지까지 설명할 수 있게 준비하는 게 좋아요.

 

면접에서는

면접에서 이 질문을 받았다면 "트랜잭션은 DB 커넥션을 점유하는 구간이라, 응답 시간을 예측할 수 없는 외부 호출을 그 안에 두면 커넥션 점유 시간이 외부 시스템에 영향받게 된다"는 식으로 시작하면 좋아요.

그다음에는 아래 순서로 이어서 설명하면 돼요.

  1. 커넥션 풀 고갈로 서비스 전체가 영향을 받는다.

  2. 그래서 DB 작업을 먼저 커밋하고, 외부 호출은 커밋 전/후 이벤트로 분리한다.

  3. 분리하면 외부 호출 실패 기록이 남으니, 아웃박스나 재시도 큐로 나중에 데이터를 보정한다.

여기까지 말하면 두 시스템의 상태를 어떻게 일치시킬지 묻는 질문이 따라올 수 있어요.
이때는 결국 한 번에 원자적으로 맞추는 것은 불가능하고, 최종적인 결과를 일치시키는 방향으로 설계한다고 연결해주면 더 좋아요.

 

MSA 환경에서의 데이터 정합성

이 문제는 MSA 환경에서 특히 흔하게 발생하는 문제예요.
두 격리된 시스템의 데이터 정합성을 보존하는 방법이 더 궁금하다면, 분산 트랜잭션(Distributed Transaction)과 관련된 키워드(2PC, SAGA, 코레오그래피, 오케스트레이션 등)를 더 찾아보는 것도 추천해요.

 

꼬리질문

다음의 꼬리질문도 생각해보세요.

 

 

AI 모의면접으로
나의 면접 스킬을 체크해보세요

프론트엔드,백엔드,FDE 기술면접부터 문화면접까지,
개발자 면접 준비를 실전처럼 연습해 보세요.

직무/문화면접 보러가기

취업 · 이직 백엔드 모의면접 AI면접 면접준비

답변 0