미리보기
기본 정보

컴퓨터 보안분야 전공 및 7년 군 의무복무 후 개발자로 커리어를 전환하였습니다. 군 생활동안 다양한 프로그램을 접하며 안전하고 유지보수 가능한 프로그램에 대해 늘 고민해왔습니다. 과거 접했던 프로그램을 반면교사 삼아 안전하면서도 유지보수성 높은 백엔드 아키텍처를 개발하고 싶습니다.
기술 스택
Spring Boot, JPA, MySQL, DBMS/RDBMS, Oracle, Spring Security, Python, Docker, AWS, Github, junit5, Redis
포트폴리오
프로젝트
창업메이트 서비스 tecky
기타
2023.08. ~ 진행 중
- 팀구성 : 4인(백엔드, 프론트엔드, 기획, 디자인)
- 역할 : API 서버 구축, 서비스 Cloud 배포 및 운영
- 주요 기능
- 사용자 인증/인가(JWT 토큰 기반), 회원 정보 관리 기능
- 관심직군 사용자 대상 매치 대상자 추천 기능
- 회원 간 1:1채팅 기능
- 매칭, 신규 메시지 알람 기능
- 프로덕트 분석 솔루션(amplitude) 연동
- 사용 기술 스택 : Java17, Spring boot 3.1.2, Spring JPA/Security, Caffeine Cahce, Ncloud, Mysql, H2
- 주요 트러블슈팅 경험
크로스 도메인 환경에 따른 보안 이슈(HTTPS, CORS, Cookie 접근 불가) 해결
크로스 도메인 환경에서의 Oauth 기반 인증 구현
서버 푸시 알람, 1:1 채팅방 기능을 위한 SSE 적용
향후 매치알고리즘 고도화 가능성 고려, 전략 패턴 적용하여 서비스 유지보수성 향상
퍼사드를 이용한 서비스 클래스 간 순환 참조 차단, 트랜잭션 전파 활용
내장캐시를 이용하여 사용자 추천 기능 알고리즘의 불필요한 호출 감소
비동기식 이벤트 처리를 이용하여 알람 이벤트 발송, 프로덕트 분석 솔루션 연동에 따른 사용자 응답 지연 차단
깃헙 : https://github.com/potenday-project/Project-308-TEN002/tree/dev
공공데이터 이용 주변 대피소 찾기 API 서버
개인
2023.07. ~ 2023.07.
- 1인프로젝트
- 역할 : API 서버 구축, 데이터 확보, AWS 운영
- 주요 기능
- 대피소 공공데이터 CSV 변환 및 DB 저장
- 카카오, 네이버 API 연동 주소 검색 및 좌표 확보
- 검색 지점 주변 최단거리 대피소 10개 출력
- 실행설정을 통한 Standalone(In-memory, ConcurrentMap), DB(Mysql, redis)모드 전환
- 사용기술 스택 : Java17, Spring boot 3.1.2, Spring JPA/Restdocs, Redis, Caffeine Cahce, Aws, Mysql, H2, Docker
- 주요 트러블 슈팅 경험
지도 API 제공사 좌표와 공공데이터 좌표계 동기화를 위한 CSV 데이터 데이터 필터링 및 좌표 변환(EPSG2097 → EPSG4326) 구현
외부 API 연동 장애 대응 로직 구현(카카오 API 장애시 네이버 API 자동 호출)하여 가용성 향상
Redis 이용 API 호출 최소화
최단거리 계산을 위해 Haversine 알고리즘 적용
JWT기반 게시판 API서버
개인
2023.05. ~ 2023.06.
- 1인프로젝트
- 역할 : API 서버 구축, AWS 운영
- 주요 기능
- 게시글 CRUD, 댓글 CRUD, 게시글 좋아요
- JWT 기반 인증/인가
- S3를 이용한 파일 저장
- 사용기술 스택 : Java17, Spring boot 2.7.11, Spring JPA/Security/Restdocs, MySql, Junit5, Mockito, AWS(EC2, S3)
- 주요 트러블 슈팅 경험
Spring Security 인증/인가 로직 내 JWT를 활용하기 위한 커스텀 필터 구현
Spring RestDocs 적용 간 Reference문서 문제점 식별 및 개선 작업 기여
자기소개
Java/Spring을 주력으로 하는 백엔드 개발자 선종우입니다.
정보보호학 전공 및 군에서 7년 간 보안실무 후 제가 서비스를 직접 만드는 것에 흥미를 느껴 개발자로 커리어를 전환하였습니다.
JAVA 8이상의 모던 자바스타일 및 Spring 2.x 이상을 이용한 개발이 가능하며, JPA표준에 대한 이해를 바탕으로 Spring DataJpa를 능숙하게 활용할 수 있습니다. 1인 및 사이드 프로젝트 간 RDBMS, Redis, Cloud(AWS, NClound, 기타 호스팅 업체)를 운영한 경험도 보유하고 있습니다. 최근에는 10일 내에 사이드프로젝트를 런칭하는 프로젝트에 참여해 tecky
라는 서비스를 출시했습니다. 프로젝트에서는 API서버 개발 및 서비스 클라우드 배포/운영을 전담하였습니다. 10일이라는 짧은 기간 팀원과의 협업, 사업성 있는 프로젝트 아이디어 도출, 개발까지 쉽지 않은 도전이었습니다. "기한내 목표 완수"라는 군 시절 좌우명을 적극 살려 최소한의 자원으로 목표 서비스를 출시하자라는 자세로 프로젝트에 참여했습니다. 덕분에 10일이라는 짧은 시간이었지만 회원가입, 사용자 매칭, 채팅 기능까지 포함한 MVP를 출시할 수 있었습니다.
서비스 개발 외에도 Spring Framework 생태계가 제공하는 기술을 적극 사용하며 Framework를 분석하여 확장포인트를 찾거나 오픈소스에 기여하는 데 흥미를 느끼고 있습니다.
이와 관련하여 JWT 기반 게시판 API 서버
프로젝트를 진행하며 Spring Security의 인증/인가 구조를 분석하고 공식 Reference문서 개선에 참여한 경험이 있습니다. 기존 프로젝트에서는 Spring Security가 제공하는 기본 세션기반 인증/인가 구조를 사용하였습니다. 그러나 기존 인증/인가 구조를 활용하며 JWT를 이용하여 인증/인가를 하려하니 Custom필터 개발과 일부 설정 변경이 필요하였습니다. 단순히 프레임워크가 제공하는 기능을 이용할 수도 있었지만 Spring Security의 확장포인트와 에러발생 시 대응을 위해 프레임워크에 대한 분석을 진행했습니다. Security의 흐름을 디버깅한 결과 인증/인가 구조를 파악할 수 있었고, 제가 개발한 JWT기반 인증/인가 필터를 적용하여 원하는 결과를 얻을 수 있었습니다.
한편 게시판의 API문서 생성을 자동화하기 위해 Restdocs를 활용하였습니다. Restdocs관련 설정을 위해 공식 Referecne문서 국내 블로그를 참고하였습니다. 그런데 공식 Reference 문구에 오해의 여지가 있어 RestDocs 설정에 많은 어려움을 겪었습니다. 국내 블로그에서도 해당 설정을 오해하여 설명을 틀리게 하는 경우도 있었습니다. 단순히 영어 문장 한 줄 정도의 차이지만, 사소한 것이라도 저와 같은 문제를 겪는 사람이 있을 것 같아 이슈를 제기하였습니다. 처음에 제작자는 해당 문구에 별 모호성이 없는 것 같다고 답변하였으나, 추가적인 소통 후에 해당 이슈를 commit에 반영하였습니다. 사소한 부분이었지만 기여할 수 있는 방법을 찾고, 이를 영어로 설득하는 과정이 생각보다 쉽지는 않았습니다. 그러나 제 의견이 프로젝트에 반영되는 것을 보며 전세계적 오픈소스 프로젝트에 조금이나마 기여할 수 있었던 좋은 경험이었습니다.
앞으로는 제 7년의 보안실무 경험을 프로젝트에 녹여내 보고싶습니다. 프로그램의 설계 단계에서부터 내재화되지 않은 프로젝트는 보안문제가 발생하더라도 개선하기 쉽지 않습니다. 그렇기 때문에 이슈가되는 보안문제를 이해할 수 있고 이를 소프트웨어에 녹여낼 수 있는 개발자가 필요합니다. 이번 게시판 서비스에서도 CORS를 적용할 때 프레임워크를 설정하는 것으로 끝낼 수도 있었습니다. 그러나 저는 경험을 바탕으로 SOP, CORS가 막을 수 없는 보안이슈에 대해 고민하였고 SOP기술에 대한 오해를 바로잡는 글을 작성하기도 하였습니다. 추후에는 더 많은 사용자와 실질적인 외부접점을 보유한 환경에서도 안전한 서비스를 개발해보고 싶습니다.
교육
고려대학교
대학교(학사) | 정보보호학
2012.03. ~ 2016.02. | 졸업
자격증
정보보안기사
한국방송통신전파진흥원
2022.12.
정보처리기사
한국산업인력공단
2022.06.