About Me
개인의 성장과 회사의 발전을 동시에 추구하는 백엔드 개발자 김현기입니다,
저는 기존 문제들을 더 효율적이고 긍정적인 방식으로 해결하고자 노력하며,
비용 절감, 인프라 개선, 좋은 커뮤니케이션 등 다양한 분야에서 회사의 성장에 기여하고자 합니다,
좋은 코드 작성뿐만 아니라, 팀 문화에 긍정적인 영향을 주는 동료가 되고자 합니다
이를 통해 회사와 함께 성장하는 것이 제 목표입니다.
감사합니다.
경력
SGU
IT 2팀 사원
2022.08 ~ 2024.04
기술 스택
Java
, Spring
, Oracle
, MyBatis
, GitLab
, Jenkins
, AWS
, CentOS
, Docker
소개
패션 산업에 특화된 전사적 자원 관리 시스템인 ERP를 개발하고 유지보수 하였습니다.
erp의 특성 상 WMS , CRM , SCM 등 다양한 부분의 여러 도메인을 경험할 수 있었습니다.
기존 레거시 코드를 적극적으로 리팩토링하고, 새로운 기술을 도입하여 성능 개선 및 유지보수성을 높였습니다.
주요 업무 경험
- ERP 와 Groupware 간 전자결재 연동 API 기능 개발
- 주요 기능을 표준화하고 전략 패턴을 적용해 전자결재 상태 관리 및 승인 프로세스 일관성을 확보.
- 전자결재 표준을 추상화된 공통 인터페이스를 모듈화함으로써 개발 효율을 극대화하고 예상 개발 시간을 기존 6주에서 2주로 단축시킴.
- 통계성 데이터 처리 개선
- 브랜드 및 품목별 연간 매출, 시즌별 실적 목표 등 대규모 데이터를 위한 매우 복잡하고 느린 쿼리가 다수 존재.
- 뷰 테이블과 인덱스, 로컬 캐시를 활용해 복잡성을 해소하고 평균 15000ms(15초) 이상 소요되던 쿼리를 5000ms(5초) 이하로 단축.
- API 처리 속도 개선
- 비효율적인 데이터 조회 중복 문제를 해결하기 위해 레거시 코드에 페이지네이션을 도입.
- 페이지 처리를 통해 기존 API 응답 속도가 800ms(0.8초) 이상 소요되던 쿼리를 450ms(0.45초) 이하로 단축.
- CRM 서비스에서 네이티브 쿼리 개선
- CRM에서 계속 추가되는 연관 정보 노출 요청으로 인해 속도 저하 발생.
- 기존 subquery를 분석하여 join으로 해소, 기존 3500ms(3.5초) 이상 소요되던 쿼리를 800ms(0.8초) 이하로 단축.
- 커뮤니티 서비스 리팩토링
- 매장 간, 본사 간, 매장 본사 간, MD 간 등 여러 목적의 커뮤니티들이 추가될수록 중복된 서비스가 많아지는 문제 발생.
- 추상 팩토리 패턴을 활용해 중복된 서비스를 제거하고 추상화된 서비스를 통해 중복된 코드를 제거하며 유지보수성을 높임.
- 공통 기능 리팩토링 구현
- 다수의 서비스에서 사용되는 공통 코드의 과부하 문제를 해결하기 위해 각 서비스별로 필요한 기능만 포함하도록 모듈을 분리.
- 이를 통해 공통 코드를 모듈화하고, 중복 코드를 제거하여 유지보수성과 재사용성을 높임.
- WMS to ERP 물류 연동 API 개발
- 자사의 WMS와 타사 ERP 시스템 간 물류 데이터 연동 API를 개발.
- Optimistic Locking를 통한 데이터 정합성 유지 이를 통해 물류 데이터의 정확성을 확보.
프로젝트
기술 스택
JAVA 17
, SpringBoot 3.x
,Junit5
, MySql
,Spring Data JPA
,
github Action
,Docker
,Grafana
, Prometheus
소개
🤬 욕설 필터링을 위한 API 서비스입니다.
경량화된 kiso 모델과 비슷한 형태의 가용성 오픈소스 비속어 필터링 api를 제공합니다.
KISO 이용자 보호 시스템 서비스 이관을 쉽게 하기 위한 API 서비스 구현을 목표로 진행하였습니다.
주요 경험
- 아호코라식 알고리즘 활용한 비속어 필터링 API 구현
- 대량의 단어 비교를 위해 아호코라식 알고리즘을 사용하여 비속어 필터링 API를 구현했습니다.
- classicist test를 통한 white box test 코드 작성
- 실제 객체를 사용한 white box test로 테스트 신뢰성과 편의성을 증가시켰습니다.
- 시스템 모니터링 환경 구축
- on-premise 환경에서 Prometheus와 Grafana를 활용하여 실시간 시스템 모니터링 환경을 구축했습니다.
- 고가용성을 위한 무중단 다중화 서버 구축
- 분산화된 서버를 통해 고가용성을 확보한 무중단 다중화 서버를 구축했습니다.
- 중단 없는 서비스를 위한 배포 전략 구현
- GitHub Actions와 blue-green deploy를 사용하여 서비스 중단 없는 배포 전략을 구현했습니다.
기술 스택
JAVA 17
, SpringBoot 3.0
, Spring Security
, Junit5
,
MySql
,QueryDSL
,Spring Data JPA
,
AWS ECS
, AWS ECR
, AWS Route53
, AWS S3
, AWS CloudFront
,
github Action
,Docker
,Restdocs
,Grafana
, Prometheus
소개
🍾 술을 리뷰하고 평가할 수 있는 spring boot 기반의 프로젝트입니다.
실제 서비스를 하기 위한 프로젝트로 진행중인 프로젝트입니다.
총 5명의 팀으로서 진행하며, back-end , devops , infra를 담당합니다.
주요 경험
- presigned url을 활용한 이미지 업로드
- 보안과 효율성을 고려하여 presigned url 활용한 이미지 업로드 구현
- Template Method Pattern을 활용해 추후 다른 S3 업로드에 대한 확장성을 고려
- 조회 성능 개선을 위한 Local Cache 구현
- 카테고리등 많은 조회 매우 적은 수정이 일어나는 데이터에 대한 조회 성능 개선을 위한 Local Cache 구현
- 스케일을 고려해 CaffeineCache를 활용한 로컬 캐시 구현 400ms 이상 소요되던 쿼리를 17ms 이하로 단축
- DSL을 통한 다이나믹 쿼리 처리 DSL을 통한 다이나믹 쿼리 처리
- JPA를 활용한 쿼리 작성 시 여러 criteria를 고려해야하는 문제 발생
- 변동 사항이 많은 검색/ 정렬 조건을 처리하기 위해 도입 후 팀원에게 공유 전파
- 모니터링 환경 구축
- on-premise 환경에서의 prometheus , grafana를 활용한 모니터링 환경 구축
- 애플리케이션 배포 파이프 라인 구축
- github action을 활용한 CI/CD 파이프라인 구축
- ecs를 활용한 aws 인프라 환경을 구축
- 정적분석을 활용한 소수인원의 단점 보완
- 팀원이 각각의 개성으로 인해 코드 품질이 일정하지 않은 문제 발생
- Qudana , SonarQube를 활용한 정적 분석과 CheckStyle 을 통한 코드 품질 향상
기술 스택
JAVA 17
,SpringBoot 3.0
,Spring Security
,
Spring Data JPA
,MySql 8.0
,QueryDSL
,Redis
,
Naver Cloud Platform
,AWS EC2
,Ubuntu
,Object Storage
, GitHub-action
,Docker
,
Restdocs(with openapi)
,Junit5
소개
🐕 petLink는 반려동물 펀딩에 참여할 수 있는
플랫폼을 구상하고 진행한 spring boot 기반 사이드 프로젝트입니다.
주요 경험
- 신뢰성과 관리 편의성을 위한 테스트 기반의 API 명세 구현
- RestDocs와 Swagger-UI를 활용한 테스트 기반의 신뢰성 API 명세 구현
- Open API Spec을 통한 Swagger UI를 활용한 관리 편의성 증가
- 중복되지 않는 키를 만들면서 효율성을 극대화
- 주문번호를 생성하는 기능 구현 중 중복을 방지하려면 DB에 접근하는 문제 발생
- 중복되지 않으면서 다중화 환경에서도 활용가능하고 성능면에서 효율적인 스노우플레이크 방식 구현
- 효율적인 배포를 위한 CICD 구축
- 매번 수작업으로 jar 배포해야하는 반복성 문제 발생
- GitHub Actions과 Docker를 활용한 안정적인 PR, 자동화된 서버 배포 환경을 구축.
- 동시성 해결을 위한 Redis 분산 락 서버 구현
- 클라이언트가 동시에 펀딩에 참여해 재고 감소 로직 수행 시 재고 동시성 문제 발생.
- DB락 , 서버 제어등 다양한 방식들과 트레이드 오프를 비교 분석 Redis 분산락 서버 구현을 통한 문제 해소.
- Junit5를 활용한 테스트 코드 작성
- 테스트 기반의 개발을 위해 Junit5를 활용한 테스트 코드 작성
- Mock를 활용한 단위 테스트 코드 작성
- 효율적인 쿼리를 위한 QueryDSL 활용
- JPA를 활용한 쿼리 작성 시 여러 조건을 고려해야하는 문제 발생
- QueryDSL을 활용한 동적 쿼리 작성으로 효율적인 쿼리 작성
대외활동
DDD 세레나데 6기
nextstep에서 진행하는 DDD 과정
2024.04 ~ 2024.06
- 레거시 프로젝트를 DDD로 점진적 리팩터링하는 경험
- 도메인에 대해 깊이 이해하고 도메인 주도 설계를 경험
- DDD에 대한 지식과 이벤트 스토밍부터 이벤트 소싱, CQRS , 코드리뷰 스킬등 다양한 개발 스킬을 경험.
TDD with Java
nextstep에서 진행하는 TDD 과정
2023.9 ~ 2023.11
- 테스트 기반으로 리팩토링을 통해 클린 코드를 경험하는 과정
- 테스트 코드의 장점과 테스트 주도 개발의 장점을 경험
- 클린코드의 필요성과 리팩토링의 방법등을 학습
F-LAB
Back-End 멘토링 과정
2023.02 ~ 2023.08
- Back-end 시니어 개발자와 함께하는 백엔드 멘토링 과정
- 실무에서 경험하는 다양한 문제 해결과정을 경험
- 내부적으로 진행되는 다양한 해커톤에 참여
클라우드 AWS 구축/운영
시나리오형 기반 클라우드 환경 활용 과정
2022.10 ~ 2022.12
- 클라우드 환경 구축 및 운영을 경험
- AWS EC2 , EKS, CloudFormation , CloudWatch , IAM 등을 경험
교육
HYCU
컴퓨터공학과
2018.03 ~ 2023.03 (졸업)
- 컴퓨터공학과
- 리눅스 , DB , 소프트웨어 공학 등등의 분야를 학습
KH education
스프링 웹 기반 교육과정
2022.02 ~ 2022.08
- spring 기반의 웹 개발 교육과정