[Testcontainers] 첫 오픈소스 기여 후기
·
오픈소스 기여
Testcontainers Java 에서 첫 오픈소스 기여에 성공했습니다. 이슈 등록부터 병합되기까지의 과정을 정리해봤습니다. Testcontainers Java를 선택한 이유Testcontainers는 테스트에 필요한 DB나 외부 서비스를 Docker 컨테이너로 실행하고 관리해주는 라이브러리입니다. 전에 프로젝트 운영 환경에서는 PostgreSQL, 테스트 환경에서는 H2를 사용한 적이 있습니다. 두 DB의 SQL 문법 차이로 운영 환경에서는 정상적으로 동작하는 쿼리가 테스트에서 실패했습니다. 당시 Testcontainers로 테스트 환경에도 PostgreSQL을 사용하도록 구성해 문제를 해결했고, 그때부터 관심을 가지고 있던 라이브러리입니다. 직접 사용하며 도움을 받았던 라이브러리라 이번에는 버그 수..
정산 요청의 응답 지연과 알림 유실을 Transactional Outbox로 개선하기
·
개발
Transactional Outbox와 Worker를 도입해 참여자 30명·외부 지연 500ms 조건에서 정산 요청 API의 p50을 15,138.7ms에서 21.6ms로 줄였습니다. 발송 실패와 프로세스 종료 이후에도 미처리 알림을 다시 처리할 수 있도록 개선했습니다. 서비스 소개 ‘얼마’는 모임에서 발생한 비용을 참여자별로 나누고, 각 참여자의 입금 현황을 확인할 수 있는 정산 서비스입니다.정산 생성자가 정산 요청을 완료하면 연결된 참여자들에게 FCM 알림을 발송합니다. 발견한 문제기존에는 정산 트랜잭션을 커밋한 뒤 afterCommit에서 참여자별 FCM을 순차적으로 발송했습니다. 트랜잭션 밖에서 알림을 보내고 있었기 때문에 FCM 지연이 API 응답에는 크게 영향을 주지 않을 것이라고 생각했습니다..
동시 요청에서 PostgreSQL Row Lock으로 HikariCP 고갈 문제 해결기
·
개발
트랜잭션 경계 축소와 500ms Lock Timeout을 적용해 무관한 정산 조회의 p95를 14.7초에서 0.5초로 단축했습니다. 서비스 소개 '얼마'는 모임에서 발생한 비용을 참여자별로 나누고, 각 참여자의 입금 현황을 확인할 수 있는 정산 서비스입니다.하나의 정산 건을 여러 참여자가 동시에 조회하고 수정할 수 있는 구조입니다.발견한 문제정산 기능의 동시성을 확인하기 위해 참여자 10명이 동일한 정산의 품목을 동시에 선택하는 상황을 k6로 테스트했습니다.정산 참여자 10명HikariCP 최대 Connection 10개동일 정산 쓰기 요청 10건 동시 실행PostgreSQL 별도 세션에서 정산 행 강제 잠금동시에 다른 정산 조회 요청 10건 실행같은 정산의 요청만 느려질 것이라 예상했지만, 잠금과 관계..
Discord 최신 대회 조회 봇: 외부 I/O 병목을 299초에서 17초로 줄인 과정
·
개발
프로젝트 한 줄 요약Discord 슬래시 명령어 /최신 으로 마지막 확인 이후 새로 등록된 대회와 공모전만 알려주는 개인용 봇입니다. 프로젝트 소개저는 대회와 대외활동에 관심이 많아 콘테스트 코리아, 올콘 같은 사이트에 자주 들어갑니다. 들어갈 때마다 이미 본 공고와 새로 올라온 공고를 직접 비교해야하는 번거로움이 있었습니다. 그래서 Discord에서 /최신 을 입력하면, 마지막으로 확인한 뒤 새롭게 올라온 공고만 보여 주는 개인용 봇을 만들어 보았습니다. 이번 MVP에서는 우선 콘테스트코리아에서 대회 및 공모전 공고만 수집 대상으로 정했습니다. 이 글에서는 신규 공고가 없어도 5분 가까이 걸리던 작업을 어떻게 분석하고 개선했는지 정리해 보려고 합니다. 최종 결과 미리보기항목BeforeAfterWork..
2026년 상반기 회고록
·
수필
정신없이 시간을 보내다 보니 티스토리라는 존재를 잠시 잊고 있었다.방학을 맞아 오랜만에 글을 작성한다.올해 상반기에 있었던 일들과 그 과정에서 했던 생각들 위주로 새벽에 작성한 글이니 두서도 없을 수 있고 분량도 적진 않아 시간 많으신 분들만 읽길 추천드립니다. 작년에는 아주 많은 대외활동과 프로젝트들을 하느라 육체적으로 바쁜 시간을 보냈다면, 올해는 생각이 많아지면서 심리적으로 바쁜 시간을 보내고 있다. 특히 이번 학기는 바로 윗 학년 선배님들이 하나둘씩 사회에 나가기 시작하는 모습을 보며, 나 자신과 앞으로의 방향에 대해 돌아보게 되었다. “나는 어떤 개발자가 되어야 할까”, “지금 하고 있는 경험들이 정말 나를 성장시키고 있는가”, “무엇을 해야 더 나 자신을 성장시킬 수 있을까”와 같은 질문들을 ..
고등학교 1학년 실리콘밸리 온라인 인턴 회고
·
수필
2026년 1월 5일부터 2월 27일까지 약 2개월 간 실리콘밸리 온라인 인턴십을 했다.이 온라인 인턴십은 3학년 때 실제로 실리콘밸리 현지에서 진행되는 오프라인 인턴십 선발 과정에서 가산점이 부여되는 프로그램이다.비록 오프라인 인턴십은 10명만 선발하는 데 비해 온라인 인턴십은 약 2.6배 더 많은 인원을 선발하지만, 1학년 중에서는 나를 포함해 3명만 참여하게 되었다. 가산점이 들어가기에, 실리콘밸리에 도전하고자 하는 동기나 후배들에게 조금이나마 도움이 되기를 바라며 이 글을 남긴다. 선발 과정온라인 인턴십을 원하는 1~2학년 학생들이 모두 같은 기준에 따라 선발 과정을 거치게 된다. 1차는 100% 포트폴리오로 35명이 선발 되며, 아마 교내 선생님들이 평가를 하신다.교내 화상영어 이수 학년 당 ..
제4회 블레이버스 MVP 개발 해커톤 후기
·
수필
블레이버스 해커톤친구랑 대화하다가 어쩌다보니 이 대회를 나가게 되었다.블레이버스 mvp 개발 해커톤은, 창업을 하려는 스타트업들의 아이디어로 참가자들이 10일동안 mvp 개발을 해야하는 대회이다.팀 구성팀은 같은 학교, 같은 학년의 5명으로 구성했다. (프론트 2명, 백엔드 3명) 디자이너가 주변에 없는 우리는 Blaybus 내 팀빌딩 채널을 통해 디자이너를 열심히 모집했다. 한 분에게 연락이 오기도 했지만, 나이 차이가 10살 정도 났던 터라 다른 팀으로 가시게 되었다. 결국 팀빌딩 기간이 마무리되면서 디자이너를 구하지 못했고, 개발자 5명으로 팀을 꾸리게 되었다. 이에 따라 어쩔 수 없이 프론트 한 명은 디자이너로, 백엔드인 나는 PM으로 직군을 변경했다.OT아이템 1은 이공계열 학생들을 위한 과학·..
[백준] 7787번 빨간 칩, 초록 칩
·
백준
문제 이해- 빨간 칩 r개, 초록 칩 g개- 턴은 A가 먼저 시작한 후 번갈아가며.. 1. 빨강 or 초록 중 하나를 선택2. 그 색에서 k개(k >= 1)를 제거 (단, k는 다른 색의 개수로 나누어 떨어져야 합니다.) 마지막 칩을 제거한 사람이 Winner!Grundy 수란?Grundy수는 현재 상태가 얼마나 좋은지를 알려주는 숫자입니다.게임에 적용을 해보자면, 이길 수 없다면 0, 있다면 1, 2, 3.... 이런식으로 숫자로 정하는 것입니다. 현재 상태를 숫자로 바꾼 후 계산 -> XOR하면 누가 이기는 지 바로 알 수 있습니다. 칩 개수별 승자를 하나하나 계산을 해보았고,, 규칙을 찾아낼 수 있었습니다.그 패턴에 따라, 숫자로 변환하는 규칙을 다음과 같이 정해봤습니다.1. 칩 개수가 홀수 ->..