전체 글 (106)


[ClimPick] 느린 쿼리를 찾아 개선하자 - Performance Schema/EXPLAIN ANALYZE로 병목 찾기(개선한건 없지만 배웠다...//)

[ClimPick] 느린 쿼리를 찾아 개선하자 - Performance Schema/EXPLAIN ANALYZE로 병목 찾기(개선한건 없지만 배웠다...//)

개발자로서 DB 성능을 개선한다고 하면 어떤 방법들이 떠오를까? 인덱스 추가하기, N+1 문제 해결하게, 불필요한 데이터 조회 제거하기, 집계 쿼리 개선하기 등등이 있을 것이다. 그럼 어떤 쿼리에 대해 개선을 진행해야할까? 당연히 실제로 느린 쿼리를 찾아서 개선해야한다. MySQL의 Performance Schema에서는 실행된 SQL의 성능 통계를 확인할 수 있다. 이를 활용해서 코드만 보고 병목을 예상하는 것이 아니라, 실제 실행 통계를 바탕으로 성능 개선이 필요한 쿼리의 후보를 찾을 수 있다. 이번에는 ClimPick의 테스트 환경에 실제 서비스보다 큰 규모의 데이터를 생성하고 Performance Schema로 병목 후보 탐색 -> EXPLAIN ANALYZE로 실행계획 분석 -> 인덱스 및 쿼..

[Limbing #13] 영상 로딩이 느리다: S3 앞에 CloudFront CDN 붙이기

[Limbing #13] 영상 로딩이 느리다: S3 앞에 CloudFront CDN 붙이기

리밍이 인스타그램에 광고를 붙이며, 베타 테스트 모집에 들어갔다.실제 사용자가 유입될 것을 대비해서 앱을 이용해보고 있었는데, 영상의 로딩 속도가 느리다는 것이 걱정이 됐다.그동안 MVP 개발과 기능 구현을 우선하느라 미뤄두었던 CloudFront CDN을 본격적인 사용자 유입에 앞서 도입하기로 했다. 기존 미디어 처리 구조기존 리밍의 미디어 처리 구조는 S3에 파일을 저장하고, S3 URL을 클라이언트에 그대로 전달하는 방식이었다.영상 업로드 시 서버가 Presigned URL을 발급하고, 클라이언트가 S3에 직접 업로드한다. 업로드가 완료되면 S3 URL을 DBd에 저장하고, 피드 조회 시 해당 URL을 그대로 반환했다. [업로드]Client → Server : Presigned URL 요청Serv..

[Limbing #12] Outbox 이후 마주한 문제들(Retry, DLQ, 멱등성)

[Limbing #12] Outbox 이후 마주한 문제들(Retry, DLQ, 멱등성)

📑 Contents 1. 지난 글에서 미룬 이야기 2. 재시도하면 안 되는 실패가 있다 3. 재시도 정책에도 이유가 있다 4. 같은 메시지가 두 번 왔을 때 5. 실패를 복구 가능한 실패로 만들기 6. 마무리 지난 글에서 미룬 이야기https://sou330.tistory.com/106 [Limbing #8] 업로드한 영상이 영영 처리중이라면? Outbox Pattern📑 Contents 1. 기존 방식의 문제점 └ Dual-write 불일치 문제 └ 유실 시 복구 수단이 없음 2. Outbox Pattern이란? 3. 프로젝트에 적용한 구조 4. 배운 점 오늘은 Outbox Pattern을 적용한 부분에 대해 적어보sou330.tistory.com지난 번에 프로젝트에 O..

[Limbing #11] 배포를 안전하게 만들기: systemd, 버전형 릴리스, 자동 롤백

[Limbing #11] 배포를 안전하게 만들기: systemd, 버전형 릴리스, 자동 롤백

📑 Contents 1. 기존 Lightsail 배포 방식의 한계 2. 목표: 버전형 릴리스 + 자동 롤백 3. systemd로 배포 방식 전환 4. 버전형 릴리스 구조 설계 5. 안전한 배포 프로세스 구현 6. GitHub Actions 개선 7. 마무리 오늘은 백엔드 멘토님께서 과제로 내주신 CI/CD 배포 구조 개선 과정을 기록해보려 한다. 처음 배포 로직을 짠 거라 동작한다는 자체에 의미를 뒀었는데 다시 보니 배포 실패 시 복구가 어렵고, 배포 중 장애가 발생해도 안전하게 대응할 수 없는 등 여러 허점이 있었다. 이번 과제를 통해 실패하면 자동으로 롤백되고, 언제든 이전 버전으로 복구할 수 있는 배포 구조를 만드는 과정을 경험할 수 있었다. 기존 Lightsail 배포 방식..

[Limbing #10] Claude Code를 사용하며 가장 먼저 익힌 기능들

[Limbing #10] Claude Code를 사용하며 가장 먼저 익힌 기능들

📑 Contents 1. Claude Code를 사용하려면? 2. Model 선택 3. Plan Mode 4. Usage 5. Resume 6. CLAUDE.md 7. Code Review 8. Context 9. Compact 10. 마치며 요즘 채용공고를 보면 AI Native 개발 역량이나 신기술 활용 능력에 대해서 우대하는 기업이 많아졌다. 이제는 AI를 개발 과정에서 활용하는 것이 자연스러운 흐름이 되었고 중요한 것은 얼마나 효과적으로 활용할 수 있느냐라고 생각한다. AI 개발 이라고하면 프롬프트 엔지니어링, 컨텍스트 엔지니어링, 하네스 엔지니어링, 루프 엔지니어링 등등 많지만! 처음 AI를 도입하는 시점에서는 머리아프다. 그래서 내가 입문했던 간단한 Clau..

[Limbing #9] Prometheus + Loki + Grafana로 운영 모니터링 환경 구축하기

[Limbing #9] Prometheus + Loki + Grafana로 운영 모니터링 환경 구축하기

📑 Contents 1. 모니터링을 구축한 이유 2. 모니터링 시스템은 어디에 구축해야 할까? 3. 어떤 지표를 수집했는가 └ Infrastructure └ Application └ Database └ Logs └ RabbitMQ 4. 서버를 선택해서 한 번에 보기 5. 느낀 점 처음으로 프로젝트를 하면서 모니터링을 구축해보았다. 나는 인프라 관리가 넘 귀찮게 느껴졌는데 이 부분은 재밌었다. 모니터링을 구축한 이유서비스에 문제가 발생했을 때, 개발자가 5분 안에 원인을 파악하고 대응할 수 있는 환경을 만든다. 이 프로젝트의 가장 큰 목표는 실제 서비스를 운영해 보는 것이다. 내가 만든 코드가 실제 사용자를 안정적으로 받을 수 있는가를 검증하고싶다.본격적인 출시를 준비하면서, ..