미리보기
기본 정보
배우고 발전시키는 것에 행복을 느끼는 백엔드 개발자 김세빈 입니다. 1년 차 개발자로 BIT(Bus Information System) 위주의 솔루션 업체에서 위치 정보 시스템을 개발 / 배포 했습니다. 주로 스프링부트와 자바를 사용해 백엔드 서비스를 개발하였습니다. 회사 요구에 따라 React, Vue.js 유지 보수 업무도 겸하였습니다. 동료들과 협업 과정을 통해 개선하는 일에 보람을 느낍니다. 회사가 요구하기 전, 프론트엔드가 겪는 문제를 알고 백엔드와 더 원활하게 연동하고 싶어 개인적으로 React를 학습하였습니다. 반복되는 일을 자동화하고 업무의 효율성을 높이는 일을 좋아합니다. 기존 프로젝트의 배포 과정이 단순 반복적인 일 이었기 때문에, 젠킨스를 활용하여 이를 자동화 하였습니다.
자기소개
즐거운 도전
대학교 교직원으로 학사관리 업무를 하던 중, 중복 컬럼 문제가 발생하자 오라클 데이터베이스 책을 구매하며 프로그래밍과의 인연이 시작되었습니다. 전산팀도, 관련 전공자도 아닌 제가 프로그래밍을 통해 문제를 해결하며 보람차고 행복함을 느꼈습니다.
조별 프로젝트 과정에서 커리큘럼에 없는 오라클 클라우드를 생성하고, 도커를 학습하여 조원들의 공용 DB를 구축했으며, 웹 소켓을 이용해 채팅 기능을 구현했습니다. 웹 소켓 기술을 담당하고 있던 조원이 개인 사유로 빠지고 일주일 안에 웹 소켓 기능을 구현해야 했습니다. 책을 구매하고, 사비로 강의를 구매하면서 웹 소켓을 학습했고 결국 웹 소켓 기능을 구현할 수 있었습니다. 이런 과정에서 새로운 도전을 즐겁게 받아들이게 되었습니다.
팀원들과 협업을 통해 발전을 추구하는 개발자
토이프로젝트로는 깊이가 부족하다고 생각했습니다. 실제 현업에 종사하고 있는 프론트엔드, 기획자, 디자이너와 긴밀한 협업 체계를 경험해보고 싶었습니다. Hola, 인프런 등 개발자 커뮤니티에 직접 기획자, 프론트엔드 개발자, 백엔드 개발자, 디자이너 구인 공고를 올려 사이드프로젝트 팀원을 모집했고, 사용자가 URL을 쉽게 저장하고 관리할 수 있도록 하는 사이드 프로젝트 - AllLink를 진행하고 있습니다.
백엔드 개발자로서 제가 구현한 API를 사용하는 프론트엔드 개발자가 겪는 어려움이 궁금했습니다. 사비로 React와 Vue.js 강의를 수강하며 학습했습니다. 프론트엔드를 학습하며 API 형식이 일정하지 않을 때 프론트엔드 개발자가 겪는 어려움을 이해할 수 있었습니다. Swagger를 통한 API 문서화의 필요성을 절감했고, AllLink 프로젝트를 진행하며 Swagger를 사용하여 API를 문서화 했습니다. 이를 통해 프론트엔드 및 백엔드 개발자들이 명확한 입력/출력 형식을 이해할 수 있도록 지원했습니다. 특히, API 응답 형식에서 발생한 불일치 문제를 발견하고, 상태 코드와 메시지 구조를 일관되게 표준화하는 작업을 진행했습니다.
효율적인 개발자
백엔드 개발뿐만 아니라 배포 효율성에도 관심을 가지고 CI/CD 툴을 학습했습니다. Jenkins를 학습하고 회사 현업 프로젝트와 사이드프로젝트에 접목시켰습니다. Jenkins와 Slack 등 메신저 툴을 연동하여 프로젝트의 빌드 상황, 성공 여부를 동료, 팀원들에게 실시간으로 전달하였습니다.
원리를 아는 개발자
현재 IT 산업은 급속도로 발전하고, 그에 따라 SpringBoot, Ktor(코틀린), Nextjs(리액트) 등 개발환경을 편리하게 해주는 프레임워크가 존재하고 있습니다.
스프링부트 사용방법을 찾아보고 있던 중,
프레임워크가 아니라 프레임워크를 이루고 있는 디자인패턴 원리 더 나아가 컴퓨터의 근간을 이루고 있는 저수준 문제를 이해하는 것이 고급 프로그래머를 나누는 기준이다.
라는 말을 듣고 컴퓨터의 기본 원리를 공부하기 시작했습니다. 자격증 취득을 넘어 더 깊게 공부하고 싶어 컴퓨터공학과 독학사 학위 취득도 시작했습니다. 메소드 내 변수는 왜 스레드-안전 요소인지 전역변수는 스레드-위험성이 있는지 스레드와 프로세스의 개념을 학습하면서 알게 되었습니다.
저는 에러를 해결할 줄 아는 능력이 개발자에게 매우 중요하다고 생각합니다. 이러한 에러 해결 능력의 기본이 되는 것이 바로 컴퓨터에 대한 기초 지식입니다. 서비스 중단은 기업에 직접적인 영향을 미칠 수 있기에, 이러한 능력이 더욱 중요하다고 믿습니다. 저는 원리를 아는 개발자가 되고 싶습니다. 원리를 알고 응용하여 소프트웨어 및 어플리케이션을 더욱 발전시키고 싶습니다.
기술 스택
Spring Boot, Oracle, JPA, Docker, Java, React, Jenkins
경력
(주)아임코어소프트
사원 | 개발본부
2023.08. ~ 2024.12. (1년 5개월)
교통카드 정산, BIT(Bus Information System) 서비스를 제공하는 IT 솔루션 기업
Backend / Frontend Developer
2023.08-현재
- Spring boot, React, Docker 를 사용하여 경주 시내버스의 실시간 위치 정보를 10cm 이내 오차 범위 제공하는 시스템 구축
- Spring boot, Vue.js 를 사용하여 사람이 들을 수 없는 고주파 음역대를 이용한 출석 시스템 '사운드태그' 개발 / 배포 / 운영
프로젝트
Tastemate - 아이티윌 학원 신입 수강생들의 편리한 식사 환경 조성을 위한 점심 친구 매칭사이트
아이티 윌
2023.05. ~ 2023.06.
주요 기능
- 맛집 정보 제공: 학원 주변의 다양한 맛집 정보를 제공하여 신입 수강생들이 쉽게 식사 장소를 찾을 수 있도록 지원.
- 친구 매칭 기능: 수강생들이 서로 점심 약속을 잡을 수 있는 매칭 시스템을 구현하여 학원 생활 적응을 도모.
- 리뷰 및 평점 시스템: 사용자들이 방문한 맛집에 대해 리뷰와 평점을 남길 수 있는 기능을 추가하여, 다른 수강생들에게 유용한 정보 제공.
본인의 역할 및 기여도
역할
- 프론트엔드 개발
Thymeleaf
를 활용하여 사용자 친화적인 게시판 화면을 설계 및 구현- 게시글에 대한 계층형 댓글 구조를 구현
- 백엔드 개발
- 회원가입 시 입력된 데이터의 유효성을 검사
- 사용자의 프로필 등 이미지 저장
- 수강생들 간의 실시간 1:1 채팅 기능
- 현재 접속한 수강생들을 확인할 수 있는 기능
- 데이터베이스 관리
- 팀원들이 사용할 공용 데이터베이스를 구축 및 관리
기여도
- 기술 기여:
- 프론트엔드 및 백엔드의 주요 기능 구현에 주도적으로 참여
Thymeleaf
를 사용한 사용자 친화적인 게시판 화면 설계 및 구현spring-boot-starter-validation
을 활용한 회원가입 유효성 검사 기능 개발spring-cloud-starter-aws
와 AWS S3를 이용한 사용자 이미지 저장 기능 구현stomp-websocket
을 활용한 실시간 1:1 채팅 기능 구현- Oracle Cloud와 Docker를 이용한 공용 데이터베이스 구축 및 관리
성과 및 결과
- 사용자 만족도
- 카카오 API, Oracle Cloud, Docker 등 학원에서 배울 수 없는 기술을 활용하여 다수의 긍정적인 평가 획득
- 협업 환경
- 다른 학생들은 공용 데이터베이스가 없어서 학원에서만 개발해야 했지만, TasteMate팀은 언제 어디서나 개발할 수 있는 환경을 조성
- 기술 습득
- 학원 학습 이외에도 개인적으로 다양한 기술을 찾아보고 공부하면서 자기주도적인 학습 능력을 기름
경주시내버스 실시간 위치 정보 시스템 구축
아임코어소프트
2024.04. ~ 2024.06.
경주시내버스 실시간 위치 정보 시스템은 경주시내버스의 실시간 위치를 카카오맵을 통해 확인할 수 있는 시스템이다. 이를 통해 시민들과 관광객들이 버스 도착 시간을 정확하게 알 수 있으며, 대중교통 이용의 편리성을 높이는 것을 목표로 삼음
본인의 역할
- 프론트엔드 개발
React-Leaflet
을 사용하여 특정 지점에서 실시간으로 움직이는 버스 구현
- NGINX 설정 및 리버스 프록시 구성
- HTTPS 인증서 설정을 통해 보안 강화
- 리버스 프록시 기능을 이용하여 DMZ와 내부망 연결
- Docker를 이용한 환경 설정
- NanoMQ, Redis, MongoDB를 이용한 버스 실시간 위치 정보 수집 환경 설정
기여도
- 기술 기여
- 프론트엔드
React-Leaflet
을 사용하여 실시간으로 움직이는 버스를 지도에 표시함으로써 사용자에게 직관적인 위치 정보를 제공
- NGINX 설정
- HTTPS 인증서를 통한 보안 강화 및 리버스 프록시 구성으로 외부와 내부망 간의 안전한 데이터 전달 경로 확보
- Docker 환경 설정
- NanoMQ, Redis, MongoDB를 Docker 컨테이너로 구성하여 손쉽게 배포 및 관리 가능한 실시간 위치 정보 수집 시스템 구현
- 프론트엔드
- 성과 및 결과
- 실시간 위치 정보 제공: 실시간으로 버스의 위치를 지도에 표시함으로써 사용자 경험을 대폭 향상시킴
- 보안 강화: HTTPS 인증서 설정으로 데이터 전송의 보안을 강화하여 사용자와 시스템 간의 신뢰성을 높임
- 효율적인 환경 구성: Docker를 이용한 환경 설정으로 일관된 개발 및 운영 환경을 제공, 시스템 배포 시간을 단축하고 유지보수 효율성을 증대시킴
- 시스템 안정성: NGINX 리버스 프록시를 통해 DMZ와 내부망 간의 안전한 연결을 제공, 시스템의 안정성과 신뢰성을 확보
ALLLINK - 사용자의 링크 URL을 관리해주는 웹사이트
개인 사이드프로젝트
2024.05. ~ 진행 중
ALLLINK는 기존에 사용자가 URL을 저장할 때 주로 카카오톡 개인 메시지에 복사 붙여넣기 방식으로 저장하던 불편함을 해소하기 위하여, 용자가 URL을 쉽게 저장하고 관리할 수 있도록 하며, URL을 다른 사람들과 간편하게 공유할 수 있도록 지원하는 것을 목표로 삼음
본인의 역할
- 팀 리더
인프런
,Hola
등 커뮤니티를 통해 기획자, 디자이너, 백엔드 팀원, 프론트엔드를 직접 구인- 팀원들 간의 원활한 의사소통과 문서화를 위해
GitHub Organization
을 조직하고Slack
,Confluence
를 통해 이를 실천 - 매주 목요일
디스코드
를 통해 전체회의 진행
본인의 역할
- 팀 리더
인프런
,Hola
등 커뮤니티를 통해 기획자, 디자이너, 백엔드 팀원, 프론트엔드를 직접 구인- 팀원들 간의 원활한 의사소통과 문서화를 위해
GitHub Organization
을 조직하고Slack
,Confluence
를 통해 이를 실천 - 매주 목요일
디스코드
를 통해 전체회의 진행
- 인프라 환경 구성
- 개발용 서버:
Vultr
를 사용하여 배포 및 관리 - 운영 서버:
오라클 클라우드
를 사용하여 배포 및 관리 - 도메인 : 실제 운영환경을 체험하기 위해 Hosting.kr에서 allink.xyz와 allink.co.kr을 사비로 구매하고, 이를 클라우드 서버에 연동
- HTTPS:
Let's Encrypt
를 통해 allink.xyz 도메인에 대한 와일드카드 SSL 인증서를 발급받고 적용 - 데이터베이스:
Vultr
인스턴스 Postgresql 설치하여 개발용 DB 구축
- 개발용 서버:
- 백엔드
- 스프링부트, JPA, Docker, Postgresql, github action, Jenkins를 사용하여 백엔드 기능 개발 / 배포 / 운영
Vault
를 사용해 환경설정 보안 강화
기여도
- 기술 기여
- 백엔드
GitHub Webhook
을Jenkins
와 연동하여 특정 브랜치에 팀원이 push하거나 merge할 때 Jenkins에서 자동으로 배포가 이루어지도록 설정Jenkins
를Slack
과 연동하여 빌드 및 배포 결과에 따라Slack
에 알림이 전송되도록 구성했습니다. 이를 통해 팀원들이 빌드 및 배포 상태를 실시간으로 확인할 수 있게 함- TDD를 경험하기 위해 테스트 코드를 작성하여 코드 품질 개선
- OpenAPI 3와 Swagger를 사용하여 백엔드 프로젝트 빌드 시 자동으로 Swagger API 페이지가 생성되도록 설정하고, 이를 통해 프론트엔드 팀과 API에 대한 원활한 소통 촉진
- 카카오 API와 네이버 API를 사용하여 소셜 로그인 기능 구현
- API 토큰, 키 값 등 중요한 정보를 Vault에 저장하여 관리. 이를 통해 보안성을 강화하고 민감한 정보의 안전한 관리를 보장
- 백엔드
포트폴리오
교육
아이티윌
사설 교육 | 프로젝트 기반 자바 핀테크 웹 개발자 양성과정
2022.12. ~ 2023.06. | 졸업
경기대학교
대학교(학사) | 관광경영학과
2015.03. ~ 2022.02. | 졸업