미리보기
기본 정보
저는 새로움을 배우고 성장하는 것을 중요하게 생각하며, 다양한 분야에서 공부하고 경험을 쌓았습니다. 인문대 전공이었지만 컴퓨터 개발에 관심을 갖게 되어 복수전공을 통해 입문했습니다. 졸업 후 3년간 게임 클라이언트 개발자로 근무하면서 클라이언트와 서버 간의 효율적인 통신의 중요성을 깨달았습니다. 이를 바탕으로 백엔드 개발자로서의 길을 새롭게 열어가고자 합니다. 인문학적 소양, 개발 현직 경험, 백엔드에 대한 열정을 바탕으로 안정적이며 확장 가능하고 세상에 큰 기여를 할 수 있는 시스템을 구축해 나가고 싶습니다.
기술 스택
경력
엔테크서비스 주식회사
프리랜서 • 개발팀
유니티 사용 프로젝트
공통화 모듈 개발 및 수정
프로젝트 마이그레이션 작업
Git 및 Jenkins 사용 및 라이브 경험
(1년 3개월 | 프리랜서)
플레로게임즈
사원 • 개발팀
컨텐츠 업데이트
iOS 및 AOS 빌드
기술 사용
(7개월 | 정규직)
주식회사원컴즈
사원 • 개발2팀
Lua 및 Cocos2d 사용
안드로이드 스튜디오를 통한 SDK 작업 및 어플 관리
프레임워크 작업(디자인툴 수정)
SNG 게임 컨텐츠 업데이트
AOS 빌드
리팩토링 작업 진행
(7개월 | 정규직)
피비컴
사원 • 개발2팀
게임 컨텐츠 개발 (랭킹, 출석, 로컬라이제이션)
SDK 작업 (Firebase, GPGS, Facebook, IronSource)
GitFlow 사용 및 Jenkins 구축 및 사용
(10개월 | 정규직)
프로젝트
SW사관학교 정글
에그톡
아바타와 아이스 브레이킹과 함께하는 3:3 소개팅 서비스
OpenVidu를 활용한 화상 채팅 서비스 기능 구현
실시간 스트리밍 및 다자간 화상 채팅 기능을 효율적으로 처리하기 위해 OpenVidu의 세션 및 토큰 관리를 효과적으로 사용
남녀 큐 분리 및 최적화
사용자 경험을 극대화 하기 위한 남녀 3:3 매칭 큐 작업
친구 매칭 방지 알고리즘을 만들어 참가자 간의 불편함 최소화
Redis 및 cache-manager를 사용하여 큐 매칭 시스템 상 메모리를 효율적으로 처리
메인 컨텐츠 개발
키워드 게임, 큐피드 타임 등 사용자의 참여도와 만족도를 높이기 위한 사용자 인터렉션을 유도하는 다양한 기능 추가
Socket.IO를 활용하여 실시간으로 사용자 간의 상호작용을 관리하고, 게임 진행 상황을 타이머를 통해 실시간으로 업데이트
코드 리팩토링 및 성능 최적화
기존의 monolithic 서비스를 여러개의 독립적인 서비스로 분리하여 코드 가독성과 유지 보수성을 향상.
중복 코드를 제거하고, DI에 따른 리팩토링 진행. 각 모듈 간의 의존성을 줄여 시스템의 안정성을 강화
성능 최적화 작업
Redis를 활용한 캐싱 전략 도입으로 데이터베이스 부하를 줄이고 응답 속도를 개선. 대기열 및 매칭 데이터의 빠른 조회와 업데이트를 진행함.
팀 리더십 및 협업 관리
팀장으로서 매일 아침 10시 회의를 주최하고 팀의 목표를 상의하며 프로젝트 진행 상황을 모니터링. 백엔드와 프런트엔드간의 원활한 소통을 제시함.
개개인의 강점을 파악하여 각 팀원의 역량을 최대한 발휘할 수 있는 업무를 분배. Github Project와 Discord를 활용하여 팀 내 프로젝트 관리 및 원활한 커뮤니케이션 작업 완료.
개인프로젝트
동물키우기
백엔드 및 광고 설정 (GPGS, Firebase, AdMob)
게임 관리 및 데이터 처리
GameManager 인스턴스화: 게임의 핵심 로직과 상태 관리.
엑셀 파싱 작업: Excel 파일을 파싱하여 데이터 관리 및 업데이트 자동화, 데이터 수정 및 관리의 효율성 증대.
UI/UX 개발
리소스 최적화
성과:
효율적인 데이터 관리와 수정 가능성을 높여 유지보수 용이성 확보.
광고 수익화 및 게임 서비스 기능 도입으로 프로젝트 완성도 향상.
UI/UX 설계를 통해 사용자 친화적인 인터페이스 구현.
포트폴리오
자기소개
게임 개발 경험을 통한 백엔드 시스템 이해와 도전
인문학을 전공하며 사람들의 생각과 문화에 대한 깊은 이해를 쌓아왔습니다. 그러던 중 필수로 듣게 된 학교 컴퓨터 수업에서 개발에 대한 열정을 발견했고, 이를 계기로 4차산업혁명전공을 복수전공으로 선택하게 되었습니다.
대학 졸업 후, 저는 3년간 게임 클라이언트 개발자로 일했습니다. 이 기간 동안 Unity를 활용해 다양한 게임의 사용자 인터페이스와 경험을 최적화하는 프로젝트를 진행했으며, 특히 사용자 입력을 처리하고 이를 실시간으로 화면에 반영하는 작업을 통해 사용자와의 상호작용에 대해 깊이 이해하게 되었습니다.
이 과정에서 클라이언트와 서버간의 효율적인 통신을 깨닫게 되었습니다. 예를 들어, 실시간 멀티플레이 게임에서는 클라이언트에서 발생하는 이벤트를 서버로 신속하게 전달하고, 서버에서 처리된 결과를 클라이언트에 빠르게 반영해야 했습니다. 이를 위해 안정적이고 빠른 네트워크 통신을 구현해야 했고, 그 과정에서 다양한 최적화 기법을 배울 수 있었습니다.
이런 경험은 백엔드 시스템의 중요성을 일깨워 주었고, 안정적이고 확장 가능한 백엔드 시스템을 구축하는데 깊은 관심을 가지게 되었습니다. 클라이언트 개발 경험을 통해 사용자의 요구사항을 이해하고 이를 기술적으로 구현하는 능력을 키웠으며, 이제는 이러한 능력을 백엔드 개발에 활용하고자 합니다.
비동기 처리 문제 해결을 통한 매칭 시스템 개선
가장 도전적이었던 프로젝트는 SW사관학교 정글에서 5주간 진행한 ‘에그톡’ 프로젝트였습니다. ‘에그톡’은 3:3 남녀 소개팅 서비스로, 처음에는 1:1 소개팅으로 기획되어 남녀 두 명이 입장하기를 누르면 대기 큐에서 남녀 한 명씩 선택해서 매칭하는 구조였습니다. 그러나 기획이 변경되어 남녀 대기열을 분리하고 6명을 매칭해야 하는 상황이 되었습니다. 이 과정에서 남자와 여자 대기열을 분리한 뒤 남자 3명, 여자 3명이 되면 대기열을 비우고 소개팅을 진행하게 했습니다.
여기서 문제가 발생했습니다. 남녀 대기열에서 동시에 많은 인원이 접속하면, 6명, 6명이 한꺼번에 같은 방으로 입장하는 상황이 발생한 것입니다. 이는 Nest.js의 비동기 처리 방식에서 비롯된 문제였습니다. 비동기 방식에서는 여러 작업이 동시에 진행되기 때문에, 여러 사용자가 동시에 입장하면 서버가 여러 요청을 동시에 처리하게 됩니다. 이로 인해, 대기열의 상태가 동시에 업데이트되어 6명 이상이 같은 방으로 입장하게 되는 경합 상태가 발생한 것입니다.
이 문제를 해결하기 위해 저는 먼저 대기열 구조를 변경하기로 했습니다. 기존의 남녀 대기열 외에 '시작 대기열'을 추가하여, 남녀 각각의 대기열에서 일정 인원이 모이면 시작 대기열로 옮기는 방식을 도입했습니다. 이로 인해 남자 3명, 여자 3명이 모였을 때만 시작 대기열에서 매칭이 이루어지도록 했습니다.
다음으로, 비동기 처리 방식을 동기 처리 방식으로 변경하여 경합 상태를 방지했습니다. 구체적으로는, 각 사용자의 입장 요청을 처리할 때, 대기열을 업데이트하는 부분에서 await 키워드를 사용하여 하나의 요청이 완전히 처리된 후에 다음 요청을 처리하도록 했습니다. 이렇게 하면, 대기열의 상태를 변경하는 작업이 순차적으로 이루어져, 동시에 여러 요청이 처리되면서 발생하는 경합 상태를 방지할 수 있었습니다.
이 경험을 통해 비동기 처리와 동기 처리의 차이점을 깊이 이해할 수 있었고, 시스템 설계 시 정합성을 유지하는 방법에 대해 많은 것을 배울 수 있었습니다. 특히 비동기 처리가 유용할 때와 동기 처리가 더 적합할 때를 구분하는 능력을 키울 수 있었습니다. 이를 통해 앞으로의 프로젝트에서도 상황에 맞는 적절한 접근 방식을 선택할 수 있는 안목을 기를 수 있었습니다.
입사 후 포부
저는 개발자로서 지식의 확장과 다양한 경험을 쌓아왔습니다. 현재는 이를 바탕으로 심도 있는 학습과 전문성 강화를 목표로 하고 있습니다. 제가 알고 있다고 생각하는 것들을 끊임없이 의심하고 더 나은 기술과 방식을 탐구하고 있습니다. 실질적인 프로젝트와 협업을 통해 이를 검증해 나가고 있습니다.
오픈 소스 프로젝트를 분석도 해보고 부트캠프에 참여하면서 많은 사람들과 협업하고, 실제 프로젝트에 지식을 적용해 왔습니다. 예를 들어, 부트캠프에서 팀원들을 꾸려 AWS 인프라와 Nest.js 기반의 백엔드를 활용한 프로젝트를 기획하고 개발했습니다. 이 과정에서 단순 기능 구현에 그치지 않고, 기술 선택의 이유와 방식을 깊이 고민하며 학습했습니다.
특히, Redis와 Nest.js의 Cache-manager의 차이점을 분석하고 이를 인프라 구축에 적용하는 등의 경험을 통해, 단순히 코드를 작성하는 것을 넘어 명확한 이유를 가지고 최적의 코드를 작성하는 능력을 키웠습니다. 이러한 경험을 통해 시스템의 성능과 안정성을 최적화할 수 있었습니다.
저는 이러한 경험과 능력을 바탕으로 귀사에 기여할 수 있습니다. 기술적 문제를 깊이 있게 분석하고, 상황에 맞는 최적의 솔루션을 제공하여 회사의 기술적 발전에 이바지하겠습니다. 또한, 팀원들과의 원활한 협업을 통해 프로젝트의 성공을 이끌어내는 개발자가 되겠습니다. 제 역량을 최대한 발휘하여 귀사의 목표와 비전에 부합하는 성과를 이루어내고, 함께 성장해 나가고자 합니다.