강민호

백엔드 엔지니어

About Me

~ 좋은 개발은 읽기 좋은 코드에서 나온다. ~
프로그래밍뿐만 아니라 프로젝트를 진행하는 과정에서 협업 방식, 프로젝트 관리 방식 등의 기술들이 매우 중요하다고 생각합니다. ‘코드는 사람이 이해하기 쉽게 읽는 것’이라는 마음가짐으로 클린 코드를 지향합니다.
서비스의 품질을 위해서는 TDD가 매우 중요하다고 생각합니다. TDD를 지향하여 최대한 다양한 예외 상황과 버그에 대해 대응하려고 테스트 코드에 작성에 대해 노력하고 있습니다. 프로젝트가 어떤 것이 부족하고 개선해야 되는지 항상 생각하여 발전해 나가고 있습니다.

Skills

SpringBoot

  • SpringBoot를 사용해 서비스를 만든 경험을 가지고 있습니다.
  • WebMVC, WebFlux, Spring Cloud(MSA) 사용 경험을 가지고 있습니다.
  • 테스트 환경을 구축할 수 있습니다.

Java

  • Junit를 사용해 단위테스트를 할 수 있습니다.
  • 기초적인 Reactive 프로그래밍 사용할 수 있습니다.

Database

  • MySQL, PostgreSQL, MongoDB 사용 경험을 가지고 있습니다.
  • Redis로 Cache 사용 경험을 가지고 있습니다.

DevOps

  • GitHub Actions를 사용해 CI/CD를 자동화 할 수 있습니다.
  • Jira, Slack, Notion을 사용하여 프로젝트 관리 경험이 있습니다.
  • AWS EC2, GCP를 사용한 서비스 경험이 있습니다.

Projects

선인장

2022.01 ~ 2023.02

Description

평소에 결정을 잘 못 하는 사람들을 위해 만든 커뮤니티 어플입니다.
고민거리에 대해 투표를 통하여 사용자의 결정을 도와줍니다.

What Did I Do

  • 커뮤니티 API 구현
  • Exception Handler 구현
  • 사용자 인증 구현
  • 프로젝트 구조 구축
  • 테스트 환경 구축
  • 개발 환경 분리
  • CI/CD 자동화 구축

Result

소셜로그인 기능에 대응이 가능한 플랫폼 확장

  • 기존에는 백엔드에서 인증, 인가, 자원 요청 단계를 모두 처리하였기 때문에 안드로이드에서는 해당 방식 대응이 어렵다
  • 이를 해결하기 위해 클라이언트가 인증/인가의 단계를 수행하도록 Authorization 서버에 요청해 AccessToken 발급 후 백엔드에 요청
  • 백엔드에서 해당 AccessToken을 가지고 Resource 서버에 요청해 사용자 정보를 받아 소셜로그인 구현
  • Resource 서버에 요청해 특정 플랫폼을 위한 소셜로그인 기능을 가진 API 구현

프로젝트 아키텍처 개선

  • 하나의 Service에는 여러 Repository를 가지고 있기 때문에 많은 책임(기능)을 가지고 있음
  • 하나의 Service에는 많은 책임(기능)을 가지고 있어 스파게티 코드가 될 위험이 높았음
  • 하나의 Service에는 하나의 Repository를 가져야한다는 규칙 생성
  • 해당 규칙으로 Service들을 분리시켜 책임(기능)을 분할해 해결
  • 해당 규칙으로 인해 특정 Service에서 타 Service 기능이 필요함에 따라 계층간 구조 개선이 필요
  • Controller에서 특정 Service의 결과를 타 Service로 전달해주는 조합 방식으로 구조를 정의하여 해결

What Did I Learn

  • Oauth2 방식
  • 민감 정보 관리
  • 개발 환경 분리
  • 프로젝트 협업 방식
  • MVC 아키텍처 설계

TechStack

SpringBoot, Java, Kotlin, PostgreSQL, Redis , Docker

EasyHost

2022.06 ~ 2022.08

Description

쉽게 일반 서버, 게임 서버 등의 구축을 위한 VPS 호스팅 서비스입니다.

What Did I Do

  • 토스 페이먼츠를 이용한 결제 시스템 구현
  • 본인인증 시스템 구현
  • VPS 서비스 연동 구현
  • CI/CD 자동화 구축
  • 테스트 환경 구축

Result

서비스 품질 개선

  • 테스트 환경이 갖추어지지 않아 배포 시 빈번한 버그 발생으로 불안정한 서비스로 이어짐
  • 테스트 환경 구축으로 신뢰성 있는 서비스 제공으로 해결

What Did I Learn

  • API 문서의 중요성
  • 테스트 코드의 중요성
  • 다양한 예외처리에 대한 중요성

TechStack

NestJs, TypeScript, Jest, MariaDB, Docker

Experience

Google Developer Student Clubs
(GDSC DJU)

1기 Member

2022.02 ~ 현재

https://web.gdsc-dju.com/

학생들이 개발 및 협업 능력을 기를 수 있도록 다양한 프로젝트 및 활동하는 동아리입니다.

동아리 문화

  • 모든 활동 내용을 멤버들에게 공유
  • 칭찬 시스템
  • 누구나 활동을 주도할 수 있는 환경
  • 수평적인 문화

내가 활동한 것

  • 선인장 프로젝트
  • 동아리 슬랙 봇 개발 및 관리
  • 백엔드 스터디
  • 개발 지식 공유

지능정보시스템
(인공지능) 연구실

랩장

2016.08 ~ 2023.02

https://notion.ai.re.kr/

인공지능에 대해 다양한 프로젝트와 활동을 진행하는 연구실입니다.

랩장이 되기까지

  • 랩실에서 진행하던 프로젝트로 다양한 대회에 참가하자고 제안하여 참가함.
  • 랩원의 실력향상을 위한 프로젝트 활동 개설.
  • 랩실의 프로젝트 관리 체계를 변경
    • 기존 프로젝트 관리는 구두 혹은 카카오톡으로만 관리가 되었음
    • 이로 인해 회의를 진행해도 프로젝트의 개발 목표가 자주 변경되거나 잊어버리는 문제 발생
    • 따라서 모든 프로젝트 관리 및 협업을 Jira와 스크럼 방식으로 변경하여 해결함

참여 프로젝트

  • Bllearn 프로젝트 (교내 캡스톤 디자인, 창의적 종합설계 과제 등 수상)
  • 여행고수 프로젝트
  • 2021 항만 물류 인공지능 학습데이터 해커톤 - 최우수상

Education

대진대학교

2016.03 ~ 2023.02

컴퓨터공학전공

최종 학점 : 4.31 / 4.5

Certificate

정보처리기사

2022.06

정보처리기능사

2017.12

Military Service

육군 포병 만기제대

2017.02 ~ 2018.11