NHN 2019 OPEN TALK DAY

기술노트

NHN 2019 OPEN TALK DAY

> 2019.08.29

※ NHN 주요 사업

1. TOAST : 국내 클라우드 서비스 2. PAYCO : 간편결제 핀테크 플랫폼 3. 한게임 : 게임 개발 (웹게임 → 모바일화)


※ 채용 방식

1차 온라인 코딩테스트 → 2차 지필 평가(CS과목) → 3차 Feel The Toast(체험형 1일 면접) → 4차 최종 인성+기술면접

> 1차 : 2시간 4문제 출제(작년) - 지원자들 답 공유시 내부 솔루션으로 코드유사 검증 후 탈락 처리 > > 2차 : 지필평가 (프로그래밍 기초, 운영체제, 컴퓨터구조, 네트워크, 알고리즘, 자료구조 등) 소프트웨어 지식 테스트 (출제위원이 회사에서 꾸려지고, 1~4학년 지식기반 문제 출제, 수능보는 느낌일 것) > > 3차 : 하루동안 면접 보는 시스템 (오전 2~3시간동안 기술과제 코딩테스트 → 오후에 면접관들 앞에서 코드리뷰 (다대다) + 커뮤니케이션 능력 검증) <작년 기출 유형: 트리+LCA> > > 4차 : 임원과 인성+기술면접 진행 (종이를 주고, 지원자가 글을 이해한 다음 질문 답변하는 방식)


※ 세션 진행

1. #### OTD 선배와의 대화 (작년 Open Talk Day를 듣고 입사)

  - NHN Edu (서버개발팀)
    > - 작년 하반기 신입채용으로 입사
    > - 서버개발팀에서 Edu에서 만든 '아이엠티처' 프론트엔드 업무 담당
    > - 현재 아이엠티처는 학교에서 애플리케이션으로 부모님이 자식들의 일정 관리나 알림장들을 받아보고, 방과후 학교 관리 등 서비스를 제공하여 이용률이 높은 서비스
    > - 작년 동아리원으로 설명회를 듣고, 지원했는데 한단계 한단계 힘들게 통과하며 입사
    > - 1차 코딩테스트는 힘겹게 2문제 풀었는데 턱걸이로 합격한 느낌
    >   2차 지필평가는 그냥 학교에서 배운 것을 토대로 풀었음
    >   3차는 문제를 못 풀어도 면접관들이 계속 힌트를 주며 최대한 맞출 수 있도록 도와주는 느낌
    >   4차는 간단한 알고리즘을 미리 풀고 설명하는 방식으로 진행
    
  - NHN PAYCO (금융개발팀)
    > - 작년 수시 경력채용으로 입사
    > - OPEN API 예금/적금 금융 플랫폼을 개발하고, 현재 정부지원 프로젝트 진행중
    > - 책 추천 : 자바로 배우는 핵심 자료구조/알고리즘(보라색)
    > - 항상 깔끔한 코드를 작성하려고 했음
    > - 배운 내용들을 블로그에 기록 (예전에는 2~3일에 한번, 요즘은 일주일에 한번 포스팅) - 정리하는 습관은 개발자에게 상당히 좋다고 생각
    

2. #### 정말로 개발자가 되고 싶으세요?

  - 좋은 개발자는?
    - 말이 잘 통하는 사람
    - 남을 배려하는 사람
    - 안정적인 코드를 짧은 시간에 작성할 줄 아는 사람
    - 남들이 풀지 못하는 문제를 풀어낼 줄 아는 사람
  - 환경의 중요성
    - 람다로 개발할 수 있는 환경이 주어지는가 (아직도 예전 자바 버전으로 개발하는 곳인지)
    - Git을 포함한 개발 툴을 활용하는가
    - 더 어려운 문제를 해결하기 위해 일하고 있는가
    - 경영진이 개발자의 성장과 환경 개선을 염두하는가(★★)
  - 계속 배우는 개발자가 되길
    - 개발 일기를 작성하면 좋다 (내가 오늘 새로 배운게 뭔지 적는 습관가지기. 쌓고 쌓으면 다 지식이 됌)
    - 나는 이 기술이 좋아!가 아닌, 내가 뭘 해보고 싶은지부터 생각해보기
  - QnA
    - 상황에 맞게 알고리즘을 적절히 사용하는 개발자(신입)를 선호함
      > 검색시스템에선 BFS와 DFS 중에 뭘 선택해야 되는가?
    - 신입이 알아야 할 데이터베이스 지식은 진짜 그대로 지식정도
      > '쿼리'짜는 건 배우는게 아니라 직접 해보는 훈련이 있어야 함
      >
      > 현재 입사한 사원들도 다 교육받고 실습으로 경험을 쌓는 중
      >
      > 데이터베이스에 대한 질문에 대한 답변을 할 수 있을 정도 - Isolation level에 대한 설명, 데이터베이스에서 인덱스 저장방법으로 왜 B tree를 이용하는지?
      

3. #### Hello 월급, 취업준비하기

  - 일단 뭐든 만들어보자
    - 내가 필요했던 것, 또는 모두에게 서비스한다는 생각으로
    - 직접 만들어보면서 경험과 통찰력을 기를 수 있음.
  - 컴퓨터공학부에 오게 된 이유
    - 공책에 브루마블처럼 주사위로 하는 보드게임을 직접 만들어서 놀았음
    - 직접 그려야되는 번거러움에, 컴퓨터로 하면 편하지않을까? 게임 개발을 해보고 싶다는 생각에 컴퓨터공학부로 대학 진학
    - 창업을 준비하던 학교 선배가 1학년인 나한테 웹개발 알바 제안
    - html, css 등 웹개발을 해보니 직접 내가 만든 것들이 눈으로 보이는게 너무 재밌었음
    - '나는 게임 개발을 하고 싶었던 게 아니라 뭔가 만드는 걸 좋아했구나' 이때부터 개발자에 흥미를 갖고 여러 프로젝트를 진행
  - 토렌트 공유 프로그램
    - 사용자는 토렌트 파일을 다운받을 때, 악성 파일인지 걱정하게 됨. 대신해서 파일을 받아주고, 괜찮은 파일이면 메일로 받은 파일을 전송해주는 서비스가 어떨까?해서 만들기 시작
    - 집에 망가져도 괜찮은 컴퓨터를 서버로 두고, 요청하면 대신 받아주고 괜찮을 때 보내주는 방식으로 시작. 하지만 악성 파일이면 내 컴퓨터가 고장나고 서비스가 끝나게 되는 위험 존재
    - 가상 환경을 도입. 가상 환경을 생성하여 그 안에서 파일을 받고, 만약 에러나 제대로 파일정보를 얻어오지 못하면 false 처리. 온전한 파일 전송이 된다는 response가 들어오면 해당 파일을 사용자에게 전송해주는 방식으로 해결함
    - 야매(?) 방식으로 했다고 생각했는데, 실제로 보안 업무에서도 진행하는 하나의 방법이라고 해서 놀랐음
  - 이 밖에도 인턴 활동 등 다양한 회사 프로젝트에 참가해서 서버관리 등 일을 해왔음. 쏠쏠히 돈을 벌어 대학을 다니면서 등록금은 모두 자신이 번 돈으로 냄
  - 지금처럼 일하는 거면 '프리랜서'를 해도 되지 않을까?
    - 택도 없는 소리였음
    - 프리랜서를 하려면, 네트워킹이 매우 중요. 다양한 사람들을 알아야 그만큼 일도 들어옴
    - 일단 기업에 들어가자하고 취업 준비 시작 후 NHN 입사
  - 항상 서비스에 맞는 인프라를 구성하도록 노력하자
    - AWS Lambda 추천 (작은 규모에서는 무료로 사용 가능, serverless 장점)
      > Ddos 공격으로 요금 폭탄맞으면? → AWS Sheild, AWS CloundFront 기능으로 해결
  


※ 사전 코딩테스트 코드 리뷰 (NHN Lab 팀장)

> 동아리별 제출한 코드 평균 점수 : 78점

해당 문제는 작년 하반기 3차 기술과제 문제였음

적절한 해결방법 : Tree를 그리고 LCA or LCP 알고리즘을 통해 공통 조상 찾기


          1. 코딩 테스트 문제를 볼 때 체크하는 중요한 점(★★★)
  • 트리를 그릴때는 정렬을 시켜놓고 Bottop-up으로 구성해야 빠르다
  • Main 함수 안에는 잘게 쪼개놓는 연습이 필요
 > main 함수를 simple하게 만들기
  • 함수나 변수 네이밍 잘하기
 > 다른 사람이 봐도 코드를 이해할 수 있어야 함. (코드 리뷰시 네이밍도 중요하게 봄)
  • 무분별한 static 변수 사용 줄이기
 > (public, private, protected) 차이점 잘 이해하고 사용하기
 >
 > 신입에게 이정도까지 바라지는 않지만, 개념은 잘 알고있기를 바람
 >
 > → static을 왜 쓰고, 언제 써야하는 지 등?
  • 사용한 자원은 항상 해제하기
 > scanner와 같은 것들 마지막에 항상 close로 닫는 습관
  • 예외 처리는 try-throw-catch 사용하기
  • 객체를 만들어 기능에 대한 것들을 메소드화 시키고 활용하는 코딩 습관 기르기


          1. 좋은 코드를 짜기 위한 습관
  • 주어진 요구사항 잘 파악하기
  • 정적 분석 도구 활용하기
  • 코드 개선해보기
  • 테스트 코드 작성해보기


QnA

---

          1. 신입 지원자들에게 바라는 점

작년에 지원자에게 하노이 탑을 재귀로 그 자리에서 짜보라고 간단한 질문을 했었음

생각보다 못푸는 지원자가 상당히 많아서 놀램

> 재귀 문제의 핵심은 → 탈출조건, 파라미터 처리


학교다닐 때 했던 프로젝트 설명보다, '진짜 스스로 만들고 싶어서 했던 개인적인 프로젝트에 대한 경험을 지니고 있기를 바람'


질문내용 : 사전 코딩테스트 문제를 풀면서 '트리+LCA' 방식도 알았지만, 배열과 규칙을 활용해 시간복잡도를 줄여 더 빨리 푸는 방식으로 했는데 틀린방식인가요?

          1. 답변

우리가 내는 문제는, 실제 상황에서도 적용할 수 있는 유형임

트리를 구성해서 짜는 걸 본다는 건 현재 상황에 '효율적인' 알고리즘과 자료구조를 선택해서 푸는 걸 확인하는 것

결국 수많은 데이터가 들어왔을 때, 트리를 활용한 로직은 재사용성도 좋고 관리가 효율적임. 배열을 이용한 방식으로 인한 해결은 구두로 들어서 이해하기 힘들지만 '효율'적인 측면을 다시 한번 생각해보길 바람

> 시간을 최대한 줄이려는 것보다, 자원 관리를 더욱 효율적으로 짜는 코딩 방식을 더 추구하는 느낌을 받았음