Development/DevLife

2021 네이버 웹툰 개발 챌린지 후기

📝 작성 : 2021.07.11  ⏱ 수정 : 
반응형

Programmers를 통해 Naver webtoon 코딩 테스트를 봤습니다.
난생 처음 쳐보는 코딩 테스트였기에 경험삼아 한번 봐도 손해볼 것도 없고 해서 도전 해 보았습니다. 일요일 오후 2시부터 4시까지 두시간의 시간을 주고 하는 테스트였는데. 얼마나 어려운 문제가 나올지 기대도 되고, 어떤 식으로 진행되는지도 참 궁금했습니다.

1차 코딩테스트 ( 2021.07.04 일요일)

총 3개의 프로그래밍 문제가 출제 되었습니다.
첫번째 문제를 11분만에 풀었고,
두번째 문제를 풀고 나니 45분쯤 지나있었고
세번째 문제 마저 풀고 제출을 하고 시간을 보니 총 52 분이 지났습니다.


평소의 프로그래머스 문제 풀이때는 수 많은 테스트케이스를 바로 바로 돌려주며 효율성 점검까지 해주기 때문에 여러번 제출 해 보면서 답에 조금씩 더 가까이 갈 수 있지만, 실제 코딩 테스트에서는 그 과정이 불가능 했습니다. 난이도가 워낙에 쉽게 느껴져서 분명 몇몇 예외적인 케이스들이 있을 법 한데 문제를 여러번 읽어 봤을때 일단 직감적으로는 그닥 큰 함정이 있지 않겠다 싶었습니다. 효율성도 크게 떨어지진 않겠다 싶어 일찍 제출 하고 맘편하게 쉬었습니다.

워낙 쉽게 풀었다고 생각해서 1차를 붙을 수도 있겠다고는 생각 했는데, 문제는 2차 과제 테스트 기술이 Spring Boot 라는 것 이었습니다.

월요일.

한번도 안 해 보았는데 막상 학원에서 배웠던 스프링 프레임워크와 어떤 차이가 있을지도 궁금했고, 도무지 어떤식으로 과제 풀이를 하게 될지 감도 전혀 잡히지 않았습니다. 일단 Spring Boot를 체험 해보기 위해서 월요일에 spring.io에 있는 Spring Initializr 를 이용해서 간단한 프로젝트를 생성 하고 Hello world 정도 해 보았습니다. 뭔가 익숙한 듯 하면서도 전혀 다르게 느껴졌습니다.

화요일.

지난 8개월동안 와이프와 시간을 전혀 보내지 못했기 때문에 짧지만 1박 2일 일정으로 부산 여행을 다녀 왔습니다. 비가 엄청나게 쏟아 지기는 했지만 간만에 타지에서 둘만의 시간도 보내고, 맛있는 음식도 많이 먹고, 뉴질랜드에 있을때 스타벅스에서 동료로 있던 친구들도 만났습니다.

수요일.

그렇게 부산에서의 일정을 마무리 하고, 기차 타고 대전으로 돌아오기 위해 저녁 식사를 하고 있었는데

네이버 에서 1차 코딩테스트 합격에 대한 이메일이 도착했습니다. 그저 경험삼아서 한번 해본다고 했긴 했는데 막상 1차 합격 이메일을 받고 보니 이 기회가 그리 가볍게만 느껴지지는 않았습니다.

목요일.

아침에 눈을 뜨자 마자 부랴부랴 간만에 학원에 갔습니다. 교무실에 가서 계시던 쌤들에게 저희 선생님의 하루 일과를 여쭤보니 아침부터 저녁까지 하루 종일 같은 강의실에서 수업이 있다고 하셨습니다. 선생님이 쉬는 시간도 없이 수업하시는 걸 알았기에 만나뵙게 힘들겠다는 생각은 들었지만 일단 해당 강의실 근처에서 얼쩡대다가 쉬는시간이 되고, 강의실도 수업하는 소리가 안나고 조용하기에 ( 선생님은 보통 구현 문제를 주시고는 강의실 맨 뒤에 서서는 학생들이 어떻게 코딩 하는지 지켜보십니다) 조용히 노크를 하고 문을 살짝 열어보았는데 선생님이 바로 문앞에 계셨습니다.
면담 신청을 하고, 지금 처한 상황을 말씀드리며 준비한 질문들을 몇 가지 했습니다. 할 수 있다고 해보라고 하시며 일단 스프링 부트 책을 하나 사서 쭉 읽어 보기를 권해주셨습니다. 면담을 마치고 바로 근처 서점에 가서 해당 서점에 단 한권 있던 스프링 부트 관련 책인 "스프링 부트 프로그램 입문 - 쇼다 츠야노 [길벗] " 책을 사와서 열심히 읽었습니다. Groovy로 간단하게 Springboot 어플리케이션을 만들어 보는 것을 시작으로 스프링 부트에 대해 공부했습니다.

금요일.

STS를 설치해서 책을 따라하며 스프링 부트로 이것 저것 해보았습니다.
https://shanepark.tistory.com/157

 

STS 로 Spring Boot 프로젝트 만들기. 1) STS설치 및 프로젝트 생성

STS 로 Spring Boot 프로젝트 만들기. 1) STS설치 및 프로젝트 생성 참고서적 : [길벗] 스프링부트 프로그래밍 입문 - 쇼다 츠야노 아래 페이지에서 본인에게 맞는 STS 를 다운 받습니다. 저는 Eclipse용

shanepark.tistory.com

이 글을 시작으로 블로그에 글만 6개 이상 작성 했습니다. 프로젝트 생성부터 RestController를 활용한 API 만들기, 거기에 Thymeleaf 활용해 웹 페이지 만들기 등 이것 저것 해 보았습니다. 책을 무작정 따라 하지 않고 궁금한 것도 시도 해 보고 코드 들도 몇개씩 뜯어 보며 즐겼습니다. 새로운 것에 대한 두려움은 누구나 가지고 있지만 그걸 극복해내고 막상 배움이 시작된다면 정말 즐겁습니다.
그러다 오후 3시 30분, 프로그래머스에서 과제 테스트 체험 환경 페이지와 함께 추가 안내가 도착했습니다. 총 두가지 내용 이었습니다.
1. 과제 테스트 환경

제공된 링크로 들어가니.. 웹에서 VSCODE 가상 환경을 제공합니다. VSCODE는 정말 메모장 용도로밖에 안써봤는데 머리가 하얘집니다.
로컬 환경의 IDE를 사용해도 된다고는 하는데, 제공된 프로젝트를 로컬 환경으로 어떤식으로 옮겨 올지도 감이 잡히지 않습니다. 아마 기본 vscode 의 git을 활용하는 방법이 있지 않을까 싶은데 잘 모르겠습니다.
Eclipse 만 써본 입장에서 어디서 부터 어떻게 손을 대야 할지 참 막막했습니다.

2. 인터넷 검색 불가

인터넷 검색이 불가능하다는 이 한줄에 정신이 아득해졌습니다. 제 코딩의 8할은 stackoverflow와 API Documents 들이라고 생각했는데. 인터넷 검색 없이 코딩을 해본적이 없다보니 안그래도 처음해보는 Spring Boot + 처음 써보는 IDE 에 기름을 붓는 느낌이었습니다.

https://shanepark.tistory.com/161

 

Visual Studio Code에 Spring Boot 필요한 Plugin들 설치하기

VSCODE는 정말 안써봤는데. 네이버 웹툰 2차 과제가 vscode 상에서 진행되는걸 방금 확인했습니다. 몇개 이것저것 클릭 해 보니 전체적으로 프로젝트 관리하는 형태는 비슷 하던데, vscode로 코딩을

shanepark.tistory.com

부랴부랴 VSCODE를 에 필요한 Plugin 들을 얹고선, vscode로 코딩을 해보기 시작했습니다. 다행인지 불행인지 STS로 하는 스프링 부트에도 익숙하지 않던 상황이다 보니 Visual Studio Code라고 크게 다르게 느껴지지는 않았습니다. 똑같이 어색합니다.
학원에서는 MyBatis로 코딩 하는 걸 배웠었는데 JPA에서는 쿼리를 작성 하지 않고 메서드 명으로 코드를 작성하는게 참 신기하기도 하고 막막하기도 했습니다. 일단 간단한 CRUD 까지 한번 쭉 마치고 나니 하루가 끝났습니다.

토요일.

데이터베이스를 어떤걸 쓰게될지 몰라 일단 집에서 서버로 쓰고 있는 노트북에서 MariaDB 서버를 켜서 간단하게 조회 API를 작성 해 보았습니다.
https://shanepark.tistory.com/163

 

STS 로 Spring Boot 프로젝트 만들기. 6) MYSQL 연동하기 및 Cannot load driver class: com.mysql.cj.jdbc.Driver  spring

STS 로 Spring Boot 프로젝트 만들기. 6) MYSQL 연동하기 및 "Cannot load driver class: com.mysql.cj.jdbc.Driver spring boot" 에러와 "No serializer found for class org.hibernate.proxy.pojo.bytebuddy.Byt..

shanepark.tistory.com

오류가 이것저것 많이 나서 해결하다보니 시간을 많이 잡아먹었습니다.

오후 2시. 과제가 시작되었습니다.

처음 한시간 가까이는 정말 눈만 껌뻑껌뻑 했습니다. 문제를 읽는데 이게 무슨 소린가 싶고.. H2라고 하는데 연필 경도나 야구만화에서나 들어본 말인데 데이터베이스라니 참 신기하기도 하고 곡소리만 나왔습니다. 코드를 쭉 살펴 보니 아.. 서비스 하려면 코드를 이런식으로 작성해야 하구나 하며 테스트라기 보다는 배우는 느낌이었습니다.
문제에 대한 유출을 할 수 없기 때문에 자세한 설명을 못하지만. 나름 참고하라는 의미에서 작성해둔 것으로 보이는 코드들이 있었고, 검색 금지에도 불구하고 Spring Boot와 Java 8 이 두 document 들은 확인 할 수 있게 해 주어서 그나마 정말 다행이었습니다.
API 개발 문제가 총 4개가 있었는데. 처음 한시간동안에는 진짜 이건 안된다 라는 생각이 들었지만, 일단 정신을 가다듬고 한문제라도 제대로 풀어보자라는 생각으로 다시 접근하기 시작했습니다.
솔직히 낯설지만 문제 자체는 그리 어려운 문제는 아니란 생각이 들었고, 1번 문제만 제대로 풀 수 있다면 4번 문제까지도 풀 수 있는 거라는 생각에 시간이 좀 걸리더라도  한 문제만이라도 포기하지말고 해결해보자고 하며 저 혼자만의 과제 테스트를 시작했습니다.
차근차근 기존에 작성되어 있는 코드들을 분석하고 응답해야할 Model(제가 알고있는 VO를 보통 Model이라고 하는 것 같았습니다)을 만들고, 뭐라도 json 형식으로 응답해야할 Model을 응답하게끔 api를 만들어 본 뒤에, 작동되는 걸 확인하고는 이제 요청에 맞도록 응답하도록 코드를 수정 하는 순서로 진행했습니다. 나름 완전 단순한건 아니여서 서비스 클래스도 하나 만들어서 순서대로 요구 사항에 맞도록 로직을 구현했습니다. 이것저것 자세히 말하고는 싶은데 참 이게 맘대로 말할 수 있는 내용이 아니다 보니 아쉽네요.
어느 시점이 지나자 정말 즐기기 시작했습니다. 이것 저것 데이터를 입력해보면서 테스트를 해 보며, 일어 날 법한 예외 상황에 대해 잘 작동하는지 확인도 하고 생각처럼 작동하지 않으면 코드도 수정해 보며 하다 보니 절대 불가능 해 보이던 풀이가 조금씩 가까워지는 것도 재미있었습니다. 마지막 30분~1시간은 정말 즐겁게 미소지으며 코딩 했던 것 같습니다. 그렇게 어느정도 원하는대로 API가 작동한다는 생각이 들었을때쯤 마지막 버그마저 잡고 나니 1분의 시간이 남았습니다. 30초 정도 이것 저것 마지막으로 살펴보다가 오후 5시 59분 40초쯤 코드를 제출했습니다. 비록 1 개만 풀었지만요.

2차 테스트를 마치고 나서 든 생각은. 이거 정말 어렵다. 그리고 이거 정말 쉽다.

저처럼 해당 환경에 익숙하지 않고 이런 식의 코드 작성을 해보지 않은 분들에게는 정말 어렵게 느껴졌을텐데, VS 코드와 스프링 부트에 익숙하고 다양한 경우에서의 API를 만들어 보았을 경력자 분들에게는 웃음 나게 쉬웠을 문제라고 생각합니다.
나름 스스로 현재 상황에 대해 돌아보는 시간도 되었고, 정말 재밌고 유익한 경험이었습니다. 덕분에 소문으로만 들었던 스프링 부트를 체험 해 볼 수 있었고, 그 장점들이 어느정도 느껴져서 기존에 만들었던 프로젝트를 스프링 부트 프로젝트로 변경하거나 새로운 스프링 부트 프로젝트를 만들어 볼 생각입니다.

반응형
1 2 3 4 5 6