소개

안녕하세요, 개발자 김백규입니다.

김백규

📧Email: pocj8ur4in@gmail.com

📞Tel: +82-10-6387-5293

🐙Github: Github

📓Blog: Blog

문제를 주도적으로 해결하고자 합니다.

여러 차례 팀 프로젝트에서 리더를 맡아 주어진 요구사항에 대해 문제를 해결하고, 프로젝트를 성공적으로 완료한 경험이 있습니다. 문제 상황을 해결하기 위해 근본적인 원인을 파악하고, 다양한 시도를 통해 문제에 대한 해결책을 찾아내기 위해 노력합니다.

팀이 더 나은 결과를 만들 수 있도록 노력합니다.

팀원과의 소통을 통해 서로의 의견을 존중하고, 의견을 수렴하여 더 나은 결과를 만들기 위해 최선을 다합니다. 팀에서 제가 기여할 수 있는 부분을 찾아내고, 팀원들과 협업하여 더 나은 결과를 만들어나가고자 합니다.

모두가 성장할 수 있도록 노력합니다.

혼자가 아닌 함께 성장했을 때 더 큰 성취감을 느껴, 스터디나 개발 블로그를 통해 꾸준히 지식을 공유하고 있습니다. 개발 과정에서 코드 리뷰를 통해 코드를 피드백하고, 좋은 코드를 작성할 수 있도록 노력합니다.

프로젝트

하나 V

Hana V - Variety, View, Value 당신의 소비 생활을 더 스마트하게

  • 저장소 : Github / 사이트 : Hana V
  • 참여 인원 : 6명 (BE 2명, FE 4명)
  • 진행 기간 : 2024.05 ~ 2024.06

디지털하나路 3기 팀 프로젝트 1차에서 진행한 프로젝트로, 비슷한 관점을 가진 사람들의 소비 성향과 나의 소비 성향을 비교하고 효율적인 소비 생활을 위한 금융 방향을 제시하는 관심사 소비 분석 플랫폼입니다.

👩🏻‍💻 기여한 부분

팀장을 맡아 프로젝트에 로깅, 예외 처리, Swagger 설정과 같은 서버 개발에 필요한 기본적인 설정을 구축하였습니다.
거래내역 조회 API를 구현하였습니다.
ㄴ JPA Pagination과 Specification을 통해 검색 조건에 따라 쿼리를 동적으로 생성되도록 하였습니다.
단일거래 조회수정 API를 구현하였습니다.
ㄴ JPA Native Query를 활용해 요구사항에 맞는 쿼리를 작성하고, Stream API의 filter, map, collect로 데이터를 가공하였습니다.
관심사별 소비 조회카드 추천 API를 구현하였습니다.
ㄴ CompletableFuture와 @Async으로 여러 기능들을 비동기로 처리하여 서버 응답 시간을 단축하였습니다.
프론트엔드백엔드 서버를 Docker로 컨테이너화하고, Github Actions로 CI/CD 파이프라인을 구축하여 AWS EC2에 배포하는 로직을 구현하였습니다.

🖥️ 활용한 기술

Java, SpringBoot, JPA, MySQL, Redis, Docker, AWS (EC2, RDS), Prometheus, Grafana
하나 V 메인 화면
하나 V 거래내역 조회 화면
하나 V 거래 내역 수정 화면
하나 V 관심사별 소비 패턴 분석 화면

🚨 트러블슈팅

거래내역 조회 API에서 사용자의 거래 내역을 모두 조회한 다음에 Stream API로 가공하여 필요한 값들을 반환하고, 모든 거래 내역은 일정 기간 캐싱하는 방식으로 기능을 구현하였습니다. 그러나, 메모리와 캐시에 저장되는 데이터가 많아져 AWS 서버에서 OutOfMemoryError가 발생하는 문제가 발생하였습니다.
처음에는 사용자가 많아질수록 AWS 인스턴스의 메모리 사용량이 급증하는 것을 확인해, 데이터의 TTL을 조절하거나 Redis 서버를 따로 구축하여 문제를 해결하고자 하였습니다. 그럼에도 문제는 지속되어 엑추에이터를 통해 서버의 상태를 모니터링하고, Prometheus와 Grafana를 연동해 서버 부하를 확인하였습니다. 서버 역시 메모리 사용량이 급증하는 것을 확인하고, 거래내역 조회 API의 데이터 조회 로직을 네이티브 쿼리로 작성하여 필요한 데이터만 조회하도록 수정하였습니다.
하나 V

대학생을 위한 금융 생활 동반자, 더영하나

  • 저장소 : Github / 영상 : Youtube / 사이트 : 더영하나
  • 참여 인원 : 6명 (BE 3명, FE 3명)
  • 진행 기간 : 2024.06 ~ 2024.07

디지털하나路 3기 팀 프로젝트 2차에서 진행한 프로젝트로, 기존 하나원큐 영하나 서비스를 확장해 대학에서 일어나는 금융 활동을 관리할 수 있는 스마트캠퍼스 서비스입니다.

👩🏻‍💻 기여한 부분

팀장을 맡아 초기 설정프로젝트 구조를 구축하고, 모든 팀원이 동일한 환경에서 작업할 수 있도록 Spring Docker Compose를 프로젝트에 반영했습니다.
회원 간편로그인 API를 구현하였습니다.
ㄴ JWT와 Spring Security으로 권한을 관리하였습니다. 또한 세션을 Redis에 저장하여 서버 부하를 줄였습니다.
신청·응모·선착 이벤트 생성, 조회, 검색, 수정, 삭제 API를 구현하였습니다.
ㄴ Spring Scheduler로 1분마다 이벤트 상태를 변경하고, 사용자가 이벤트의 작업을 접근할 수 있도록 하였습니다.
ㄴ 선착 이벤트에서 발생할 수 있는 동시성 문제를 해결하기 위해 Redis 분산 락을 구현하였습니다.
알림 목록 조회, 삭제 API를 구현하였습니다.
ㄴ Firebase로 사용자에게 알림을 전송하도록 하였습니다.
HTTPS 환경에서의 서버 운영을 위해 인증서를 발급하고, Nginx로 리버시 프록시를 구성해 서버를 운영하였습니다.

🖥️ 활용한 기술

Java, SpringBoot, JPA, MySQL, Redis, Docker, Nginx, AWS (EC2, RDS, S3), Firebase, Prometheus, Grafana
더영하나 메인 화면
더영하나 이벤트 조회 화면
더영하나 응모 이벤트 신청 화면
더영하나 이벤트 알림 화면

🚨 트러블슈팅

배포된 프로젝트가 운영을 시작한 후에 서비스 안정성을 저해하는 문제가 발생했습니다. 지속적인 DDOS 공격으로 서버가 과부하 상태에 빠지면서 서비스 중단이 빈번하게 일어났고, 이에 대한 즉각적인 대응이 필요했습니다.
Nginx의 Rate Limit 모듈로 IP 주소당 초당 요청 횟수를 제한했으나, 이렇게 여러 IP에서 동시에 요청을 보내는 경우에는 대응할 수 없었습니다. 그래서 Nginx Ultimate Bad Bot BlockerAbuseIPDB로 악성 IP 주소를 차단하는 방법을 찾아 적용하였습니다. 이러한 방어 조치로 정상적인 사용자 트래픽을 보호하면서, 공격 시도의 영향을 최소화할 수 있었습니다.

기술 스택

Backend

  • Java의 JVM 구조와 동작 원리에 대해 이해하고, Garbage Collection에 기반해 메모리 효율적인 코드를 작성하려 합니다.
  • SOLID 원칙에 기반하여 클래스를 객체지향적으로 설계하고, 다양한 디자인 패턴을 적용해 유지보수성, 확장성을 고려한 코드를 작성하고자 노력하고 있습니다.
  • SpringBoot를 활용하여 RESTful API를 설계하고, JPA 등을 활용하여 데이터베이스와 효율적으로 통신할 수 있습니다.
  • 멀티모듈 구조로 계층화된 프로젝트를 구성하여 각 모듈을 독립적으로 테스트하고, 이를 조합한 여러 서버들을 구축하여 보다 효율적인 서버 구성을 할 수 있습니다.
  • SpringBoot에 Redis를 연동해 세션, 캐싱으로 서버 부하를 줄이고, 분산 락을 통해 동시성 문제를 해결한 경험이 있습니다.
  • MySQL 등 RDBMS를 활용하여 데이터베이스를 설계하고, 적절한 인덱싱 처리, 쿼리 튜닝, 반정규화 등을 통해 데이터베이스 성능을 최적화한 경험이 있습니다.
  • 로깅을 통해 서버 상태를 모니터링하고, Prometheus, Grafana를 통해 서버 부하에 대응한 경험이 있습니다.

Frontend

  • Frontend를 이해해야 웹 어플리케이션의 전반적인 흐름을 잡을 수 있어, 더 나은 Backend 개발을 할 수 있다고 생각합니다.
  • JavaScript 이벤트 루프와 콜 스택에 대해 이해하고, Promise, async·await를 활용하여 비동기 처리를 구현할 수 있습니다.
  • DOM과 브라우저 API를 통해 웹 페이지의 내부 요소를 동적으로 제어하여, 사용자 친화적인 UI/UX를 구현하고자 노력합니다.
  • React에서 재사용 로직을 분리하기 위해 커스텀 훅을 활용하고, Redux를 활용하여 상태 관리를 효율적으로 할 수 있습니다.

DevOps

  • Docker를 통해 서비스를 컨테이너화하고, Github Actions으로 CI/CD 파이프라인을 구축할 수 있습니다.
  • AWS EC2, RDS, S3 등 여러 서비스를 통해 어플리케이션을 구현한 경험이 있습니다.
  • HTTPS를 적용해 보안을 고려하고, Nginx를 활용하여 로드 밸런싱을 구현할 수 있습니다.

etc.

  • Git을 통해 버전을 체계적으로 관리하여, 코드의 변경 이력을 추적하고자 노력합니다.
  • Git 브랜치 전략에 기반해 브랜치를 관리하고, 코드 리뷰를 통해 이슈를 빠르게 해결하기 위해 최선을 다합니다.
  • Github Issue, Plane 등의 이슈 트래킹 툴을 활용하여 프로젝트의 전반적인 진행 상황을 관리해본 경험이 있습니다.
  • Figma를 활용하여 UI/UX 디자인을 구현하고, 이를 프로토타입 제작에 활용해 사용자 피드백을 받아 개선한 경험이 있습니다.
  • Notion을 프로젝트 관리 툴으로 활용하여 프로젝트 일정을 조율하고, 프로젝트 자료를 체계적으로 관리한 경험이 있습니다.

활동

하나은행 디지털하나路

🏕️ 하나은행 디지털하나路 3기

우수 수료 (2024.01 ~ 2024.07)

6개월간 FrontEnd, BackEnd, 프로젝트 개발로 세분화된 웹 개발 교육을 받으며, 디지털 금융 서비스에 대한 이해와 경험을 쌓았습니다. JavaScript, TypeScript, React를 활용한 프론트엔드 개발과 SpringBoot, MySQL을 활용한 백엔드 개발 등 실무적인 웹 개발 교육을 통해, 실제 프로젝트에서 요구되는 구체적인 기술과 경험을 접했습니다. 또한 2차례 팀 프로젝트에서 팀장을 맡아 기획, 개발, 배포의 개발 프로세스를 진행해 협업 및 의사소통 능력을 키울 수 있었습니다.

학력

홍익대학교

🏫 홍익대학교 컴퓨터공학과

졸업유예 (2018.03 ~ 2025.02)

4년간 대학교에서 컴퓨터공학을 전공하면서 웹 개발에 대한 기본적인 이해와 경험을 쌓았습니다. C, C++, Java 등 다양한 프로그래밍 언어들의 문법을 익혔으며, 자료구조, 알고리즘, 네트워크, 운영체제, 소프트웨어공학 등과 같은 전공 과목들을 통해 컴퓨터과학에 대한 기초적인 지식을 습득하였습니다.

자격증

📄 SQLD

취득 (2024.04)

SQLD 자격증 취득을 통해 DB 설계 및 구축 능력을 갖추고, DB 관리 및 데이터 분석 능력을 향상시킬 수 있었습니다.

📄 OPIC

IM1 (2023.08)

OPIC 자격증 취득을 통해 영어 회화 능력을 향상시킬 수 있었고, 국제적인 업무 환경에서의 의사소통 능력을 갖출 수 있었습니다.

기타

👥 홍익대학교 교내동아리 민화반

회장 (2022.03~2024.02)

🪖 대한민국 공군

병장 만기 전역 (2019.02~2020.12)

👥 홍익대학교 컴퓨터공학과 과학생회

복지부원 (2018.03~2019.02)