images (8).png

<aside> 💡 안녕하세요, 패스트캠퍼스 커널아카데미입니다.

예비 수강생 여러분들을 위한 ‘네이버웹툰’ 개발자 합격 자기소개서를 무료로 공개합니다. 🙂

개발자로의 취업 또는 이직을 준비하고 있다면 지금 바로 확인해보세요!

</aside>

합격 자기소개서


[필수] 희망하는 개발분야 혹은 관심있는 기술분야 위주로, 자신을 소개해주세요. 왜 해당 분야에 관심을 가지고 개발을 시작하게 되었고, 이후 개발자로서 본인의 커리어 플랜 등을 자세히 작성해주시기 바랍니다.

평소에 저는 제가 답답하다고 느끼거나 이런 게 있으면 좋겠다 싶은 서비스를 생각해서 구상하는 것을 좋아합니다. 이런 서비스들을 조잡하게나마 만들어보는 것에서 시작해서 친구들이나 동아리 등을 들어가서 여러 사람과 함께 개발을 해보며 서비스를 개발한다는 것이, 제가 아는 지식을 가 지고 제가 다루는 것들을 통제한다는 점에서 매력을 느꼈습니다. 저는 불확실한 상황을 좋아하지 않기 때문에 이렇게 무언가 통제할 수 있는 것을 좋아합니다. 그렇게 하다가 중단될지언정 친구 들과 함께 개발을 진행해보는 것뿐만 아니라, 웹 프레임워크나 데이터베이스 등 필요하다고 생각 하는 것들을 공부하면서도 재미를 느끼게 됐습니다. 이렇게 저는 백엔드 개발을 시작하게 됐습니 다. 막연히 생각하는 서비스들을 만들겠다는 꿈은 여러 경험을 거치며 중장기적인 목표 2가지로 구체 화했습니다. 하나는 막대한 트래픽을 감당해보는 것, 다른 하나는 빅데이터 DB 사용에 능숙해지 는 것입니다. 위 두 가지 주제를 바탕으로 제 커리어 플랜을 설명하고자 합니다. 첫째, 막대한 트래픽 감당해보기입니다. 백엔드 개발자로 성장하기 위해서는 압도적인 트래픽을 감당해봐야 하며, 특히 네이버웹툰과 같이 이미지를 올리는 작업처럼 부하가 크면서도 많은 트래 픽을 감당해보는 것은 특히 중요하다고 생각합니다. 갑작스럽게 트래픽이 몰리는 상황은 분명히 존재할 것이고, 그런 상황을 통제할 수 있는 서비스야말로 사용자들이 떠나지 않는 서비스라고 생각하기 때문입니다. 저는 가장 먼저 네이버 웹툰에 들어간다면 이런 이미지 트래픽을 감당하는 방식: 캐싱이나 CDN, 각각의 과정은 어떤 장단점이 있으며 실제로 어떤 것을 통해 구현되는지 배 울 것입니다. 그렇게 1년 동안 서버를 분석하고, 트래픽을 감당할 수 있는 서비스 제작을 체득할 것이며, 업무와 관련된 모든 내용을 파악할 것입니다. 이후 2년 안에 문서화가 되어 있을 수많은 장애 대응 문서들을 분석하며 어떤 장애가 닥쳐와도 당황하지 않고 통제할 수 있는 개발자로 거 듭나고자 합니다. 둘째, 확장성 있는 데이터베이스 설계를 생각할 수 있을 만큼 숙련된 개발자가 되고자 합니다. 한 시니어 개발자분께 코칭을 받으며 들었던 이야기로는 데이터의 조회가 많은 서비스에서는 연관관 계를 사용하지 않고 연관된 데이터를 모두 가져와 매칭시키는 방식으로 최적화한다고 들었습니다. 이런 내용은 검색해봐도 구체적인 답이 나오지 않았는데, DB 관련 프로젝트를 혼자 진행하며 NoSQL 등에 관해서 공부해본 결과 큰 그림은 잡을 수 있었습니다. 하지만 그 구체적인 고려사항 들이나 DB 설계 노하우 등은 실제로 대용량 데이터는 상대적으로 성능이 좋은 MongoDB 등을 사용해보며 직접 데이터를 다뤄봐야만 비로소 깨우칠 수 있다고 생각합니다. SQL 뿐만 아니라 NoSQL DB들까지도 어떤 식으로 설계하고 사용할지, 해당 분야는 어떻게 최적화할 수 있을지, 어 떤 문제들이 발생할 수 있을지 고민하고 문서화하며 ElasticSearch, Redis, Mongo 등의 NoSQL에 숙련된 개발자가 되고자 합니다.


[필수] 진행했던 개발 프로젝트 중 어려운 기술적 문제를 주도적으로 해결했던 경험을 이야기해주세요. (학교수업, 대외활동, 경진대회 등)작성 시에는, 정확히 어떤 문제였는지, 본인의 해결 방법과 실제 결과가 어땠는지 등 자세히 설명해주세요. 정확한 답을 찾지는 못한 경우라면 어디까지 고민해 봤는지 이야기해주셔도 좋습니다.

8월에 시작한 프로젝트 진행 과정에서 직면했던 문제입니다. 프로젝트는 한 DB에서 다른 DB로 Migration 하는 툴을 제작하는 프로젝트였으며, 이를 위해 Spring을 사용해 제작했습니다. 진행하 면서 두 종류 이상의 DB를 하나의 Spring 서버에 연결하는 과정에 대한 정보가 부족했고, 다양한 라이브러리를 사용하며 연결하려고 하니 더욱 설정이 꼬였습니다. 이에 저는 가장 먼저 제가 해 결해야 하는 상황을 정의했습니다. 일반화를 위해 확장성 있는 세팅으로 설정할 것이라는 요구사항을 생성했습니다. 이후 자료를 찾 아보며 Spring을 DB와 연결하는 Interface가 DataSource임을 알게 됐고, 2개 이상의 DB와 연결하 고자 하는 경우 각각에 대해서 DataSource를 생성해줘야 함을 알게 됐습니다. DataSource를 설정해주기 위해서 HikariDataSource 등에 대한 코드를 직접 파헤쳐보며 DataSource가 어떤 방식으로 DB와 연동되는지 파악했습니다. 파악이 완료된 이후에는 아주 간단 하게 적절한 DataSource를 찾아서 설정까지 할 수 있었습니다. 그렇게 데이터베이스 2개와 연결 되고 간단하게 구현했던 migration 테스트가 진행되는 것을 확인할 수 있었습니다. 현재는 사용자가 등록한 Entity 들을 바탕으로 Repository class들을 생성해 동적으로 IoC에 등록 하는 과정을 진행하고 있습니다. 중요한 점은 Migrator에서 사용하는 Repository 메소드가 거의 없기 때문에 일일이 생성하는 것은 낭비라고 느껴졌습니다. 다음에 추가된다 할지라도, repository class에 하나씩 메소드를 추가해주는 것보다는 하나의 Configuration 파일만 수정하면 모든 Entity 의 Repository에 자동으로 해당 메소드가 추가되고, 또 동적으로 Bean에 등록되면 훨씬 확장성 있을 것이라는 생각에 ‘Repository 동적 생성 및 등록 자동화’를 진행하고 있습니다. 다만, Entity 목록을 가져오고자 EntityManager를 호출하려니 여러 에러를 마주하게 됐습니다. 예 를 들자면 EntityManagerFactory가 제대로 구성되지 않았을 때 호출해서 발생하는 이슈 등이 그 러했습니다. 저는 스프링 프레임워크에 대한 이해도가 부족함을 알고 스프링의 빈 라이프사이클 을더 공부해보며, 전체적인 빌드 흐름을 파악했습니다. 스프링 프레임워크, JPA 등의 공식 문서는 물론이고, 관련된 코드도 직접 분석해보며 공부한 결과 JpaRepository를 대신 생성해주는 JpaRepositoryFactoryPostProcessor를 하나의 객체로 직접 만들어 빈으로 등록해 사용함으로써 해 결할 수 있었습니다. 결과적으로 현재 프로젝트에서 관리 중인 Entity 목록을 수월하게 가져올 수 있었고, 해당 Entity 목록을 통해 JpaRepository를 자동 생성 및 빈 등록 과정까지 제작할 수 있었 습니다. 지금 목표는 NoSQL DataSource들에 대해서도 같은 과정을 진행하는 것입니다. 이후 사용자가 Jpa를 사용할지, 다른 라이브러리를 사용할지 지정할 수 있게 됐고, 이 또한 구현해보고자 합니다. 또한 멀티스레딩을 사용해 Migration 효율을 올리는 것은 그 다음 목표입니다. 이 모든 목표들은

결코 쉽지 않게 느껴집니다. 하지만 저는 지금까지의 작업을 통해 끈기를 가지고 코드를 분석하 고, 관련 자료를 찾다 보면 결국은 해답이 있음을 알았습니다. 그리고 그렇게 해답을 찾았을 때의 잊지 못할 성취감까지도 알게 됐습니다. 이런 지금까지의 시행착오의 과정들이 남은 작업에 대해 두려움보다는 떨림과 설렘이 큰 이유라고 생각합니다.


[필수] 본인이 보유한 개발 skill의 활용 정도를 작성하고(1~4점 중 선택), 기술 습득을 위해 노력 한 학습 방법을 구체적으로 작성해주세요.

SpringBoot: 3 스프링부트를 학습하기 위해 먼저 외부 강의들을 들으며 전체적인 개념을 파악했습니다. 이후 프 로젝트를 하며 코드 리뷰를 받을 수 있는 학교 내 코칭 프로그램을 신청했습니다. 해당 과정에서 시니어 개발자분께 프로젝트 구성에 대한 전반적인 강의를 듣고 코드 리뷰를 받아 코딩 스타일을 클린하게 작성하는 법부터 개발 전 스프링에 맞는 설계를 어떻게 가져갈지에 대한 생각을 습관화 할 수 있게 됐습니다. 이후 SpringBoot를 사용해서 이종간 DB사이에서 데이터를 Migration 하는 프로젝트를 시작했습 니다. 해당 과정에서 DB와 연결되는 부분은 어떻게 동작하는지, Connection Pool은 어떻게 관리되 고 connection은 직접 코드를 읽거나 관련된 내용을 더 조사해 블로그에 정리하며 공부했습니다. 이를 통해 Spring이 DB들과 어떻게 연동되는지, Spring Bean은 어떤 과정을 거쳐서 IoC에 등록되 고 DI 되는지 전반적인 과정을 파악할 수 있었습니다.

Git, GitHub: 3 평소에는 add - commit - push로 버전을 관리하는 용도로만 사용했던 Git에 대한 이해를 높이기 위해 오픈소스 강연에 참석해 15시간에 걸쳐 Git 실습을 진행했습니다. 과정에서 interactive rebase, amend commit 등 커밋을 관리하기 위해 사용되는 다양한 테크닉을 배우고 실습했습니다. 또한 앞서 언급 드렸던 코칭 프로그램에서 GitHub Action을 통한 CI/CD, Slack과 연동 등 다양한 기법을 추가로 학습했습니다.


[필수] '네이버웹툰 유한회사'에서 제공하는 서비스 중 하나를 선택하여, 기술의 관점에서 어떤 장 단점이 있는지를 작성해주세요. (경쟁 서비스와의 비교도 가능합니다)