미리보기
기본 정보
기술 스택
Java, Spring Boot, MySQL, Oracle, mybatis, JavaScript, HTML/CSS
경력
(주)토탈소프트뱅크
사원 | CATOS 개발팀
2021.04. ~ 2023.08. (2년 5개월)
회사 소개:
1988년 설립된 당사는 지능형 컨테이너 터미널 운영 시스템인 케이토스(CATOS)를 통해 전 세계 90여 개 컨테이너 터미널에서 솔루션을 제공하고 있는 해운 항만 물류 산업의 중소기업입니다.
주요 업무:
TOS 웹 애플리케이션 및 웹 서비스의 백엔드/프론트엔드 개발과 유지보수
백엔드: Java, Spring, MyBatis, Oracle, MySQL
프론트엔드: JavaScript, Sencha
진행 프로젝트:
대만 웹 애플리케이션 포팅
(2023.06 - 2023.08, 개발 2명, 기여도 70%)
기존 웹 애플리케이션 코드를 대만 터미널에 포팅 및 DB 덤프
선사, 터미널, 트럭 기사 등 사용자별로 통계 테이블을 사용하도록 화면 구성 및 스케줄러 구현하여 주기적으로 데이터를 통계 테이블에 저장. 데이터베이스 부하를 최소화하고 대용량 데이터를 효율적으로 조회
KISA SW 보안 약점 진단 및 스패로우 도구를 사용해 10여 개의 보안 취약점을 발견 및 수정하여 시스템의 안전성을 확보
케냐 웹 서비스 개발
(2022.06 - 2022.08, 개발 1명, 기여도 100%)
API 통합 설계 및 개발
기존 SOAP 서비스를 RESTful API로 전환
케냐 현지 출장으로 현지 PM과 협력하여 서비스 안정화에 기여
외부 API 데이터 수집 및 DB 갱신 스케줄러
(2022.01 - 2022.03, 개발 1명, 기여도 100%)
Spring 스케줄러와 Quartz를 사용해 외부 API로부터 정기적으로 JSON 데이터를 수집하는 기능 개발
수집한 데이터를 기반으로 PL/SQL 프로시저를 호출하여 DB 갱신
중복 데이터 처리 및 데이터 유효성 검증 로직 구현
프로젝트
MIKO, 실시간 회의 도우미 서비스
SW사관학교정글
2024.06. ~ 2024.07.
기능
화상회의 및 실시간 STT 제공
회의 중 실시간으로 키워드를 추출하고 네트워크 그래프로 시각화하여
중간에 합류한 사용자가 맥락을 쉽게 파악할 수 있도록 지원결과페이지에서 회의록 및 음성기록 제공
역할
OpenVidu 서버와 nest.js 서버를 EC2와 heroku에 배포
STT와 키워드 추출 MVP 구현 (STT는 클로바, OpenAI Whisper, 리턴제로를 비교 분석하여 리턴제로를 선택, 키워드 추출은 ChatGPT API 선택)
Socket.IO를 사용해 실시간 소켓 통신 및 room 생성
프로젝트 기여
SSE(Server-Sent Events)를 활용해 회의록을 실시간으로 제공하여, 새로고침 없이 업데이트된 결과 페이지를 볼 수 있도록 개선.
ChatGPT 프롬프트를 통해 3단계 깊이의 키워드를 계층 구조로 표시하도록하여 중간 참여자의 맥락 파악을 용이하게 함.
데이터를 배치로 전송하고 비동기 처리하여, 렌더링 속도를 개선하고 첫 응답 시간을 500ms 단축.
포트폴리오
교육
팀스파르타, KAIST
사설 교육 | SW사관학교 정글
2024.03. ~ 2024.07. | 졸업
부산대학교 산학협력단
사설 교육 | 블록체인 개발자 교육 과정
2020.10. ~ 2021.03. | 졸업
동아대학교
대학교(학사) | 행정학과
2013.03. ~ 2021.03. | 졸업
자격증
정보처리기사
기사 | 한국산업인력공단
2024.06.
SQL 개발자
기타 | 한국데이터산업진흥원
2022.09.
자기소개
지원동기 및 입사 후 포부
저는 데이터 처리와 레거시 시스템 고도화에 강점을 가진 개발자입니다. 스케줄러 프로젝트에서 외부 API 데이터를 자동으로 수집해 DB를 정기적으로 갱신하는 시스템을 개발했습니다. Spring 스케줄러와 Quartz를 사용해 데이터 수집 과정을 자동화하고, PL/SQL 프로시저를 통해 데이터를 갱신했습니다. 또한, 성능 최적화를 위해 데이터베이스 인덱싱을 고려한 쿼리 설계로 데이터 삽입 속도를 대폭 개선한 경험이 있습니다.
이후, 터미널 운영 시스템 개발 프로젝트에서는 레거시 시스템의 보안 문제를 해결하고 성능을 향상시키는 작업을 맡았습니다. Spring, Java, MyBatis를 사용해 시스템 유지보수를 진행하며, 스트럭츠 프레임워크로 개발된 레거시 시스템을 유지보수한 경험도 있습니다. 특히 KISA에서 진행한 중소기업 보안 적용을 맡아 스패로우 도구로 취약점을 대응하였으며, 10여 개의 보안 취약점을 발견 및 수정하여 시스템의 안전성을 확보한 경험이 있습니다. 또한 저는 카이스트 정글에서 진행한 MIKO 프로젝트에서 Nest.js와 Flask를 활용해 실시간 화상회의 시스템을 구축하며 SSE 방식을 도입해 실시간 데이터를 제공함으로써 사용자 경험을 크게 향상시킨 경험이 있습니다. 이러한 경험을 바탕으로, 귀사의 솔루션 개발에 기여하고 싶습니다.
성격의 장단점
저는 목표를 세우면 끝까지 포기하지 않고 완수하는 성향을 가지고 있습니다. 예를 들어, 부산 수영강을 따라 42km를 걷는 나이트워크 행사에 참여해 무릎이 아프고 힘들었지만 완주에 대한 의지를 가지고 6시간 만에 완주할 수 있었습니다. 이 끈기는 직무에서도 나타났습니다. KISA 중소기업 소프트웨어 보안 약점 진단 후, 그 결과를 팀 동료들에게 발표할 때도, 팀원들이 쉽게 이해할 수 있도록 정적 분석 도구 사용법과 이슈 목록, 대응 과정 등을 꼼꼼히 정리하고, 발표 준비에 일주일 동안 야근을 하며 철저히 준비했습니다. 덕분에 발표 후 팀장님께 좋은 평가를 받을 수 있었습니다.
그러나 과도한 책임감으로 모든 일을 혼자 해결하려다 보니 일정 관리에 어려움을 겪은 경험도 있었습니다. 이전 직장에서 2년간 500개 이상의 노션 페이지를 작성했던 것도 그때의 경험에서 비롯된 것입니다. 처음에는 별다른 계획 없이 모든 업무를 맡다 보니, 마감일을 자주 놓치고 저에 대한 평가가 좋지 않았습니다. 이러한 문제를 해결하기 위해, 저는 업무를 맡기 전에 항상 일정 계획을 먼저 세우고, 현실적으로 완수할 수 있는 업무량을 조율하는 습관을 들였습니다. 필요할 경우 팀장님과 논의하여 기한을 조정하거나, 다른 팀원들과 협력해 일의 분량을 조절하는 방식으로 문제를 해결했습니다. 이러한 경험을 통해 저는 목표를 완수하는 책임감을 유지하면서도, 업무의 효율성을 높이기 위한 일정 관리와 협업의 중요성을 배울 수 있었습니다. 이제는 책임감을 가지고 일을 처리하되, 보다 효율적으로 팀과 협력해 목표를 달성하는 데 집중하고 있습니다.
프로젝트에서 어려웠던 부분과 해결한 경험
저는 MIKO 실시간 회의 도우미 프로젝트에서 회의록과 음성 파일의 실시간 업데이트 문제를 해결하기 위해 도전한 경험이 있습니다. MIKO는 회의 종료 후 참가자들에게 회의록과 음성 파일을 제공하는 중요한 기능을 갖추고 있었지만, 회의가 종료된 후 방장이 나가거나 참가자들이 모두 나간 경우 새로고침을 통해서만 업데이트된 데이터를 확인할 수 있었습니다. 이로 인해 사용자들이 불편함을 겪고, 실시간으로 결과를 확인할 수 없는 상황이 발생하면서 사용자 경험이 저하되는 문제가 있었습니다.
이 문제를 해결하기 위해, 저는 실시간으로 데이터를 전송할 수 있는 SSE 방식을 도입했습니다. SSE를 활용하여 데이터베이스에 회의록이 생성되거나 업데이트될 때마다 클라이언트에 실시간으로 데이터를 전송하는 구조를 구현했습니다. 이를 통해 사용자들은 별도의 새로고침 없이도 자동으로 업데이트된 회의록과 음성 파일을 확인할 수 있게 되었습니다.
SSE 방식 도입 후, 사용자 경험은 크게 개선되었습니다. 사용자는 회의 종료 직후 바로 실시간으로 업데이트된 결과를 확인할 수 있었으며, 불필요한 새로고침 없이 원활하게 데이터를 제공받을 수 있었습니다. 이 개선으로 인해 사용자 만족도가 크게 향상되었으며, 실시간 업데이트 기능이 성공적으로 구현됨으로써 MIKO 서비스의 신뢰도와 효율성이 높아졌습니다.
성장과정
개발자로의 길을 선택한 지 4년이 지났습니다. 좋은 엔지니어가 되기 위해 꾸준히 개발 공부에 매진해왔습니다. 첫 개발 경험은 부산대학교 산학협력단에서 진행한 블록체인 개발자 양성과정이었는데, 이 과정을 선택한 이유는 C언어, 자료구조, 알고리즘 등 개발자의 기초를 탄탄히 다지고자 했기 때문입니다. 프레임워크를 바로 배우는 것보다 기본기를 다지는 것이 중요하다고 판단했습니다. 6개월의 교육 과정이 끝난 후 실무 경험을 쌓고 싶어, 자사 서비스가 있는 부산의 터미널 운영 시스템 회사에 취업하여 풀스택 개발자로 일했습니다. 스트럭츠 프레임워크, 내장형이 아닌 톰캣, 웹스피어 배포, CVS 버전 관리, SOAP 통신 등 다양한 레거시 시스템 프로젝트를 맡으며 실무 경험을 쌓았습니다. 동시에 김영한님의 스프링 강의를 들으며 자바 생태계의 발전 과정을 체득하는 소중한 기회를 가졌습니다. 이 과정에서 100개가 넘는 고객사와 PM, QA팀과 협업하며 팀 간 커뮤니케이션과 업무 조율의 중요성도 배웠습니다. 회사를 다니면서도 사이드 프로젝트를 통해 크롤링, Node.js, Vue.js 등을 배우며 기술 스펙트럼을 넓혔고, 더 다양한 경험을 위해 회사를 그만두고 카이스트 정글과정에 참가했습니다. 이곳에서 PintOS 과제를 통해 CS 지식을 확립하고, AI 프로젝트를 진행하며 좋은 엔지니어가 되기 위한 저의 여정은 계속되고 있습니다.
개발자로 진로를 정하기 전에는 가업을 잇거나 공무원, 관세사가 되는 것을 고민했습니다. 사실 이 기간 동안 많이 헤맸습니다. 저의 아버지는 동네에서 목욕탕을 운영하셨고, 어릴 때부터 아버지 일을 도우며 가업을 이어받는 것도 한 가지 선택지로 생각했습니다. 그럼에도 불구하고, 대학 2학년 1학기에는 전 과목에서 4.5 만점을 받을 만큼 전공인 행정학에 충실했습니다. 그러나 코로나로 인해 목욕탕을 정리하게 되면서 진로에 대해 진지하게 고민하게 되었고, 관세사 시험을 준비하기 위해 서울로 상경했지만, 뜻대로 되지 않았습니다. 이후 개발자로의 길을 선택하게 되었고, 지금은 이 길에서 성공하기 위해 끊임없이 도전하며 나아가고 있습니다.