이번 프로젝트에서는 단순히 기능을 구현하는 것뿐만 아니라, 실제 서비스 환경에서 고려해야 하는 부분들에 대한 피드백을 받을 수 있었다.
1. 결제 승인 시 클라이언트 요청 데이터 검증
토스 결제 승인 요청 시 클라이언트가 전달하는 orderId, amount 등을 그대로 신뢰하면 안 된다.
결제 승인 전에 반드시 DB에 저장된 주문 정보와 비교하여
- 주문 번호가 일치하는지
- 결제 금액이 일치하는지
검증해야 한다.
클라이언트의 요청은 언제든 변조될 수 있기 때문에 서버가 최종 검증을 수행해야 한다
2. . 외부 API 호출과 DB 트랜잭션 설계해야 한다.
토스 승인 요청과 DB 저장을 하나의 @Transactional 범위에서 처리하면 문제가 발생할 수 있다.
예를 들어
- 토스에서는 결제가 정상 승인되었지만
- 이후 DB 저장 과정에서 예외가 발생하면
우리 서비스에는 결제 정보가 없지만 실제 결제는 완료된 상태가 될 수 있다.
외부 시스템과 통신하는 로직은 데이터베이스 트랜잭션과 분리하여 설계하는 것이 안정적
3. 외부 API 호출 시 Timeout 설정이 필요하다.
외부 API가 응답하지 않을 경우 서버는 해당 응답을 계속 기다리게 된다.
Timeout을 설정하지 않으면 요청 하나가 스레드를 계속 점유하게 되고, 요청이 많아질 경우 서버 전체 성능 저하로 이어질 수 있다.
RestClient, WebClient 등의 외부 API 호출에는 Connection Timeout과 Read Timeout을 적절히 설정하는 것이 중요
이번 프로젝트를 진행하면서 가장 크게 경험한 것은 서비스 운영 관점에서 고민하는 경험이었다.
처음에는 결제 기능을 구현하는 것이 목표였지만, 실제로는 데이터 정합성, 외부 API 연동, 트랜잭션 설계, Timeout 설정 등 기능 구현 이후의 안정성과 운영 관점에 대해 많은 피드백을 받을 수 있었다.
또한 이전 프로젝트에서는 배포 과정을 그대로 따라 했다면, 이번에는 Docker, CI/CD, EC2, Nginx, SSL 등을 직접 구축하면서 서비스가 외부에 배포되는 전체 흐름을 이해할 수 있었다.
'Project > 삼인분' 카테고리의 다른 글
| [Infra] 운영 서버 메모리와 Swap 필요성 (0) | 2026.07.15 |
|---|---|
| [Infra: AWS] Docker Hub를 활용한 EC2 배포 환경 구축 (AWS EC2 + Docker + Docker Hub) (0) | 2026.07.07 |
| [Infra: Docker] docker compose 만들기 (0) | 2026.07.07 |
| [Infra: Docker] Dockerfile 만들기 (0) | 2026.07.06 |
| [Infra] 인프라 아키텍처 설계하기 (0) | 2026.07.02 |