Claude Code를 사용하면서 개발 방식이 많이 바뀌었다. 프로젝트 전체를 기반으로 코드를 분석하고 수정할 수 있다는 것은 생각보다 컸다. 하지만 사용하면서도 여러 유튜브 영상이나 자료들을 보았는데 나는 단순하게 사용만 하고 있었다. 같은 분석을 반복하고, 같은 형태의 질문을 던지고, 이전 작업에 대한 정보는 에이전트가 잊을때가 있었다. 편...
Codex 활용법 (AI Agents 활용)
메시지 발송 조회 쿼리 개선
메시지 발송 에이전트사 변경을 할 때 기존 L사에서 구현한 상태를 유지하는 것을 목표로 해 문제가 있을 경우 기존에도 문제가 있는 것이 대부분이었다. 대부분 크게 영향이 없는 문제들이라 우선순위에 밀려 유지되고 있던 것인데 전환하면서 이러한 문제들을 모두 고치기로 한 모양이다. 이러한 문제들도 제보받고 내가 고치게 되었고, 대부분 사소했지만 치명적...
메시지 발송 에이전트사 변경 작업
실무를 하면서 운영 중인 시스템의 외부 연동 구조를 변경하는 작업을 맡게 되었다. 기존에는 L발송사를 통해 SMS, LMS, MMS, 알림톡을 발송하고 있었지만, 회사 구조 변경으로 인해 K발송사로 전환이 필요해졌다. 단순히 교체하는 작업이 아니라, 운영 중인 시스템을 중단 없이 전환해야 했고 일정 기간 두 발송사를 병행 운영해야 하는 상황이었고 ...
PG사 선택 및 토스페이먼츠 결제 구현
이번 프로젝트에서는 유료 스터디 결제 기능이 필요했다. 단순히 PG 연동만 붙이면 끝나는 작업처럼 보일 수 있지만, 실제로는 결제가 성공한 뒤 어떤 상태로 저장할지, 환불은 어디까지 허용할지, 정산이 시작된 뒤에는 어떤 요청을 막아야 할지까지 함께 정리해야 했다. 토스 결제를 구현하기 전에 먼저 어떤 PG를 선택할지부터 정리했다. 비교 기준은 크...
Claude Code 사용
여지껏 프로젝트를 진행하면서 AI를 사용하는 방식은 항상 비슷했다. 코드를 복사해서 GPT에 붙여넣고, 에러를 설명하거나 구현 방향을 물어보고, 다시 결과를 복사해서 코드에 적용하는 방식이었다. 그러던 중 친구에게 Claude Code, 커서, 윈드서프 등등에 대한 이야기를 듣게 되었고 기존에 하던 ZeroToOne 프로젝트에서 사용해보기로 했다....
PageImpl과 리플렉션 기반 파일 URL 후처리 충돌
프로젝트에서 파일 URL을 응답 직전에 변환하는 기능이 AOP로 구현되어 있었다. DTO에는 파일 스토리지의 상대 경로만 저장하고, 서비스 메소드에 @FileUrlResolved를 붙이면 Aspect가 응답 객체를 순회하면서 @TargetFileUriToResolve가 붙은 필드에 CDN 도메인을 붙여주는 구조였다. 이 기능은 팀원이 구현한 것이었...
Tibero(Oracle) vs MySQL
취준 당시 MySQL만 사용했었다. 하지만 취업을 하게 되고 실무에서는 Tibero DB를 사용하게 되었다. 단순히 DB 종류만 다른 것이 아니기때문에 어떤 부분들이 다른지 정리해보려고 한다. 쿼리 문법 LIMIT vs ROWNUM MySQL에서는 페이징이나 조회 개수 제한을 할 때 LIMIT을 사용했다. SELECT * FROM orders...
실무 시스템 구조
실무를 하면서 내가 개발하고 있는 서비스가 어떤 구조로 이루어져있는지 배웠다. Jenkins, Docker, Kubernetes, APM 도구 등 여러 기술이 사용되고 있었다. 전체 흐름 코드 변경 이후 배포까지의 흐름은 아래와 같다. 코드 수정 (Git push) Jenkins를 통한 빌드 Docker 이미지 생성 Kubern...
JDK 25 주요 변경점
최근 Java 버전이 빠르게 릴리즈되면서, 새로운 기능들이 계속 추가되고 있다. 사내의 다른 분이 정리해준 글들을 참고해 2025년 9월 릴리즈된 JDK 25의 변경사항 중 일부를 선별해서 정리해보았다. JDK 25에서의 변화 JDK 25에는 다양한 JEP가 포함되어 있지만, 생각해볼만한 기능 위주로 정리해본다. JEP? Java 기능 ...
Redis 운영 관점에서 알아보기 (2)
클러스터 모드 구축하기 ## Redis Cluster Node (Master 3, Replica 3) redis-7000: image: redis:7.2 hostname: redis-7000 command: ["redis-server", "/usr/local/etc/redis/redis.conf"] volumes...