미리보기
기본 정보

개발보다 '개발 일'을 잘할 수 있는 사람입니다. 단순히 소프트웨어 역량만 높은 것이 아니라, 효과적인 의사소통과 협력으로 팀과 일관된 방향으로 일하며, 주도적으로 목표를 설정하고, 달성을 위해 스스로 의사결정 할 수 있는 능력이 있습니다. 누구보다 강한 추진력과 집중력으로 일합니다. 새로운 일을 추진하고, 실험 및 검증하고, 운영하는 것을 좋아합니다. 팀과 함께 집중력 있게 과제를 완수할 때 가장 즐겁습니다.
기술 스택
C, C++, HTML/CSS, Docker, docker-compose, Linux, Git, Spring Boot, Java, AWS, Flutter, riverpod, Firebase, TailwindCSS
경력
JUNEAI
사원 | 플랫폼 개발팀 | 재직 중
2024.10. ~ 재직 중 (5개월)
App : Flutter, Riverpod
BE : Spring boot, PostgreSQL
소셜 로그인시 불필요한 해싱 작업 제거를 통해 유지보수성을 개선했습니다.
사용자 인증 JWT 재발급 API의 보안 이슈를 발견하고, 검증 로직을 추가해 심각한 보안 문제를 예방했습니다.
IAP(인앱결제) 구현 및 유효성 검증을 위해 백엔드에서 IAP 제공자 측 영수증 검증을 도입해, 비정상 결제를 차단했습니다.
git action과 fastlane으로 CI/CD 파이프라인을 구축해 개발 및 테스트 효율성을 극대화했습니다.
admob으로 광고보기 기능을 구현하고, 보상형 광고를 도입해 광고 시청 회피를 방지했습니다.
프로젝트
LV42
42Seoul
2024.02. ~ 2024.04.
42Seoul 콘솔 게임 시설 예약 서비스
4인 프로젝트, 팀 리더
GITHUB : https://github.com/Rillmo/lv42-Backend
WEBSITE : https://level42.krFE : React, Recoil, TailwindCSS
BE : Express.js, JavaScript, Swagger, MongoDB, Redis
DevOps : Docker, AWS EC2, Git Action
Backend을 담당함
현재 예약 현황 조회, 예약 및 취소 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. ~ 2024.10. | 졸업
대외활동
이노콘 IITP 원장상 수상
이노베이션 아카데미 (42서울)
42서울의 게임기 예약 및 관리 서비스를 운영하는 팀 LV42의 리더로, 2024 이노콘에서 교육생 이용률 부문 IITP 정보통신기획평가원 원장상을 수상했습니다.
자격증
SQLD
개발자 | 데이터자격검정
2019.12.
자기소개
'개발 일'을 잘할 수 있는 사람
단순히 '개발'만 잘하는 것이 아닌 '개발 일'을 잘할 수 있는 사람입니다. 같은 비전과 목표를 공유하고, 소통하며 일할 때 가장 큰 임팩트를 낼 수 있다고 생각합니다. 문제에서 해결방법을 찾고, 일을 추진하고, 완성을 위해 집중력 있고 빠르게 일하는 것을 좋아합니다.
사람들의 문제를 해결할 수 있는 서비스
42서울의 콘솔 게임기에 사람들이 지나치게 몰려 불편함이 있었습니다. 제가 느낀 문제를 해결하기 위해 시작한 프로젝트가 팀이 되어 게임기 예약 웹 서비스 LV42를 개발했습니다. 평균 이용률 30% 이상을 기록했고, 그 성과로 정보통신기획평가원 원장상
을 수상했습니다.
필요한 모든 것을 배울 수 있는 사람
서비스에서 기술은 수단일 뿐, 목적이 아니라고 생각합니다. 하지만 목적을 위해 필요한 기술을 배우는 것에는 언제나 자신있습니다. 가장 효과적인 성장 방법은 동료학습이라고 생각해, 개인 학습 뿐만 아니라 스터디처럼 서로 배울 수 있는 환경에 적극적으로 참여해왔습니다.