Appearance
NHN 2019 OPEN TALK DAY
2019.08.29
※ NHN 주요 사업
- TOAST : 국내 클라우드 서비스
- PAYCO : 간편결제 핀테크 플랫폼
- 한게임 : 게임 개발 (웹게임 → 모바일화)
※ 채용 방식
1차 온라인 코딩테스트 → 2차 지필 평가(CS과목) → 3차 Feel The Toast(체험형 1일 면접) → 4차 최종 인성+기술면접
1차 : 2시간 4문제 출제(작년) - 지원자들 답 공유시 내부 솔루션으로 코드유사 검증 후 탈락 처리
2차 : 지필평가 (프로그래밍 기초, 운영체제, 컴퓨터구조, 네트워크, 알고리즘, 자료구조 등) 소프트웨어 지식 테스트 (출제위원이 회사에서 꾸려지고, 1~4학년 지식기반 문제 출제, 수능보는 느낌일 것)
3차 : 하루동안 면접 보는 시스템 (오전 2~3시간동안 기술과제 코딩테스트 → 오후에 면접관들 앞에서 코드리뷰 (다대다) + 커뮤니케이션 능력 검증) <작년 기출 유형: 트리+LCA>
4차 : 임원과 인성+기술면접 진행 (종이를 주고, 지원자가 글을 이해한 다음 질문 답변하는 방식)
※ 세션 진행
OTD 선배와의 대화 (작년 Open Talk Day를 듣고 입사)
NHN Edu (서버개발팀)
- 작년 하반기 신입채용으로 입사
- 서버개발팀에서 Edu에서 만든 '아이엠티처' 프론트엔드 업무 담당
- 현재 아이엠티처는 학교에서 애플리케이션으로 부모님이 자식들의 일정 관리나 알림장들을 받아보고, 방과후 학교 관리 등 서비스를 제공하여 이용률이 높은 서비스
- 작년 동아리원으로 설명회를 듣고, 지원했는데 한단계 한단계 힘들게 통과하며 입사
- 1차 코딩테스트는 힘겹게 2문제 풀었는데 턱걸이로 합격한 느낌 2차 지필평가는 그냥 학교에서 배운 것을 토대로 풀었음 3차는 문제를 못 풀어도 면접관들이 계속 힌트를 주며 최대한 맞출 수 있도록 도와주는 느낌 4차는 간단한 알고리즘을 미리 풀고 설명하는 방식으로 진행
NHN PAYCO (금융개발팀)
- 작년 수시 경력채용으로 입사
- OPEN API 예금/적금 금융 플랫폼을 개발하고, 현재 정부지원 프로젝트 진행중
- 책 추천 : 자바로 배우는 핵심 자료구조/알고리즘(보라색)
- 항상 깔끔한 코드를 작성하려고 했음
- 배운 내용들을 블로그에 기록 (예전에는 2~3일에 한번, 요즘은 일주일에 한번 포스팅) - 정리하는 습관은 개발자에게 상당히 좋다고 생각
정말로 개발자가 되고 싶으세요?
좋은 개발자는?
- 말이 잘 통하는 사람
- 남을 배려하는 사람
- 안정적인 코드를 짧은 시간에 작성할 줄 아는 사람
- 남들이 풀지 못하는 문제를 풀어낼 줄 아는 사람
환경의 중요성
- 람다로 개발할 수 있는 환경이 주어지는가 (아직도 예전 자바 버전으로 개발하는 곳인지)
- Git을 포함한 개발 툴을 활용하는가
- 더 어려운 문제를 해결하기 위해 일하고 있는가
- 경영진이 개발자의 성장과 환경 개선을 염두하는가(★★)
계속 배우는 개발자가 되길
- 개발 일기를 작성하면 좋다 (내가 오늘 새로 배운게 뭔지 적는 습관가지기. 쌓고 쌓으면 다 지식이 됌)
- 나는 이 기술이 좋아!가 아닌, 내가 뭘 해보고 싶은지부터 생각해보기
QnA
상황에 맞게 알고리즘을 적절히 사용하는 개발자(신입)를 선호함
검색시스템에선 BFS와 DFS 중에 뭘 선택해야 되는가?
신입이 알아야 할 데이터베이스 지식은 진짜 그대로 지식정도
'쿼리'짜는 건 배우는게 아니라 직접 해보는 훈련이 있어야 함
현재 입사한 사원들도 다 교육받고 실습으로 경험을 쌓는 중
데이터베이스에 대한 질문에 대한 답변을 할 수 있을 정도 - Isolation level에 대한 설명, 데이터베이스에서 인덱스 저장방법으로 왜 B tree를 이용하는지?
Hello 월급, 취업준비하기
일단 뭐든 만들어보자
- 내가 필요했던 것, 또는 모두에게 서비스한다는 생각으로
- 직접 만들어보면서 경험과 통찰력을 기를 수 있음.
컴퓨터공학부에 오게 된 이유
- 공책에 브루마블처럼 주사위로 하는 보드게임을 직접 만들어서 놀았음
- 직접 그려야되는 번거러움에, 컴퓨터로 하면 편하지않을까? 게임 개발을 해보고 싶다는 생각에 컴퓨터공학부로 대학 진학
- 창업을 준비하던 학교 선배가 1학년인 나한테 웹개발 알바 제안
- html, css 등 웹개발을 해보니 직접 내가 만든 것들이 눈으로 보이는게 너무 재밌었음
- '나는 게임 개발을 하고 싶었던 게 아니라 뭔가 만드는 걸 좋아했구나' 이때부터 개발자에 흥미를 갖고 여러 프로젝트를 진행
토렌트 공유 프로그램
- 사용자는 토렌트 파일을 다운받을 때, 악성 파일인지 걱정하게 됨. 대신해서 파일을 받아주고, 괜찮은 파일이면 메일로 받은 파일을 전송해주는 서비스가 어떨까?해서 만들기 시작
- 집에 망가져도 괜찮은 컴퓨터를 서버로 두고, 요청하면 대신 받아주고 괜찮을 때 보내주는 방식으로 시작. 하지만 악성 파일이면 내 컴퓨터가 고장나고 서비스가 끝나게 되는 위험 존재
- 가상 환경을 도입. 가상 환경을 생성하여 그 안에서 파일을 받고, 만약 에러나 제대로 파일정보를 얻어오지 못하면 false 처리. 온전한 파일 전송이 된다는 response가 들어오면 해당 파일을 사용자에게 전송해주는 방식으로 해결함
- 야매(?) 방식으로 했다고 생각했는데, 실제로 보안 업무에서도 진행하는 하나의 방법이라고 해서 놀랐음
이 밖에도 인턴 활동 등 다양한 회사 프로젝트에 참가해서 서버관리 등 일을 해왔음. 쏠쏠히 돈을 벌어 대학을 다니면서 등록금은 모두 자신이 번 돈으로 냄
지금처럼 일하는 거면 '프리랜서'를 해도 되지 않을까?
- 택도 없는 소리였음
- 프리랜서를 하려면, 네트워킹이 매우 중요. 다양한 사람들을 알아야 그만큼 일도 들어옴
- 일단 기업에 들어가자하고 취업 준비 시작 후 NHN 입사
항상 서비스에 맞는 인프라를 구성하도록 노력하자
AWS Lambda 추천 (작은 규모에서는 무료로 사용 가능, serverless 장점)
Ddos 공격으로 요금 폭탄맞으면? → AWS Sheild, AWS CloundFront 기능으로 해결
※ 사전 코딩테스트 코드 리뷰 (NHN Lab 팀장)
동아리별 제출한 코드 평균 점수 : 78점
해당 문제는 작년 하반기 3차 기술과제 문제였음
적절한 해결방법 : Tree를 그리고 LCA or LCP 알고리즘을 통해 공통 조상 찾기
코딩 테스트 문제를 볼 때 체크하는 중요한 점(★★★)
트리를 그릴때는 정렬을 시켜놓고 Bottop-up으로 구성해야 빠르다
Main 함수 안에는 잘게 쪼개놓는 연습이 필요
main 함수를 simple하게 만들기
함수나 변수 네이밍 잘하기
다른 사람이 봐도 코드를 이해할 수 있어야 함. (코드 리뷰시 네이밍도 중요하게 봄)
무분별한 static 변수 사용 줄이기
(public, private, protected) 차이점 잘 이해하고 사용하기
신입에게 이정도까지 바라지는 않지만, 개념은 잘 알고있기를 바람
→ static을 왜 쓰고, 언제 써야하는 지 등?
사용한 자원은 항상 해제하기
scanner와 같은 것들 마지막에 항상 close로 닫는 습관
예외 처리는 try-throw-catch 사용하기
객체를 만들어 기능에 대한 것들을 메소드화 시키고 활용하는 코딩 습관 기르기
좋은 코드를 짜기 위한 습관
- 주어진 요구사항 잘 파악하기
- 정적 분석 도구 활용하기
- 코드 개선해보기
- 테스트 코드 작성해보기
QnA
신입 지원자들에게 바라는 점
작년에 지원자에게 하노이 탑을 재귀로 그 자리에서 짜보라고 간단한 질문을 했었음
생각보다 못푸는 지원자가 상당히 많아서 놀램
재귀 문제의 핵심은 → 탈출조건, 파라미터 처리
학교다닐 때 했던 프로젝트 설명보다, '진짜 스스로 만들고 싶어서 했던 개인적인 프로젝트에 대한 경험을 지니고 있기를 바람'
질문내용 : 사전 코딩테스트 문제를 풀면서 '트리+LCA' 방식도 알았지만, 배열과 규칙을 활용해 시간복잡도를 줄여 더 빨리 푸는 방식으로 했는데 틀린방식인가요?
답변
우리가 내는 문제는, 실제 상황에서도 적용할 수 있는 유형임
트리를 구성해서 짜는 걸 본다는 건 현재 상황에 '효율적인' 알고리즘과 자료구조를 선택해서 푸는 걸 확인하는 것
결국 수많은 데이터가 들어왔을 때, 트리를 활용한 로직은 재사용성도 좋고 관리가 효율적임. 배열을 이용한 방식으로 인한 해결은 구두로 들어서 이해하기 힘들지만 '효율'적인 측면을 다시 한번 생각해보길 바람
시간을 최대한 줄이려는 것보다, 자원 관리를 더욱 효율적으로 짜는 코딩 방식을 더 추구하는 느낌을 받았음