10년차 풀스택 개발자 테크 리드 자바 스프링 파이썬 데이터엔지니어링 성능개선 MySQL Redis MQ AWS GCP

About Me

문제를 해결하면서 새로움을 배우고 즐기는 풀스택 개발자입니다. 스타트업에서 자바, 스프링, 파이썬, MySQL, AWS, GCP 중심의 기술 스택으로 서비스를 설계/개발/운영 해왔습니다.

개발성향

신규 기술을 도입 또는 대규모 업데이트시 다양한 접근법의 장단점을 명확히 하여 트래이드오프가 발생하는 부분을 인지하고 대비하여 시스템 장애를 최소화하는 방향으로 개발합니다.

코드 리뷰를 상당히 중요하게 생각하고 되도록이면 모든 코드 리뷰에 참여하기 위해 노력합니다. 같이 일하는 개발자의 노하우가 담긴 코드를 보는 것은 저에게 큰 자산이 된다고 생각합니다.

지금까지 코드리뷰를 통해 1) 프로그래밍 실력 향상, 2) 잠재적 에러 사전 발견, 3) 커뮤니케이션 오류 발견 이 외에도 코드리뷰는 유지보수 관점에서 도움이 되기 때문에 즐기는 편입니다.

업무 스타일

맡은 일에 책임감이 강해서 막히는 부분이 있으면 자는 시간을 제외하고 고민하고 리서치하면서 개선방안을 고민합니다.

신규 기능이나 수정사항의 경우 “신규 기능의 사용자 시나리오가 어떻게 되지? 왜 필요한가? 이게 최선일까?“라는 질문을 저에게 던지고 의문점이나 기획자가 생각 못한 부분이 있을지 고민하며 분석합니다. 고민한 내용을 정리 후 기획자와 논의하며 이 과정에서 개발 사항을 구체화하고 사이드 이펙트, 추후 변경사항을 고려하여 개발 사항을 명확히 정리 후 진행합니다.

최근에는 AI 에이전트 도움을 받아 개발하면서 더 빠르고 확실하게 개발하기 위해서 테스트 케이스, 사이드이펙트 등 다양한 관점을 더 명확하게 하기 위해 노력하고 있습니다.

의사소통 중시

주니어 시절부터 부족했던 소통 능력은 시니어, 테크리드를 거치며 친절한 개발자를 목표로 개선한 결과 현재는 비개발자와의 협업에서도 원활한 소통을 한다는 피드백을 받을 만큼 성장하였습니다.

제가 생각하는 개발자에게 필요한 덕목 중 하나는 의사소통 능력입니다. 기획,디자인,개발 등 다른 사람이 일하는 환경 속에서 각자 이해도를 맞춰야 개발 완성도와 생산성을 높일 수 있다고 믿기 때문입니다. 원활한 의사소통을 위해 미팅을 하기 전에 미리 아젠다를 공유하여 미팅은 서로 아젠다에 대해서 준비된 상태로 논의하여 빠르게 의사결정 하는 것을 선호합니다.

시니어개발자, 그리고 테크리드 경험

시니어, 테크리드를 경험하면서 팀원의 강점을 파악하는 능력에 부족함을 느꼈고 이를 개선하기 위해 1:1 미팅, 업무 미팅을 통해 팀원을 이해하고 파악하려고 노력했습니다.

회사와 팀에 긍정적인 효과를 주기 위해 어떤 노력을 해야 좋은 팀으로 나아갈 수 있을지 고민하고 있습니다. 1) 시스템 비용 개선, 2) 생산성 및 실력 향상을 위한 팀 문화 형성, 3) 기술부채 만들지 않기, 4)효율적으로 일하기 위해 코딩 외 업무(미팅노트, 업무정리 등)에서도 AI 잘 쓰기에 관심이 있습니다.

관심사
  • 데이터베이스(RDB) : MySQL 중심의 실무 경험에서 얻은 데이터베이스 지식을 정리하여 블로그에 작성하고 있습니다. AI 를 통해 제가 알고 있던 내용을 검증하고 정리하면서 공부하고 있습니다.
  • 데이터 엔지니어링 : 광고 성과 데이터 파이프라인 설계/운영 업무를 통해 데이터 엔지니어링을 경험하면서 데이터 레이크(수집), 데이터 랭글링(가공), 데이터 마트(적재) 에 관심이 생겼고 어떻게 기술적으로 접근해야 다양한 분야에서 활용 가능한지 관심이 있습니다.
  • 프론트엔드 및 웹 최적화 : 풀스택 개발자가 되기 위해 React(Next.js, React Native)를 공부하며 효율적인 상태관리와 React Compiler 같은 최신 기술을 학습하고 있습니다. 또한 구글 Core Web Vitals를 모니터링하며 웹사이트의 SEO와 성능을 기술적으로 개선하는 과정을 즐기고 있습니다.

Technical Experience

MySQL
  1. 데이터베이스 락에 의한 API 병목 해소를 위해 isolation level 조정 및 트랜잭션 리팩토링
  2. JPA > MyBatis 로 변경하여 쿼리 가독성 및 성능 향상 도모
    • 복잡한 쿼리를 사용하는 모듈을 MyBatis로 변경
    • ORM + 영속성 컨텍스트 등에 의해 쿼리 실행성능 저하 이슈 해결
    • Lazy Loading / N+1 이슈 해결
    • 쿼리튜닝을 위한 다양한 힌트 사용 쉬움
  3. 슬로우 쿼리 모니터링을 통해 튜닝이 필요한 쿼리 혹은 병목 포인트 도출 및 해결
    • 슬로우쿼리에 나오는 쿼리 중 대다수 쿼리는 빠르게 응답함
    • 다른 트랜잭션 락에 의해 지연된 쿼리가 슬로우 쿼리로 잡히는 경우가 많았음
    • 다른 쿼리 중 락을 유발하는 쿼리를 찾아서 트랜잭션 크기를 줄이거나 isolation level 혹은 락 제어(@Lock)시도
MongoDB(Atlas)
  1. 서브 DB로 활용하여 로그성 데이터 및 가변 스키마 관리
  2. 로그성 데이터 혹은 스키마 변동이 크거나 메인 서비스와는 성격이 다른 데이터를 관리하기 위해 활용
  3. MySQL 만큼 많이 다뤄보진 않았음
  4. 간단하게 데이터 CRUD 를 다루면서 인덱스 설정으로 쿼리 튜닝 경험 보유
RabbitMQ
  1. Redis 의 Pub/Sub 으로 통신하던 모듈간 통신을 개선하기 위해 도입
  2. Redis Pub/Sub 은 휘발성이기 때문에 이벤트를 받는 곳에서 제대로 처리 못했을 경우 유실되는 현상을 해결하기 위해 도입
  3. 도입 이후 점진적으로 이벤트 드라이븐 방식으로 변경하면서 메인서비스의 부하를 줄이기 위해 사용
Redis
  1. 변경사항이 적으면서 사용자가 많이 요청하는 데이터는 레디스로 관리(@Cacheable)
  2. 임시저장을 위한 데이터를 위한 데이터를 저장하기 위한 용도로 활용
  3. 임시저장 레디스에 의한 병목현상이 발생하여 전체 명령어 점검 및 튜닝
  4. 레디스 전체를 스캔하는 명령어를 튜닝하여 성능개선
    • 레디스는 한번에 1개의 명령어만 처리 가능하기 때문에 처리시간이 오래 걸리는 명령어 사용시 병목현상이 발생
서버리스 데이터 파이프라인
  1. Cloud Run, Functions, Cloud Task, Cloud Scheduler, BigQuery 활용한 데이터 파이프라인 작업
  2. 과도한 비용 발생 방지 및 모니터링을 위해 Cloud Qutoas , Cloud Monitoring 활용
  3. 데이터마트 생성을 위한 BigQuery 기반 쿼리 프로시저 활용 및 비용 최적화
    • BigQuery 는 서버리스 디비이기 때문에 사용량에 따라 비용 발생
    • 잘못된 쿼리는 과도한 비용을 발생 시킴
  4. 광고플랫폼 API 연동 및 안정화(알림, 재시도 등)

Skills

  • 언어: Java, Python, Javascript(Typescript), HTML, CSS
  • 프론트엔드 : Javascript, CSS, HTML5, SASS, Reactjs(Nextjs), jQuery, Webpack, Babel
  • 프레임워크 / 라이브러리 : Spring Boot, Next.js, React, Hibernate(JPA), MyBatis, Prisma, jQuery, PostCSS
  • 데이터베이스 : MySQL, MongoDB, Redis, BigQuery, PostgreSQL(기초)
  • 테스트 : JUnit5, Spock Framework,Playwright(e2e)
  • 인프라
    • AWS : EC2, S3, API Gateway, Lambda, RDS, CloudWatch, CloudFront, MQ 등
    • GCP : Compute Engine, Cloud Storage, Cloud Run Function, Cloud SQL, Cloud Logging, Cloud Task 등
  • 기타 : Airflow, Docker, Crawler(Selenium, Playwright), Git, Github, Notion, Slack

최신 게시물