미리보기
기본 정보
공식문서를 기반으로 차근차근 나아가는 개발자입니다. 러닝커브가 가파른 기술에 몰입하여 공부하는 것을 좋아합니다. 공식문서에서 찾을 수 없는 것들은 공식 github 예제를 보고 사용되는 인터페이스의 구현체 코드를 보거나 해당 Javadoc를 찾아보며 공부했습니다. 추상화된 기술은 구현체를 정확히 알고 사용하는 것을 선호합니다.
기술 스택
Spring Boot, Spring, Spring Security, ubuntu, hibernate
경력
주식회사 엔이에스
인턴
2021.12. ~ 2022.01. (2개월)
교내 ICT 인턴십
공장 내부 견학 및 임베디드 코드, 장치 별 라즈베리 파이를 보고 구조 파악
해당 장치에서 생산되는 물품 개수를 표시하는 ERP 페이지 백엔드 유지보수
생산되는 물품 별 개수, 재고, 상태를 출력하기 위한 페이징 쿼리 작성
대한민국 육군
전산반장 | 통신중대
2017.11. ~ 2019.02. (1년 4개월)
AIX 기반 WAS, DBMS HACMP 이중화 서버 관리.
Windows MFC 기반 클라이언트 장애해결
JEUS 기반 WAS 외부 프로세스 의존성으로 인한 장애해결
네트워크, 전산장비 장애해결
위 직무 기반 후임양성 및 매뉴얼 작성
프로젝트
Groom
SW 마에스트로
2022.04. ~ 2022.12.
위치 기반 프로젝트 작업 관리 서비스 앱
Spring을 사용해 완성해 본 첫 프로젝트
Spring Security를 이해하고 인증인가를 손쉽고 빠르게 구현
사용자 일정 취합 및 빈 일정 산출 로직 구현
전달받은 위, 경도를 기반으로 GPS 오차범위 이내인지 검증하는 로직 구현
산출물, 모임 도메인 구현
메인 아이디어 제공 및 서비스 기획에 참여
스프링 학습은 김영한님 강의를 2개월간 들었으며, 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵, 우아한형제들 최연소 기술이사 출신 김영한의 스프링 완전 정복 중 MVC 1,2강을 제외하고 모두 수강하였습니다.
스프링 시큐리티 학습은 정수원 강사님의 스프링 시큐리티 를 2주간 수강하였으며, 최신 버전과 다른 부분이 있어 공식문서를 참고해 해결했습니다.
충림이
CMI
2021.04. ~ 2022.09.
교내 공지사항 구독 알림 서비스
NestJS기반 백엔드로 완성해본 첫 프로젝트
타입스크립트와 DI 컨테이너 프레임워크에 적응하고 매력을 느낀 프로젝트
Filter와 Guard를 통해 예외처리 및 인증인가를 구현했습니다.
인가를 위한 데코레이터를 구현했습니다.
TypeORM으로 Cafeteria, CafeteriaMenu, Place 엔티티를 작성하고 CRUD를 구현했습니다.
학습은 당시 오픈돼있던 NestJS 공식문서를 보며 실습했으며, 1:N매핑, query builder등 필요시 TypeORM 공식문서를 참고했습니다.
충북대학교 Online Judger
충북대학교
2021.01. ~ 2022.03.
교내 알고리즘 풀이대회에 사용할 플랫폼을 MEAN 스택으로 구축하는 프로젝트입니다. [현재는 Next JS로 리뉴얼 중]
첫 웹개발 프로젝트
6개월간 교수님의 멘토링을 받으며 Express + Mongoose 기반 인증인가 및 첨부파일 등 기초적인 기능 구현을 실습하며 백엔드에 대한 지식을 길렀습니다.
과제기능 설계 및 구현 담당. 기존 채점 프로세스에 사용되는 kafka js를 짧게나마 다루어보았고 메세징 기반 pub sub 구조를 체험해볼 수 있었습니다.
배포에 참여하면서 도커, 리눅스, 컨테이너 환경과 시스템 환경변수를 활용하는 경험을 할 수 있었습니다.
배포 후 기존 API별로 단일 서비스에 메소드로 구현되어 존재하던 중복 코드들을 모듈화하며 레이어드 아키텍쳐로 리팩토링했습니다.
포트폴리오
교육
충북대학교
대학교(학사) | 소프트웨어학과
2020.02. ~ 현재 | 재학 중
대외활동
SW마에스트로
사단법인 한국정보산업연합회
서버 지원비, 실제 현업에서 종사하시는 멘토분들과 함께 기획부터 서비스 배포까지 경험할 수 있는 프로그램입니다.
저희 팀은 Groom이라는 협업관리 서비스였으며, 무임승차 방지라는 아이디어를 가지고 위치기반 알림,
기프티콘과 모임비 사전결제 아이디어를 구체화했습니다.
충북 AI스쿨 3기
충북과학기술혁신원
2개월간 Data transformation, scikit-learn을 활용한 머신러닝, 케라스를 활용한 DNN,CNN, RNN을 학습했습니다.
종료시점에 수료자 대상 캐글챌린지에서 장려상을 수상했습니다.
자격증
정보기기운용기능사
기능사 | 한국기술자격검정원
2015.04.
정보처리기능사
기능사 | 한국기술자격검정원
2015.10.
자기소개
[가진 지식을 고도화하고 응용하여 문제를 개선하고 해결하여 성취하는 점이 좋습니다.]
처음 웹 개발을 접할 때 컴퓨터를 사용하면서 자연스럽게 익힐 수 있었던 지식이 계속해서 활용되는 점이 좋았습니다. 네트워크-하드웨어-운영체제에서 문제를 해결하고 얻은 지식을 통해 Judger 웹 개발을 할 때 기초 개발환경 세팅, 클라이언트와 앱 서버의 통신, CSR + REST API 구조를 이해하며 성장하는 즐거움을 얻었습니다.
구조를 이해하고 문제를 해결한 뒤 팀원들과 공유하면서 함께 고도화할 수 있다는 점이 좋습니다. 운영체제 수업 때 배운 비동기, 스레드를 통해 이벤트루프 기반인 Node.JS에서 응답속도를 저해하는 원인을 식별했습니다. 이에따라 채점과 같은 CPU비용이 큰 로직을 다른 프로세스에 분리해 카프카 컨슈머로 지정하는 설계를 고안했고 팀원, 교수님과 공유했으며 토의를 통해 키워드를 얻어 카프카 메시지 큐를 학습하고 pub/sub으로 설계했습니다.
backend/judger 컨슈머들은 docker compose scale 옵션을 통해 올렸으며 각 컨슈머는 node의 클러스터 기능으로 한 컨테이너에서 동시에 사용 가능한 CPU 워커개수 만큼의 이벤트를 처리할 수 있게 했습니다.
제로 페이로드 방식을 통해 마찬가지로 이벤트루프 기반인 몽고디비를 사용중이었기에 상태를 변환하고 작업을 처리하는 방식으로 구현했습니다.
어떤 곳에서 문제가 발생하면 해당 제출건에 대한 채점을 수동으로라도 처리하거나 제출된 코드상의 문제를 파악하기위해 위해 로깅은 worker의 pid를 통해 추적할 수 있도록 했습니다.
완료건에 대해서는 backend/judger-api에도 컨슈머를 두어 채점프로세스가 프로듀서로써 이벤트를 발행하고 데이터 수정은 API를 통해 수행하도록 했습니다. 지금 생각해보면 REST API가 좀 더 적합했다고 생각합니다.
이처럼 팀원들과 지식을 공유함과 동시에 요구사항을 만족하기 위한 더 좋은 설계에 접근하면서 고양감을 얻을 수 있었습니다.
저는 일을 하면서 이런 즐거움을 얻을 수 있다는 건 큰 행운이라고 생각합니다. 이런 행운을 얻은 만큼 개발자가 되어 제가 겪은 문제를 겪는 사람이 줄어들도록 좋은 서비스를 개발하고 싶습니다.
[마주치는 문제를 포기하지 않고 기초부터 차곡차곡 쌓아가며 해결합니다.]
하나하나 원리를 파악하고 이해하는 것이 즐거워 마치 나무 위키의 역 링크를 타고 관련된 문서들을 읽는 것처럼 관련된 키워드를 검색해가며 공부를 했습니다.
예를 들어 공유기 사용 시 프로그램이 사용하는 포트에 대해 공유기 공인 IP의 해당 포트를 PC의 사설 IP의 포트에 포트 포워딩을 해야 실행할 수 있다는 글을 시작으로 네트워크에 관련된 키워드를 검색하며 익혔습니다. 이는 정보기기운용기능사를 취득할 수 있는 기반을 마련해주었습니다. 이렇게 다져진 학습 자세와 네트워크 기반 지식은 군 복무를 할 때 학습을 이어나가는 원동력이 되었습니다.
군 복무를 하면서 MFC 클라이언트, 네트워크 및 IBM AIA 기반 온 프레미스 서버 유지보수 및 장애 조치를 수행했습니다. 처음 마주친 문제에 대해서 낭비되는 시간을 줄이기 위해 예비 서버를 이용하여 알아낸 키워드들을 기반으로 학습계획을 세웠습니다. 일과 시간이 끝난 후에 시간을 투자하여 클라이언트, 네트워크, 운영체제, WAS, DBMS 간의 상호작용을 문서로 만들었습니다. 이 문서를 바탕으로 여러 가지 사례를 만들고 발생한 오류 상황의 키워드와 현상을 기록했습니다. 이 과정을 통해 배운 지식을 팀원들에게 지식공유를 하며 학습한 지식을 견고하게 만들고 빠른 대응이 가능하게 했습니다.