Skip to content
hello tis
Go back

2026년 9월 3주차 회고: 챌린지 API 출시와 로그 유실 검증

이번 주 요약

기록 기간: 2026년 9월 14일 ~ 9월 20일

이번 주에는 로그가 사라지는 조건을 시험했다. 출시 전에는 30시간 동안 서비스를 실행했고, 출시 후에는 실제 응답 속도를 확인했다. 출석 달력에서 이전 기간의 기록을 보여 주던 오류도 수정했다.

날짜기록확인한 내용
9월 14일30시간 테스트와 로그 수집 개선테스트 기간에 메모리 누수는 관찰되지 않았다. 로그 수집 경로를 통합하는 시험도 진행했다.
9월 15일Fluent Bit 설정 정리공통으로 쓸 규칙과 서비스별로 정할 설정을 정리했다.
9월 16일로그 유실 실험로그를 파일에 남겨 두면 강제 종료 후에도 복구할 수 있었다.
9월 16일출석 달력의 날짜 계산 오류 수정리워드를 연장한 날과 다음 날에 보여 줄 출석 기록을 나눠 확인했다.
9월 17일출시 후 성능 확인CPU 사용률과 6개 API의 응답 시간을 확인했다.

주제 1 : 로그 수집 — 전송에 실패한 기록을 복구할 수 있게 하기

목적: 로그 수집 경로를 줄여 관리하기

통계 로그를 모으는 경로를 하나로 통합하는 시험을 진행했다. 기존에는 서비스가 Splunk로 직접 보내는 방식과 파일을 따로 모아 보내는 방식이 섞여 있었다. 경로마다 설정과 저장 위치를 관리해야 해 부담이 컸다. (기존 수집 방식과 개선 기록)

기능: 로그를 목적지별로 보내고, 실패한 기록은 보관하기

로그를 목적지별로 보내는 AWS 기능인 FireLens를 시험하고 있다. 이 안에서 로그 수집 프로그램인 Fluent Bit이 전송을 맡는다.

전송이 끊기면 로그를 임시로 보관할 공간이 필요하다. 이 공간을 버퍼라고 한다. 9월 16일에는 내 컴퓨터에서 전송 실패와 강제 종료를 일으켜, 보관한 로그를 나중에 보낼 수 있는지 확인했다. (수집 구성과 실험 기록)

처리: 파일 보존과 종료 순서를 나눠 확인하기

파일을 남겨 두면 강제 종료 후에도 복구할 수 있었다. 저장 방식을 나눠 비교했다.

실험 조건과 확인 방법은 다음과 같다. (실험 조건과 결과)

파일에 보관해도 로그가 사라지는 조건은 있었다.

버퍼 한도 초과 실험에서 입력 1,000건 중 앞선 800건이 유실되고 마지막 200건만 수신된 결과

서비스가 끝날 때는 마지막 로그까지 보낼 시간이 필요하다. AWS의 서비스 실행 환경인 ECS에 적용할 종료 순서와 대기 설정도 정리했다.

애플리케이션을 먼저 종료하고, FireLens는 나중에 종료한다. (AWS의 FireLens 종료 순서)

애플리케이션이 먼저 종료되고 FireLens가 남은 로그를 보내는 순서

전송을 기다리는 시간은 두 설정으로 나눈다. stopTimeout은 Grace보다 길게 잡는다.

예를 들어 Grace를 90초, stopTimeout을 120초로 둘 수 있다. 이 시간은 설정 예시다. Fargate에서 stopTimeout은 최대 120초까지 지정할 수 있다.

FireLens가 종료 신호를 받은 뒤 로그 전송에 90초를 주고, 120초까지 실행 중이면 강제 종료하는 설정 예시

종료할 때도 전송 대상에 장애가 남아 있으면 로그를 다 보내지 못할 수 있다. Fargate의 실행 단위인 태스크가 끝나면 임시 저장 공간도 삭제된다. 원본을 태스크 밖에 보관하고 다시 보낼 방법도 필요하다.

확인한 결과와 남은 과제를 구분했다.

주제 2 : 출시 전후 검증 — 30시간 테스트 후 실제 응답 속도 확인하기

목적: 새 기능을 출시하기 전에 성능 확인하기

출석 기능을 출시하기 전에 부하테스트를 진행했다. 요청을 보내며 처리 속도를 확인하는 테스트다. 지난주에는 DB 연결 수와 서버의 처리 자원을 조정해 응답 지연을 줄였다.

기능: 오래 실행해도 응답 속도가 유지되는지 보기

이번에는 같은 설정으로 30시간 동안 요청을 처리하게 했다. 이렇게 오래 실행하며 상태를 확인하는 시험을 soak test라고 한다. 다음 두 항목을 함께 살폈다. (30시간 테스트 기록)

확인 방법과 결과: 테스트 중 측정하고, 출시 후 다시 측정하기

테스트 중 일부 요청에서 순간적인 지연이 있었다. 그래프에서는 최대·최소 응답 시간과 함께 p90·p95를 확인했다. p90·p95는 해당 구간에서 요청의 90%·95%가 처리된 시간을 뜻한다.

30시간 soak test에서 관찰한 HTTP 응답 시간의 max·p95·p90·min

이 결과를 확인하고 테스트를 마쳤다. 출시 후에는 실제 서비스의 CPU 사용률과 API 응답 시간을 측정했다. API 응답 시간은 앱의 요청에 서버가 답하기까지 걸린 시간이다. (출시 후 측정 기록)

출시 후 오전 9시대 약 26%에서 18시 무렵 약 9%로 감소한 CPU 사용률

주제 3 : 출석 테스트 — 리워드 연장 후 잘못 나온 달력 수정하기

목적: 리워드를 연장한 뒤에도 출석 기록을 맞게 보여 주기

리워드를 연장한 뒤 달력에 이전 기간의 출석 기록이 나오는 오류를 수정했다. 리워드를 받거나 연장할 때 쓰는 출석 기간을 회차라고 한다. 연장한 날에는 방금 마친 회차의 기록을 보여 줘야 한다. (오류 상황과 출석 규칙)

기능: 연장한 날에는 완료한 기록, 다음 날에는 새 달력 보여 주기

9월 15일에 리워드를 연장했다. 달력에는 9 ~ 15일 기록이 나와야 했지만, 2 ~ 8일 기록이 나왔다.

수정 전에는 9월 2 ~ 8일 기록이 나왔지만, 기대한 결과는 출석권 사용 표시를 포함한 9월 9 ~ 15일 기록이다

수정 후에는 연장한 날과 다음 날을 나눠 확인했다.

9월 15일에는 완료한 출석 기록을 유지하고, 16일 첫 출석 전에는 빈 달력을 보여 주는 사례

처리: 이번 회차의 시작일 이후 기록만 가져오기

기존 코드는 가장 최근의 연장 기록만 확인했다. 그보다 앞서 리워드를 받은 기록을 놓쳐 이번 회차의 시작일을 잘못 찾았다.

이번 회차의 시작일을 기준으로 기록을 가져오도록 바꿨다. (원인과 수정 방법)

테스트에는 연장 직후와 다음 날 첫 출석 전의 달력을 추가했다. 확인 범위도 넓혔다. (추가한 테스트와 결과)


Share this post:

Previous Post
[26.09.21] 챌린지 API의 횟수 원장 통합을 위한 보관과 조회 방식 비교하기
Next Post
[26.09.18] 이해하기 쉽게 설명하려다 말이 길어질 때