1월 말부터 2월 말까지 서류 포함 총 4단계에 걸친 과정이 끝났다. 각 전형마다 결과가 바로바로 나와 되게 빠르게 지나갔던 것 같다. 결과는 운이 좋게도 합격이었고, 좋은 기억이었던 만큼 이전처럼 준비했던 내용 위주로 기록하기보다 생각이나 느꼈던 감정 위주의 일기 형식으로 기록해보려고 한다. AI는 절대 이렇게 쓰지 않겠지? 싶은 날것의 글을 한번 남겨봐야지. 아래는 내가 지원했던 공고다. (언제 사라질지 모른다. 안 사라질 수도?) 무신사 채용홈페이지musinsacareerswww.musinsacareers.com 서류 전형서류 전형까지만 해도 정말 후회하고 싶지 않다는 생각으로 지원했다. 내가 될 것이다라고 생각은 하지 않았다. 그냥 늘 그랬던 것처럼 지원했다. 지원하며 느낀 건 일단 자기소개서 ..
2024년부터 진행해온 축제 SaaS 서비스 프로젝트는 고객(축제 운영팀)마다 하나의 축제를 등록하고, 각 축제의 메인페이지를 위젯 단위로 구성해 축제 분위기에 맞는 사이트를 만들어주는 서비스입니다.2024년 상반기, 메트릭 모니터링을 통해 `/home/{festivalId}` API의 응답 시간이 다른 API들보다 눈에 띄게 높다는 것을 발견했습니다. 이를 단일 테이블 상속 전략으로 개선했었는데, 이 글에서는 그 당시 왜 그런 선택을 했고, 그 선택이 어떤 새로운 문제를 낳았으며, 이를 어떻게 해결했는지를 다룰려고 합니다. 나아가 2025년 한 해 동안의 Google Analytics 통계를 기반으로 메인페이지 조회 성능을 한 단계 더 개선한 과정까지 함께 정리해 보겠습니다. 1. 단일 테이블 상속 전..
축제 SaaS 서비스 프로젝트는 고객마다 하나의 축제를 등록하고, 각 축제의 메인페이지를 위젯 단위로 구성해 축제 분위기에 맞는 사이트를 만들어주는 서비스입니다. 그러던 중 고객사로부터 티켓 예매 기능 요청이 들어왔고, 빠른 일정 안에 비관적 락 기반의 예매 시스템을 구현하여 실제 목포 W쇼 티켓팅에 도입했습니다.다행히 초과 발급은 발생하지 않았지만, 운영 과정에서 응답 지연과 커넥션 풀 고갈 문제가 드러났습니다. 이 글에서는 비관적 락을 선택한 배경부터, 기존 코드의 문제 분석, 그리고 두 번의 걸친 개선 과정을 정리해 보겠습니다. 1. 비관적 락 도입 배경축제 티켓 예매는 평소에는 트래픽이 거의 없다가, 오픈 시점에 수백 명이 동시에 같은 잔여 티켓을 두고 경쟁하는 구조다. 동시성 제어 없이는 잔여 ..
Java로 코딩테스트 문제를 풀던 중, 2차원 배열을 clone() 메서드로 복제한 후 수정하는 로직에서 원본 배열까지 함께 변경되는 문제를 경험했다. 당시에는 "clone이 얕은 복사를 수행하기 때문"이라는 표면적인 이해만으로 넘어갔고, 2차원 배열은 무조건 2중 반복문으로 복사해야겠다는 생각만 가진 채 문제를 마무리했다. 최근 『이펙티브 자바』와 『이것이 자바다』를 읽으며 배열의 메모리 구조와 clone()의 동작 원리를 깊이 있게 학습할 기회가 있었다. 힙 메모리에서 1차원 배열과 2차원 배열이 각각 어떻게 관리되는지, 그에 따라 clone()이 어떻게 동작하는지를 이해하면서 가변 객체, 불변 객체, 깊은 복사, 얕은 복사의 개념을 명확히 정리할 수 있었다. 이 글에서는 학습한 내용을 바탕으로 cl..
Spring Boot로 개발하다 보면 @Builder, @Service같은 어노테이션을 너무나 자연스럽게 사용하게 됩니다. 하지만 문득 이런 생각이 들었습니다."만약 Lombok이나 Spring이 없다면 어떻게 구현해야 할까?" 그래서 이번에는 빌더 패턴과 싱글톤 패턴을 직접 구현하면서 이전까지 이론적으로만 학습해왔던 디자인 패턴들에 대해 자세하게 공부해 보며 직접 적용할 때는 어떤 점을 주의해야하는지 학습해 보았습니다. 1. 빌더 패턴 왜 필요할까?객체를 생성할 때 이런 코드를 본 적 있으신가요?Pizza pizza = new Pizza(12, "thin", "mozzarella", "tomato", "olive", "pepperoni", true, false); 매개변수가 8개나 되는데, 순서도 헷갈..