채용공고 올리기

김준호님을 응원해보세요!

지금 만족하고 있어요

미리보기

기본 정보

이름
김준호
직업
주니어 백엔드 개발자
간단 소개

42서울에서 학습한 주니어 백엔드 개발자입니다. 핵심 CS 지식을 Low-Level 언어로 직접 구현하며 학습했고, 동료들과 서로 코드를 설명하고 다른 사람의 코드를 읽는 것을 꾸준히 연습해왔습니다. 빠른 학습과 성장은 탄탄한 기초에서 시작한다고 생각합니다. 사람들이 겪는 문제를 해결하기 위한 동아리를 만들었고, 팀 리더로서 웹 서비스를 기획/개발/배포/운영하였습니다. 5개월간 430명 중 월평균 130명의 활성 사용자를 확보하는 성과를 통해 사람들의 문제를 해결한 경험이 있습니다. 소프트웨어로 불필요한 수동 작업과 반복을 자동화하는 것을 좋아합니다. 매월 갱신되는 API 키 수동 업데이트 작업을 자동화한 경험이 있습니다.

기술 스택

기술 스택

C, C++, JavaScript, Node.js, express.js, HTML/CSS, tailwind-css, Docker, docker-compose, ec2, Linux, Git, Notion

프로젝트

프로젝트명

LV42

소속/기관명

42Seoul

프로젝트 기간

2024.02. ~ 2024.04.

프로젝트 내용

42Seoul 콘솔 게임 시설 예약 서비스

4인 프로젝트, 팀 리더 담당

GITHUB : https://github.com/Rillmo/lv42-Backend
WEBSITE : https://level42.kr

FE : React, Recoil, TailwindCSS
BE : Express.js, JavaScript, Swagger, MongoDB, Redis
DevOps : Docker, AWS EC2, Git Action


  • BE(Node.js) 및 퍼블리싱(Tailwind CSS)을 담당함

  • 현재 예약 현황 조회, 예약 및 취소 REST API 구현

  • 콘솔 게임기 및 컨트롤러 고장 신고 서비스 구현 : 현재 고장 상태 확인, 고장 신고하기 REST API 구현

  • Swagger 로 API 명세를 코드화, 서비스의 특정 endpoint에서 API 테스트가 가능하도록 함

  • 순수 CSS로 반응형 디자인 제작, 이후 Tailwind CSS로 리라이팅해 유지보수 개선

고민했던 부분

  • 초기에는 코드 통합 과정에서 여러 번의 충돌이 발생했습니다. 이를 해결하기 위해 계층형 아키텍처로 코드 구조를 재설계하여 코드 관리의 효율성을 높였고, 이후 코드 충돌을 현저히 줄였습니다.

  • REST API 전반을 설계하고, 이후 확장성을 고려해 mongoDB를 채택하여 CRUD를 구현했습니다. 초기에는 Notion으로 API 명세를 작성했는데, 문서작업의 비효율을 느껴 코드 주석으로 웹 API 명세를 확인하고 테스트할 수 있는 swagger 라이브러리를 도입했습니다.

  • 팀 리더로서 로그인 인증/인가, SEE 도입, 자동완성 설계 등 기술 회의를 주도했고, 팀원들과 함께 고민하며 문제를 해결한 경험이 있습니다.

프로젝트명

LV42 API 업데이트 자동화

소속/기관명

42Seoul

프로젝트 기간

2024.05. ~ 2024.05.

프로젝트 내용

LV42 월간 API key 업데이트 자동화

개인 프로젝트

GITHUB : https://github.com/Rillmo/lv42-api-key-automation

JavaScript, Selenium, Shell, AWS EC2


  • Selenium 으로 42API 페이지에서 API key 갱신 및 크롤링

  • 로컬 환경에 key를 저장, shell script로 aws ec2에 접속해 자동 업데이트 수행

고민했던 부분

  • 팀원들이 매달 수동으로 API 키를 갱신해야 하는 반복 작업이 존재했습니다. 반복 작업의 비효율을 줄이기 위해 작업을 자동화했고, 이를 통해 팀원들의 피로도를 줄이고, 서비스 중단 가능성을 낮춰 사용자 경험을 개선했습니다.

  • 서비스 관리자의 42API 페이지에 로그인 후, 등록된 key를 재발급 및 복사해와야 하는데, 서버에서 안전하게 업데이트 할 방법을 찾지 못해 로컬에서 업데이트 할 방법을 고민했습니다.

  • 로컬에서 Selenium 웹 크롤링 툴을 활용해 환경변수에 저장된 id,pw로 로그인→재발급→변수에 복사하는 과정을 거치고, key를 파일에 저장했습니다. shell script로 ec2 로그인 및 key 재설정 후 key 파일을 삭제하는 방식을 통해 로컬에서 안전하게 자동화에 성공했습니다.

  • API 키 갱신 작업 중 Selenium을 통해 자동화하는 과정에서 종종 페이지 렌더링 지연으로 인해 키 갱신이 실패하는 경우가 있었습니다. 이를 해결하기 위해 페이지 로딩 대기 시간을 조절하고, 실패 시 재시도 로직을 추가해 갱신 성공률을 높였습니다.

  • 매월 해당 script를 수행하기 위해 crontab를 활용해 주기를 설정했습니다.

  • 로컬에서만 동작하기 때문에 서비스 관리자의 로컬 환경에 종속적이라는 단점이 있는데, git action 또는 EC2 환경에서 동작하도록 변경하고, discord/slack API 등을 활용해 알림을 전송할 수 있도록 추후 개선하고자 합니다.

프로젝트명

Inception

소속/기관명

42Seoul

프로젝트 기간

2024.06. ~ 2024.07.

프로젝트 내용

Docker compose를 활용한 웹 애플리케이션 환경 구축

개인 프로젝트

GITHUB : https://github.com/Rillmo/lv42-api-key-automation
Docker, Docker Compose, NGINX, WordPress, MariaDB, Debian, Makefile


  • 멀티 컨테이너 환경에서 wordpress, mariadb, nginx를 사용해 웹 애플리케이션 구축

  • 각 컨테이너의 Dockerfile을 모두 직접 작성함 (base image Debian 제외)

  • Docker network와 Docker volume을 생성 및 관리할 수 있는 Docker compose file 작성

  • 자체 SSL/TLS 인증서를 발급해 HTTPS 환경 구축

고민했던 부분

  • Docker-compose로 각 데이터 영속성을 위해 각 서비스를 host 디렉토리에 바인딩시켜 사용했었는데, docker가 아닌 host에 종속되는 문제가 있었습니다. docker volume을 생성해 각 서비스에 연결하는 방법으로 해결했습니다.

  • Docker-compose에서 프로세스 자원이 제대로 회수되지 않고, 시그널 처리가 불가능하다는 문제를 발견했고, Tini 를 사용해 1번 프로세스의 자식으로 실행되도록 변경해 해결했습니다.

프로젝트명

IRC

소속/기관명

42Seoul

프로젝트 기간

2024.05. ~ 2024.06.

프로젝트 내용

C++로 구현한 IRC 소켓 통신 서버

2인 프로젝트

GITHUB : https://github.com/Rillmo/IRC

C++, Socket I/O, Makefile


  • IRC 프로토콜을 기반으로 한 서버 제작을 담당함

  • IRC 프로토콜이 명시된 RFC 문서를 참고함

  • I/O Multiplexing, Non-Blocking I/O를 구현함

  • Factory Pattern을 사용해 C++의 객체지향적 장점을 활용함

고민했던 부분

  • 서버에 들어오는 입력을 각 커맨드로 변환하고 커맨드를 실행해야 하는데, 커맨드 별로 요구하는 정보가 달라 설계 방식을 고민하던 중, Factory Pattern을 도입하게 되었습니다. 이를 통해 확장성을 확보하고, 객체 생성의 일관성을 확립해 협업과 유지보수 편리성을 개선했습니다.

  • I/O Multiplexing을 도입하면서 동시에 여러 클라이언트를 처리하는 방법에 대해 고민했습니다. 기존의 select() 방식은 모든 소켓을 순회하며 모니터링해 O(n)의 복잡도를 가지고, file descriptor 개수가 제한되는 단점이 있었습니다.

  • kqueue() 시스템 콜을 사용하도록 변경해 여러 소켓을 효율적으로 모니터링하고, Non-Blocking I/O를 설정하여 작업 가능한 경우에만 처리할 수 있도록 했습니다.

  • 이를 통해 서버의 동시 접속 처리 능력과 전체적인 성능을 크게 향상시켰습니다. kqueue()의 사용으로 이벤트 기반 프로그래밍의 장점을 직접 경험할 수 있었고, 대규모 네트워크 애플리케이션 설계에 대한 이해도를 높일 수 있었습니다.

프로젝트명

Minishell

소속/기관명

42Seoul

프로젝트 기간

2023.12. ~ 2024.01.

프로젝트 내용

Bash Shell 구현 프로젝트

GITHUB : https://github.com/Rillmo/Minishell

C, Bash Shell


  • 문자열 입력을 커맨드로 파싱하는 부분을 담당함

  • Lexical Analysis, Syntax Analysis로 요구사항에 맞는 AST를 구현해 사용

고민했던 부분

  • 단순 문자열 입력에서 redirect, command, pipe 등을 구분해 실행해야 하는데, 이를 단순 문자열 순회로 구분하기 어려워 해결 방법에 대해 오랫동안 고민했습니다.

  • GNU Bash 매뉴얼을 참고해 문법 구조를 파악했고, 이를 토대로 Lexical Anaylsis, Syntax Analysis를 수행해 AST를 만들면 일관성 있게 파싱을 수행할 수 있을 것이라고 판단했고, 실행부에서도 쉽게 구문을 파악 가능하기 때문에 이러한 방식을 도입했습니다.

  • 문제를 해결하기 이전에 관련한 매뉴얼이나 공식 문서를 파악하는 습관을 가질 수 있었고, Shell 동작 원리를 대해 깊게 이해할 수 있었습니다.

교육

소속/기관명

42Seoul

종류 | 전공

사설 교육 | 소프트웨어

재학 기간 | 재학 상태

2023.10. ~ 현재 | 재학 중

자격증

자격증명

SQLD

점수 | 발급기관

개발자 | 데이터자격검정

취득연월

2019.12.

자기소개

자기소개

갈등과 소통

42 과정에서 콘솔 게임 동아리 LV42를 만들어 팀 대표로 운영하였는데, 개발 과정에서 여러 갈등을 겪었습니다. 그 예로 jwt 인증/인가 처리 방식에 대해 논의할 때, 보안성 있는 처리를 고민하다 보니 문제가 복잡해졌는데, 서로 이해하는 내용이 달라 언쟁이 생겼습니다. 논의 중간에 주기적 휴식 시간을 갖고, 팀의 의견을 정리해 생산적인 방향으로 이끌었던 경험이 있습니다.

사람들의 문제를 해결할 수 있는 서비스

저는 사람들의 문제를 해결하는 데 큰 즐거움을 느낍니다. 42서울 과정에서 주어진 과제뿐만 아니라 실제 문제를 찾아 해결한 경험이 있습니다. 42서울의 콘솔 게임기에 사람들이 지나치게 몰리는 현상을 발견하고, 이를 해결하기 위해 동아리를 만들어 게임기 예약 웹 서비스 LV42를 개발했습니다. 소프트웨어로 실제 문제를 해결할 수 있는지 확인하고 싶었고, 5개월간 430명 중 평균 130명의 활성 사용자를 달성해 입증했습니다.

학습과 성장

처음 프로그래밍을 접할 때에는 이론이 선행된 후, 구현해보는 방식으로 학습했었습니다. 이러한 학습 방법이 쉽게 지치고 흥미를 잃는 것을 느꼈고, 저만의 학습 방법을 찾기 위해 학습법을 바꿔보는 노력을 꾸준히 해왔습니다. 먼저 기술을 활용해 간단한 서비스를 구현해 보고, 적당한 깊이를 정해 학습하면서, 추가로 공부하고자 하는 부분을 기록해 두고 이후에 다시 공부해보는 방식을 채택해 학습하고 있습니다.

댓글