본문 바로가기

분류 전체보기20

인덱스만 걸면 빨라진다고 믿었다가 EXPLAIN에서 막힌 날 내가 처음 데이터베이스를 제대로 마주한 건, 한 중견 기업의 백엔드 개발자로 입사한 첫날이었다. 면접에서는 "MySQL 기본기 정도는 있다"라고 자신 있게 말했지만, 막상 실무에 들어가니 내가 알고 있던 건 빙산의 일각에 불과했다. 그 회사의 핵심 서비스는 하루에 수백만 건의 트랜잭션을 처리하는 주문 시스템이었고, 나는 이 시스템의 성능 개선 프로젝트에 투입됐다. 당시만 해도 "인덱스 걸면 빨라진다"는 막연한 수준의 지식しか 없었는데, 이 프로젝트를 통해 인덱싱의 세계에 제대로 빠져들게 됐다.▲ 쿼리 실행 계획(EXPLAIN) 화면이 글에서는 내가 실제 프로젝트에서 겪었던 인덱스 관련 삽질과 깨달음, 그리고 성능 최적화를 위해 적용했던 방법론을 솔직하게 풀어보려고 한다. 인덱스의 개념부터 시작해서 실전 .. 2026. 8. 9.
Rust 예제를 빌드하다 툴체인 버전에 막힌 저녁 1. 서론: 왜 지금 Rust인가프로그래밍 언어 생태계에서 Rust의 부상은 단순한 유행이 아닌 패러다임의 전환을 의미한다. 2015년 1.0 버전 출시 이후 Rust는 꾸준히 성장하여 2026년 현재 TIOBE 지수 상위 10위권에 안착했으며, Linux 커널, Android, Firefox, AWS, Cloudflare 등 글로벌 기술 기업의 핵심 인프라에 채택되고 있다. Rust가 주목받는 핵심 이유는 메모리 안전성(Memory Safety)을 컴파일 타임에 보장하면서도 C/C++에 버금가는 성능을 제공한다는 점이다. 전 세계 사이버 보안 사고의 약 70%가 메모리 관련 버그에서 발생한다는 사실을 고려하면, Rust의 안전성은 단순한 편의를 넘어 보안 인프라의 근본적 해결책으로 평가받다.이 글에서는.. 2026. 8. 9.
코드 리뷰, 잘한다고 되는 게 아니었다: 첫 리뷰부터 팀 문화가 바뀌기까지 1. 첫 코드 리뷰는 재앙이었다입사한 지 얼마 안 된 시절, 처음으로 코드 리뷰를 받았다. 작성한 코드는 30줄 남짓이었는데, 리뷰 코멘트는 20개가 넘게 달렸다. 그중 상당수는 스타일 지적이었고, 본질적인 문제는 세 개쯤이었다. 그날 이후 저는 리뷰 요청 자체를 꺼리게 되었다. 하루 종일 고민해서 만든 코드가 부정당하는 느낌이었기 때문이다. 지금 돌아보면 그 리뷰는 틀린 것이 없었다. 다만 전달 방식과 순서가 아쉬웠을 뿐이다. 코드 리뷰는 도구가 아니라 사람과 사람 사이의 소통이라는 것을 그때부터 깨닫기 시작했다.2. 리뷰의 목적은 '틀린 것 찾기'가 아니다팀에 합류한 시니어 개발자 한 분이 코드 리뷰에 대한 생각을 바꿔주었다. 그분은 리뷰를 코드를 평가하는 자리가 아니라 함께 배우는 자리라고 정의했다.. 2026. 8. 9.
테스트 자동화로 밤샘 배포를 끝낸 방법: CI 파이프라인 실전 경험 1. 왜 테스트 자동화를 시작했나매주 배포가 있던 프로젝트였다. 배포 전날 밤마다 수동 테스트 체크리스트를 돌렸고, 이메일로 결과를 공유했다. 문제는 같은 실수가 반복된다는 점이었다. 이전에 고쳤던 버그가 배포 직후 다시 나타나기도 했고, 수동 테스트는 두 시간 이상 걸리면서도 꼼꼼함을 보장하지 못했다. 어느 날 배포 후 장애가 발생했는데, 원인은 체크리스트에 빠져 있던 케이스였다. 그날 이후 저는 테스트 자동화를 본격적으로 시작했다.2. 첫 단계: 핵심 로직부터 단위 테스트처음에는 모든 코드를 테스트하려 했다. 하지만 레거시 코드는 테스트가 어려웠고, 시간 대비 효과가 떨어졌다. 전략을 바꿔 핵심 비즈니스 로직부터 테스트를 작성했다. 주문 계산, 할인 정책, 상태 전환처럼 자주 바뀌면서 장애 영향이 큰.. 2026. 8. 8.
실전 로깅과 모니터링: 장애 대응에서 배운 5가지 교훈 내가 로깅과 모니터링의 중요성을 뼈저리게 깨달은 건, 새벽 3시에 터진 장애 때였어요. 알림이 안와서 출근해서야 장애를 발견했다. 사용자 불만은 이미 폭주한 뒤였고요. 그때부터 진짜 로깅과 모니터링을 제대로 공부하기 시작했다. 오늘은 그동안 겪은 삽질과 교훈을 공유할게요.1. 로그는 그냥 찍지 마라, 구조화하라예전 회사에서는 System.out.println("에러 발생: " + e.getMessage()) 이런 식으로 로그를 찍었다. 개발자마다 형식이 달라서 "문제 생겼음" 이런 로그도 있고, "2026-07-26 10:30:00 ERROR 뭔가 터짐" 이런 로그도 있고 난리였어요. 장애나면 로그 파일 열어서 ctrl+F로 일일이 찾는게 일상이었다. 어느날 새벽에 서버가 뻗었는데 로그가 너무 개판이라 .. 2026. 7. 26.
서비스를 쪼개다 로컬 실행이 안 돼 하루를 쓴 경험 요즘 IT 업계에서 MSA, 도커, 쿠버네티스라는 단어를 안 들어본 사람이 있을까 싶다. 채용 공고만 봐도 "쿠버네티스 경험자 우대"는 기본이고, 심지어 주니어 포지션에서도 컨테이너 오케스트레이션 경험을 요구하는 경우가 많아졌다. 사실 5~6년 전만 해도 이런 건 인프라팀이나 하는 영역이라고 생각하는 개발자들이 대부분이었다. 그런데 지금은? 백엔드 개발자라면 기본 소양으로 여겨지는 분위기다. 이 변화가 단순한 유행일까? 내 생각엔 아니다. 클라우드 네이티브가 표준이 되면서 MSA와 컨테이너 기술은 선택이 아니라 필수가 되어가고 있다.모놀리식 아키텍처의 한계와 MSA의 등장 배경모놀리식 아키텍처, 한마디로 모든 게 하나로 뭉쳐있는 구조다. 처음 프로젝트를 시작할 때는 이게 얼마나 편한지 모른다. 그냥 스프.. 2026. 7. 19.