미리보기
기본 정보
## 🏋️♂️ 백엔드 개발자, 서버 개발자 안녕하세요. 저는 3년차 소프트웨어 엔지니어 이승우입니다. - 복잡한 문제를 구조화하고 추상화해 단순하게 해결하는 것을 좋아합니다. **리뷰 작성, 사용자 인증, 주문 등 사용자 행동 기반 이벤트를 구조화하고 이벤트로 추상화해** 팀과 커뮤니케이션하고, 실제로 코드에 녹여내어 ****커뮤니케이션 비용을 크게 줄인 경험이 있습니다. - 커뮤니케이션 능력을 바탕으로 팀 내 의견 조율 및 협업을 성공적으로 이끌어왔습니다. **코딩 컨벤션 관련 갈등 상황에서 합리적인 해결책을 제시**하여 팀의 생산성 향상에 기여했습니다. - 개발을 통해 업무 프로세스를 개선하고 자동화하는 데 흥미를 느낍니다. 실제로 프론트엔드 개발자가 없었지만, 개발자 운영 리소스를 줄이기 위해 **앱 콘텐츠 매니지먼트 어드민 및 백엔드 API 개발을 통해 운영 리소스를 절감하는 성과를 달성했습니다.** - 레거시 시스템 분석 및 개선 경험을 보유하고 있습니다. Go 기반 커머스 시스템을 Kotlin으로 성공적으로 마이그레이션한 경험이 있습니다. - 깨끗하고 유지보수하기 쉬운 코드 작성을 지향합니다. **도메인 지식 응집 및 애플리케이
기술 스택
경력
주식회사 레이첼블루
Software engineer • 서비스팀
레이첼블루는 ‘바꿔쓰기’라는 신개념 기능을 제공하는 커머스 기반 서비스를 운영하는 회사 입니다.
전체 쿠폰 발급 시스템을 운영
최대 4만명의 유저에게 쿠폰 발급하고, 알림톡을 발송하는 워크플로우를 개발
운영단에서의 안정적 사용 지원
사용자 카카오톡 공유 이벤트, 사용자 리워드 시스템 개발 / 운영
1,000명 이상 공유 이벤트 응모
바꿔쓰기를 알리기 위한 퀴즈를 제공하여 사용자 퀴즈 참여 횟수 7,000 이상 달성
(2년 4개월 | 정규직)
(주)루브릭랩스
Backend Developer • 백엔드팀
루브릭랩스는 OKR 협업툴과 SI를 병행하는 회사 입니다.
B2B SaaS OKR 협업 툴 개발
SI 및 서비스 개발 병행
(8개월 | 정규직)
프로젝트
레이첼블루
쿠폰 시스템 개발
설명
사용자 참여율 및 매출 증대를 목표로 쿠폰 시스템을 개발했습니다. 복잡한 쿠폰 발급 정책을 효율적으로 관리하고, 안정적인 시스템 운영을 통해, 단위 테스트 코드 작성으로 안정성을 확보하여 추가 기능 개발 시간 단축에 기여했습니다.
업무 내용
쿠폰 발급 정책 관리 시스템 구축: 복잡하고 다양한 쿠폰 발급 정책을 효율적으로 관리하기 위한 시스템을 구축했습니다. 쿠폰 발급 조건, 할인율, 유효 기간 등을 유연하게 설정하고 관리할 수 있도록 하여 마케팅 전략에 따라 쿠폰 정책을 신속하게 변경하고 적용할 수 있도록 지원했습니다.
안정적인 쿠폰 발급 시스템 개발: 사용자 이벤트(리뷰 작성, 회원 가입, 주문 결제 완료 등) 발생 시점에 실시간으로 쿠폰을 발급하는 시스템을 개발했습니다. 이 때 처음에는 DB 큐를 사용하였으나 API 서버가 단일 DB를 사용하고 있었기 때문에 API 서버의 SPOF(단일 장애점)이 될 수 있는 문제가 있어 관리적인 부분이나, 실패시 처리 등에 이점이 있는 AWS SQS(Simple Queue Service)를 기반으로 시스템을 구축하여 안정적인 쿠폰 발급 서비스를 제공했습니다.
테스트 코드 작성 및 시스템 안정성 확보: 단위 테스트 코드를 꼼꼼하게 작성하여 쿠폰 발급 로직의 정확성을 검증하고 시스템 안정성을 확보했습니다. 이를 통해 쿠폰 오발급, 중복 발급 등의 문제를 사전에 예방하고 시스템 유지보수 비용을 최소화했습니다. 또한, 테스트 코드 작성으로 인해 추가 기능 개발 시간을 단축할 수 있었습니다.
Tech Stack
kotlin, SpringBoot, JPA(Hibernate), Spring Event, AWS SQS
주식회사 레이첼블루
Go -> Kotlin + SpringBoot(MVC) 마이그레이션
설명
기존 Go 기반 시스템을 Kotlin + SpringBoot 기반으로 성공적으로 전환하여 시스템 성능과 개발 효율성을 향상시켰습니다. 특히, 인메모리 캐시 적용으로 API 응답 속도를 획기적으로 개선을 했습니다. 코딩 컨벤션 문서, Spring self-invocation 문제에 관한 문서를 작성하여 팀 협업 및 유지보수 용이성을 높이는 데 기여했습니다.
업무 내용
Kotlin + SpringBoot 도입 및 시스템 전환: Go 기반 시스템을 Kotlin + SpringBoot 기반으로 안정적으로 전환했습니다. 새로운 기술 스택에 대한 빠른 학습과 적응력을 바탕으로 시스템 아키텍처를 재설계하고, 기존 기능을 Kotlin 코드로 전환하는 작업을 주도했습니다.
코딩 컨벤션 표준화: 팀 내 코딩 컨벤션 불일치 문제를 해결하기 위해 코딩 컨벤션 문서를 작성하고 팀 회의에서 공유했습니다. 이를 통해 코드 가독성과 유지보수성을 높이고, 협업 과정에서 발생할 수 있는 오류를 최소화했습니다.
핵심 커머스 기능 개발: 리뷰, 바꿔쓰기, 상품, 배너, 쿠폰 등 다양한 커머스 기능을 Kotlin + SpringBoot 기반으로 설계 및 구현했습니다. API 엔드포인트를 제공하고, 데이터베이스 연동 및 비즈니스 로직 처리를 담당했습니다.
데이터베이스 마이그레이션: PostgreSQL에서 MySQL로 마이그레이션을 성공적으로 수행했습니다. 새로운 데이터베이스 환경에 맞춰 시스템을 최적화했습니다. 동료가 DB 마이그레이션을 진행할 때 속도에 문제가 있어, 페어프로그래밍을 진행하여 메모리에 모두 올려 진행하는 방법으로 성능을 10분 → 30초로 개선하였습니다.
인메모리 캐시 적용: Caffeine 캐시를 활용하여 인메모리 캐시 스토리지를 도입했습니다. 이를 통해 빈번하게 사용되는 데이터를 메모리에 저장하여 API 응답 속도를 1초에서 0.1초로 90% 단축시키는 성과를 달성했습니다. 스케일 아웃된 서버에서 인메모리 캐시를 사용하기 위해서 스프링 스케쥴러를 이용해 캐시 변경 때 마다 전체 서버에 반영하는 기능을 개발하였습니다. 또한 특정 기간 동안만 노출되어야 하는 리소스에 대해 캐시가 적용되는 문제가 있어 이를 쿼리로 가져오는 데이터를 애플리케이션에서 필터링 하는 방식으로 문제를 해결했습니다.
Tech Stack
kotlin, SpringBoot, JPA, Caffeine cache
주식회사 레이첼블루
장바구니 모듈 개발
설명
기존 시스템의 단건 주문 제한 문제를 해결하고, 사용자 편의성을 높이기 위해 다건 주문이 가능한 장바구니 모듈을 개발했습니다 이를 통해 사용자 구매 경험을 개선하고 매출 증대에 기여했습니다.
업무 내용
테스트 용이성 확보: Go 코드 베이스의 테스트 어려움을 해결하기 위해 테스트 코드 작성이 용이한 구조로 코드를 리팩토링했습니다. 이를 통해 시스템 안정성을 높이고, 향후 유지보수 비용을 절감했습니다.
DDD (Domain-Driven Design) 도입: 도메인 모델링과 Repository 패턴을 활용하여 코드의 가독성과 유지보수성을 향상시켰습니다. 특히, 핵심 비즈니스 로직을 도메인 모델에 집중시켜 다른 직군과의 커뮤니케이션을 원활하게 하고 협업 효율성을 높였습니다. DDD를 도입하며 가장 좋았던 점은 커뮤니케이션 용이성도 있지만, 테스트 코드를 다른 라이브러리 영향 없이 오직 Go언어로만 작성할 수 있었고, 이를 통해 테스트 실행 속도가 전체적으로 개선되어 좀 더 빠르게 통합/배포를 할 수 있었습니다.
CQS (Command-Query Separation) 원칙 적용: 쿼리와 커맨드의 관심사를 분리하여 코드의 복잡성을 줄이고, 각각의 역할에 집중할 수 있도록 개선했습니다. 이를 통해 시스템의 확장성과 유연성을 확보했습니다. 특히 Command에는 AWS Master DB를 사용하도록, Query에는 Slave DB를 사용하도록 하여 개별적으로 스케일 아웃할 수 있도록 구성하였습니다.
테스트 환경 개선: 기존 애플리케이션을 구성하는 코드들이 라이브러리를 그대로 드러내어 테스트를 작성하려면 라이브러리를 모킹해야하는 문제가 있어 덕 타이핑(Duck Typing)과 의존성 주입(DI, Dependency Injection) 라이브러리를 활용하여 테스트 코드 작성을 더욱 편리하게 만들었습니다. 특히 의존성 주입 라이브러리를
wire
를 사용하였는데, 이 라이브러리를 선택한 이유는 팀의 기조가 런타임보다는 컴파일 타임에 에러를 잡아내어 수정할 수 있게 하여 프로덕션 리스크를 줄이자는 목적이 있었으므로, 컴파일 타임에 의존성 주입 코드 생성을 해주는wire
를 사용하게 되었습니다.레거시 시스템과 v2 시스템 통합: 레거시 시스템과 v2 시스템 통합을 위해서
Apollo Federation
을 사용하여 시스템 통합을 진행했습니다. 레거시 시스템과 v2 시스템 모두 GraphQL 엔드포인트를 제공하는 애플리케이션이었는데, 클라이언트에서 하위호환성을 지원하기 위해서 사용하였습니다. 이 때 GraphQL이 공식적으로 이미지 업로드를 지원하지 않는 문제가 있어, AWS S3 presigned URL 을 이용해서 이미지 업로드를 지원하도록 변경하였습니다.성과: 클라이언트 사이드의 하위호환성을 지원하여 신규 시스템을 성공적으로 도입하였습니다. 장바구니 모듈 개발을 통해 사용자들의 평균 객단가를 29,000원에서 40,000원으로 30% 이상 향상시키는 성과를 달성했습니다.
Tech Stack
Go, Wire, GraphQL (with Apollo Federation)
포트폴리오
교육
넥스트스텝
사설 교육 | ATDD, 클린코드 with Spring
2024.01. ~ 2024.02.
졸업
학점은행제
대학교(전문학사) | 정보처리전공
2020.09. ~ 2022.02.
졸업
자격증
정보처리산업기사
산업기사 | 한국산업인력공단
2021.04.
네트워크 관리사
2급 | ICQA 국가 공인
2021.10.
자기소개
Skills
Overall
유지보수성이 뛰어난 아키텍쳐를 추구하여 높은 비즈니스적 가치를 창출하는 것을 좋아합니다.
항상 최신의 기술이 옳다고 여기지 않습니다. 상황에 따라 적절한 선택이 있다고 믿습니다.
업무에 필요하다면 능숙한 분야가 아니더라도 적극적으로 탐색하여 최적의 결과를 낼 수 있도록 노력합니다.
개인의 성장이 팀의 성장을 이끈다고 믿고, 팀의 성장은 곧 비즈니스 성과로 이어진다고 믿습니다.
Communication
직위 및 포지션에 관계없이 적극적으로 생각을 표현합니다. 실제로 팀에서 회고를 주도했고, 발표를 제일 많이 진행했습니다.
커뮤니케이션은 적은 것보다는 많은게 좋다고 믿습니다.
상대방을 존중하며 지적 겸손함을 유지하기 위해 노력합니다.
Backend
비즈니스 도메인을 이해하려 노력하고 코드에 녹이는 것을 즐깁니다.
유지보수 용이성에 도움이 되고 코드 문서와 같은 역할을 하는 테스트 코드를 작성합니다.
사용자 친화적인 인터페이스(API 엔드포인트)를 제공하려 노력합니다.
Kotlin, JAVA (JVM)
Kotlin과 JAVA가 능숙하며 해당 언어로 사용자 기반 서비스 프로덕션 코드를 유지보수/개발하였습니다.
ORM 에 대한 이해가 있고, OOP 지향적인 코드를 작성합니다.
Spring
Spring Framework의 설계 원칙을 이해하고 이에 따라 설계 또는 코드를 작성합니다.
DIP, Strategy Pattern, Proxy 등의 개념을 이해하고 적절한 비즈니스 요구사항에 활용합니다.
Infra
AWS S3, CloudFront, Lambda@Edge 등을 이용해 애플리케이션 레이어를 구축할 수 있습니다.
AWS EC2, AWS RDS, AWS gateway, AWS Route53 등으로 백엔드를 제공하는 인프라를 구축할 수 있습니다.
GitHub Actions 등으로 CI를 구성할 수 있습니다.
반복적인 업무 해소를 위해 Go 또는 JVM 언어로 CLI 도구를 만들 수 있습니다.
React
JavaScript, TypeScript 언어로 간단한 CRUD WEB 애플리케이션을 작성할 수 있습니다.
React Hook 을 이해하고 적재적소에 적용할 수 있습니다.