미리보기
기본 정보

AWS EC2 / RDS / S3 / ElastiCache 를 활용한 클라우드 아키텍처를 설계할 수 있는 백엔드 엔지니어 입니다. Node 기반의 Express / Nestjs 를 프로젝트에 맞게 선택해서 개발할 수 있습니다. 개인사업 / 서비스 운영경험과 빠른 습득력으로 실무에 즉각 대응할 수 있는 주도적 문제 해결 역량을 갖추었습니다.
기술 스택
ES6, TypeScript, Express, NestJS, PostgreSQL, MongoDB, AWS, Jest
포트폴리오
프로젝트
SCRIPTER : 한/영 자막을 이용한 영어학습 서비스
개인
2023.05. ~ 진행 중
자막 파일의 대사를 추출하고 저장하여, 편리한 언어 학습을 돕는 서비스.
#Nest #Postgres #Redis #Jest #AWS(EC2+ RDS+ ElastiCache +S3)
https://github.com/ksaw1228/SCRIPTER2.0
1. 기능추가/유지보수를 위한 아키텍처 패턴 적용 필요
- 새로운 기능이나 외부 시스템 추가 때마다 중요한 로직에 영향을 주는 문제 발생.
- 클린 아키텍처의 동심원 구조를 활용해 애플리케이션 내부와 외부를 분리.
- 각 층(도메인, 유스케이스, 인터페이스 어댑터, 프레임워크와 드라이버)에 역할과 책임을 할당.
- 비즈니스 로직의 외부 리소스 의존성으로 유닛 테스트가 복잡해지는 문제 발생.
- 클린 아키텍처의 의존성 규칙을 적용해 비즈니스 로직과 외부 의존성을 분리.
- 이를 통해 순수한 로직에만 집중하는 유닛 테스트 가능.
- 클린 아키텍처 도입 결과, 유닛 테스트 용이성, 애플리케이션 확장성, 유지보수성 증가.
2. 레거시 코드의 효율적 재작성을 위한 테스트 주도 개발 필요성
- 레거시 코드를 테스트 주도로 리팩토링.
- 기존 프로젝트를 NestJS로 전환하는 과정에서 바람직한 Test 결과값을 알고 있었음.
- 이 정보를 활용해 수월한 Red test 코드 작성 가능했음.
- 작성된 Red test 코드 기반으로 안정적 리팩토링 수행.
- 혼자서 다수의 서비스 코드 작성 중 로직 인식이 흐려지는 경우가 있었음.
- 테스트 코드가 문서화 역할을 하는 것을 경험하면서 TDD에 대한 긍정적 경험 얻음.
3. 대용량 트래픽 처리를 위한 확장성 고려 설계
- K-pop의 영향으로 한국어 학습에 대한 관심이 높아짐에 따라 전 세계 학습자들을 고려하게 됨.
- 이를 처리하기 위해 대용량 트래픽을 처리할 수 있는 확장성 있는 시스템 설계 필요함.
- 비용적인 측면에서 상대적으로 유리한 Scale-out 방식을 염두에 두고 설계 진행함.
- 여러 서버 인스턴스 간에 사용자 세션 정보를 공유해야 하는 문제 발생.
- 이 문제 해결을 위해 Stateless Application 구조와 JWT 인증 방식 도입.
- JWT는 사용자의 인증 정보를 포함하므로, 토큰의 보안이 중요한 이슈였음.
- HTTPS 등의 암호화 통신 방법을 활용하여 토큰이 탈취되지 않도록 보호.
- 각 요청이 독립적으로 처리될 수 있는 시스템 설계, 서버 측에서 상태 정보를 저장하지 않도록 함.
- 일단 발급된 JWT는 취소할 수 없다는 단점 있었음.
- 짧은 만료 기간 설정하고, 필요시 서버 측에서 유효성 검사 로직 추가하여 처리 가능하게 함.
- 여러 서버 인스턴스에서 JWT 검증시 동일한 signing key 필요.
- 안전한 key 관리 시스템(KMS) 활용하여 모든 서버 인스턴스가 같은 key 공유 가능하게 함.
- 로드 밸런서를 활용하여 트래픽을 분산하고 불필요한 Sticky Session은 비활성.
- 결론적으로 보안 강화, 시스템 성능 최적화, 유연한 시스템 설계 등의 이점을 얻음.
NSfootball : 경기 결과 숨기기 기능을 제공하는 축구 일정 어플리케이션
개인
2023.06. ~ 진행 중
#Express.js #MongoDB #React-Native #GCP
Github : https://github.com/ksaw1228/NSfootballServer
- 외부 API를 이용한 실시간 경기 결과 업데이트 구현
- 경기 진행시에만 API 호출하는 로직 구현하여 불필요한 업데이트 최소화. 서버, API 비용 절감.
- React-Native 크로스 플랫폼 앱 개발 / 배포
학원 강사님들을 위한 알림장 작성 자동화 서비스
개인
2023.08. ~ 진행 중
#Express.js #Puppeteer #React
Github : https://github.com/ksaw1228/classNoteUtill
- Puppeteer 를 이용한 node 환경에서의 크롤링, 업로드 자동화 서비스 구현
- 한글 받침 유무에 따른 맞춤형 조사 삽입 로직 개발
군 적금 계산기
개인
#JavaScript
Github : https://github.com/ksaw1228/SoldierSave
- 바닐라 JS를 이용한 SPA 구현
- DAU 1000명 달성 성과
자기소개
만드는 행위를 즐기는 개발자
어릴 적, 샌드박스 게임의 맵을 직접 제작하는 경험을 통해 컴퓨터 환경에서는 특별한 재능이나, 손재주가 없이도 창조적인 가치를 만들어낼 수 있다는 것을 알게 되었습니다.
이를 바탕으로 중학교 때에는 안드로이드OS 포럼에서 활동하며 구형 스마트폰 성능 개선 프로젝트 등에 참여하고 활동하며 소프트웨어 속에서 가치를 창출한 경험이 있습니다.
이 과정에서 CPU, RAM 등의 기본적인 하드웨어 지식과 소프트웨어 최적화, C언어와 OS 등의 기초적인 CS 지식을 습득하였으며, 소프트웨어의 최적화도 절대적인 하드웨어의 성능만큼 중요하다는 것을 경험했습니다.
성인이 되어서는 직접 나만의 서비스를 출시하는 것도 세상에 무언가를 만들고 가치를 전하는 일이 아닐까 하는 생각에, 인터넷 쇼핑몰을 개업하여 월매출 천만원, 액세서리 브랜드 런칭 등 성공적인 서비스 운영 경험을 가지고 있습니다.
위 과정에서 브랜드 쇼핑몰을 직접 구축하며 웹 개발에 입문하게 되었고, 이때의 경험을 바탕으로 크롬 확장 프로그램, 적금 계산기, 자동화 시스템 등 사소할 수 있지만 불편했던 문제를 해결하며 가치를 창출하는 다양한 서비스들을 만들고 웹에 공개하면서 세상에 가치를 전할 수 있는 또 하나의 방법을 배웠습니다.
백엔드 개발자로서의 강점
문제 해결 능력
개인 사업 경험을 통해 다양한 방면의 문제 해결 경험이 있습니다. 순간의 문제 해결에만 초점을 맞추는 것이 아닌 시스템 전체, 거시적인 관점에서의 문제 해결이 중요하다는 것을 알고 있으며, 다양한 경험을 바탕으로 창의적이고, 본질적인 문제 해결 방법을 제시할 수 있습니다.
비즈니스 이해 능력
서비스를 운영하며 비즈니스의 최전선에서 고객의 요구를 파악하고, 이를 제품이나 서비스로 구현하는 방법을 배웠습니다. 높은 비즈니스적 이해를 바탕으로 고객의 요구를 충족시키는 서비스를 개발할 수 있습니다.
긍정적 실패 마인드
서비스를 진행하며 다양한 시행착오와 동시에 다양한 실패 경험이 있었습니다. 이를 그저 실패라고 여기는 것이 아니라, 긍정적으로 실패를 배움의 기회와 성장의 기회로 생각합니다. 실패를 통해 얻은 경험을 바탕으로 항상 성장하는 백엔드 개발자 입니다.
대외활동
개인사업 해외구매대행 쇼핑몰 운영 2020~2022
어필리트
데이터 분석을 통해 검색 엔진과 쇼핑몰의 정보를 수집하였고, 이를 바탕으로 경쟁력이 낮은 상품을 찾아내어 판매하는 서비스를 운영하였습니다.
해당 상품들의 해외 판매자와 컨택하고, 공항 인근 창고를 임대하여 빠른 배송 서비스로 경쟁 우위를 확보하였습니다.
이러한 전략적인 접근 방식으로 월매출 1000만원의 성과를 달성하였습니다.
서비스 운영에 필요한 디자인, 마케팅, 경영, 그리고 법률 문제까지도 주도적으로 해결한 경험이 있습니다.
교육
학점은행제
대학교(학사) | 경영학
2021.12. ~ 현재 | 재학 중
유한대학교
대학교(전문학사) | 전자정보
2017.03. ~ 2017.12. | 중퇴