SeongJae Oh

온라인 이력서 (Resume)

오성재 (SeongJae Oh)

Junior Software Developer

image

개발자가 되고 싶다고 생각하기까지 이렇다 할 극적인 동기는 없습니다. 누구나 이유 없이 끌리는 분야가 있고, 예전부터 알록달록한 소스코드가 신기하고 흥미로웠었습니다. 고등학교 재학 도중 학과장 선생님의 추천으로 국비 지원 교육기관에 다니게 되어 6개월간 학원에 다니며 수료 이후 갓 스무 살에 취업을 해보고자 했었지만, 당시의 얕은 지식을 가지고 개발자라는 직군에 대한 깊이를 착각해 매번 실패했었습니다. 이후 전공지식과 경험을 넓혀보고자 대학교에 입학하여 컴퓨터 소프트웨어 전공을 선택하여 졸업까지 여러 언어와 환경을 접해보고 팀원과 협업도 해보며 산학협력 인턴과 정직원으로 실제 웹앱 개발에 참여해보고 나서야 자신감이 붙었습니다. 멈춰있던 시간이 다시 흐르기 시작했습니다. 어디서든 맡은 바 자신 있게 헤쳐나갈 자신감이 있습니다!


Personal Projects

Private WebSite (Express)

portfolio.osj-nas.synology.me

기업이나 호스팅 업체(Cafe24등)에서 세팅해준 환경에 아무것도 모르고 파일만 넣어 사용하기보다는 개발직 희망자로써 직접 인프라 환경을 세팅해보고자 소규모 서버로 활용할 수 있는 NAS를 설치하여 개인용 포트폴리오 겸 이력서를 제작해보았습니다. 모든 개인 프로젝트로의 이동과 각종 기능(메일 등)을 사용할 수 있도록 제작된 포털사이트입니다.


WebRTC (NestJS)

webrtc.osj-nas.synology.me

페이스타임같은 화상통신을 만들어보고자 하였습니다. WebRTC와 Socket.io를 이용하여 구성하였고, ICE를 공유하기 위한 시그널링 서버입니다. 시놀로지 nas에서 기본제공하는 리버스 프록시를 이용하고 내부적으로 PM2의 클러스터를 늘려 라운드로빈 방식으로 로드밸런싱을 하였습니다. 클러스터를 늘린 후 소켓 이벤트를 공유하지 못하였고, 이를 해결하기 위해 Redis를 어댑터로 끼워 메시지 브로커로 활용하며 무중단 배포와 다중 클러스터 간 이벤트 공유를 해결하였습니다.


Technology Blog BE (NestJS)

dstb.server.osj-nas.synology.me

동료와 함께 기술블로그를 제작해보자는 취지로 각각 FE/BE로 나뉘어 작업하게 되었고, BE를 담당한 저는 NestJS 프레임워크를 이용한 RestAPI를 제작하였습니다. DDD구조에 이어 TDD를 채택하여 Jest를 이용한 테스트 후 조립하는 식으로 개발하였습니다. PM2를 이용한 무중단 배포와 2개의 클러스터로 나누어 라운드로빈 로드밸런싱을 하였으며, JWT토큰을 이용한 stateless방식의 인증, 깃허브에 push작업 시 자동으로 서버에 반영되어 재시작되도록 Jenkins를 구성하였습니다.


Delivery Master (NestJS)

delivery-master.osj-nas.synology.me

NestJS 프레임워크를 이용한 RestAPI의 연습용 프로젝트의 목적으로 시작하였습니다. PM2를 이용한 무중단 배포와 에러 추적을 위해 에러 발생 시 NestInterceptor를 통해 에러를 Sentry와 Discord 웹훅을 통해 쉽고 빠르게 확인할 수 있도록 하였고 stateless한 사용자 인증을 위해 JWT토큰을 사용하였습니다.


IDUCS (Spring JSP)

노원구 창업대전에 출품한 프로젝트이며 3인 작업 프로젝트입니다. 학과 내 학생들끼리 전공에 관련되어 마땅히 질의응답 할 커뮤니티가 부족하다 생각하여 제작하였으며 DB설계, Bootstrap Template 레이아웃 편집, GoogleMap API, 최소한의 테이블을 활용하기 위해 백엔드 처리 로직 설계를 담당하며 개발하였습니다.


CovidOverview (Spring JSP)

매번 일일히 검색할 필요 없이 COVID-19 현황판을 한눈에 알아보기 쉽게 만들어보자는 아이디어로 개발하였으며 DB설계, Bootstrap Template 레이아웃 편집, jSoup 라이브러리를 사용하여 코로나 정부 사이트 데이터 파싱, 백엔드 데이터 처리 등 전체적으로 개발하였습니다.


MetUserFinder (Express)

metuserfinder.osj-nas.synolgy.me

평소에 즐겨하던 온라인 게임인 리그 오브 레전드의 API를 일반인도 사용할 수 있다는 말을 듣고 비교적 가벼운 Node.js를 사용하여 현재 진행중인 게임의 유저들 중 N게임 전까지 같이 매칭된 인원이 있을 시 해당 인원만 뽑아 매칭 이력을 보여주는 웹 어플리케이션을 제작해보았습니다.


Work Experiences

(주)재능e아카데미

JM개발팀 | 정직원

(주)재능교육의 IT계열사이며 자체적인 솔루션과 어플을 통한 강사의 회원관리, 학생과의 비대면 화상수업을 개발하는 기업입니다. WebRTC를 활용한 화상수업 솔루션 개발에 선임자와 함께 참여하였으며 이에 필요한 시그널링 서버를 NodeJS와 Redis를 활용해 구축하였습니다. 이 화상 수업의 사용자 플랫폼 간 통합을 위해 모바일 어플리케이션 일부에 웹뷰를 적용해 업그레이드 하였으며, 수업 시작 알림 등의 기능을 위해 Firebase의 FCM을 활용한 NodeJS 푸시 서버 또한 적극 참여하였습니다.

(주)써큘러스리더

대학교 산학협력 | 인턴

시 지정 언어 학습클리닉 교육기관이며, 자체적인 수업 솔루션을 사용하는 회사입니다. node.js의 Express(EJS) 템플릿 엔진 기반이며 강사들이 사용하는 어드민 페이지의 백엔드 개발과 모바일 기기(iPad등)에서 수업이 가능하도록 수업 솔루션 데이터 처리 개발에 단기 계약 산학협력 인턴으로 참여하였습니다.

(주)건우애듀

국가근로 장학 | 아르바이트

원어민 화상영어를 운영하는 사업체이며 국가근로장학생으로 근무하였습니다. 일반 사무업무와 지자체마다 다른 웹페이지를 운영하기에 분산된 웹페이지의 이벤트 정보 유지보수, 간단한 SQL처리 보조 업무를 처리하였습니다.