티스토리 뷰

서론
안녕하세요
shiny ocean 입니다 :)
이번 포스팅은 취업 준비를 하며 첫번째로 경험한 실무진 면접의 내용을 회고하고 스스로 아쉬웠던점을 회고 하며 앞으로 의 계획을 수립하는 내용을 다루고자 합니다...!
지원 직무는 웹 백엔드 서버 어플리케이션 개발 직무였습니다.
사전과제
이번에 경험한 회사의 실무진 면접은 면접전에 사전과제를 먼저 수행해야 했습니다.
사전과제로 CSV파일의 데이터를 조회, 수정, 삭제, 삽입등의 기능을 처리하는 api 구현의 주제를 다뤘습니다. 그래서 사전과제 회고를 먼저 해보려 합니다.
저는 해당 과제를 마주하고 먼저 개발환경 구축을 위해 인텔리제이 IDE에서 Spring Web, devtools, lombok 의 총 세가지 maven dependencies 를 설정했습니다. 그리고 @SpringBootApplication 어노테이션이 붙은 메인 클래스를 실행하니 jdk버전 오류가 났습니다.....;;;;
처음부터 망했습니다... 면접끝나고 보니 스프링 버전을 원래 제가 사용하던 2.x가 아니라 3.x로 설정되어 jdk버전도 17이상을 상용해야 하는데 저는 jdk14밖에 안깔려있어서 어휴... 그냥 스프링 버전만 원래 사용하던 거로 다운시켜주면 되는거였는데...;;;
어쨋든 시간이 별로 안주어져서 주어진 csv파일을 검토해봤습니다. 그리고 생각한 방법이 해당 csv파일을 list와 hashMap을 조합한 자료구조로 데이터를 매핑하여 삭제 조회 삽입등의 기능을 수행하고자했는데 여기서도 문제는 자바에서 csv를 다뤄본적이 없는 제 역량 부족이었습니다.
csv파일을 분명 더 효율적으로 자료구조랑 매핑하는 방법도 아마 있었을껍니다.
예전에 request를 json형식으로 보낼때 json을 곧바로 활용가능한 자료구조로 바꿔주는 함수가 json 패키지 내에 있었으니까요...
(지금 찾아보니 OpenCsv라는 좋은 패키지가 있네요)
근데 개발환경 설정부터 멘탈이 나가서 csv를 라인바이라인으로 읽어내는 방법을 택합니다... 어휴... 시간 다까먹고 결국 데이터 운용관련해서 아이디어라도 주석으로 막 입력했는데 결과만 보면 0점 맞아도 할말없는 사전과제였습니다.
본면접
일단 사전과제를 완전히 망해버리고 멘탈이 다 나간상태에서 면접을 보려고하니 이대로는 안될거 같아 화장실가서 정신좀 차리고 왔습니다. 어쨋든 주어진 것, 남은 것에는 최선을 다하고 싶었으니까요...
그리고 심호흡좀 하다가 안내받고 면접장으로 들어갔습니다.
첫번째로 10분 자기소개 pt를 진행했습니다.
나름 프레젠테이션 연습은 많이 수행해서 전달하고자한 내용은 모두 전달했었습니다. 그리고 면접이 시작됬습니다.
본 포스팅에서는 면접때 다루어진 CS관련 내용과 웹개발 관련 내용만 회고해보겠습니다.
Q1. 변수의 라이프 사이클에 대하여 설명하라.
지역변수와 전역변수등 여러가지 변수에 대하여 생성되고 소멸되기 까지의 과정을 설명하라는 질문이었는데 제대로 답변하지 못했습니다. 지역변수의 경우 함수 호출과 반환시 블록내에서 생존하는 정도는 바로 떠올랐는데 객체내 인스턴스 변수나 static변수의 라이프 사이클을 설명하려고할때 머리가 하얘졌습니다.....
그래도 2학년때 객체지향언어 A+ 맞았는데 이거하나 설명을 못하니... 참 아쉽습니다...
이 질문은 제가 면접관이라면 10점 만점에 2점 줄거 같습니다.
Q2. RestFull한 API에 대하여 3문장 이내로 설명하라
완벽히 대답도 못했습니다.
이 질문은 제가 면접관이라면 10점 만점에 0점 줄거 같습니다.
Q3. TCP UDP 프로토콜에 대해 알고있는가, 속도는 뭐가더 빠르고 그이유는 무엇인가, 본인은 해당사항을 이용한 프로그래밍 경험이 있는가.
TCP UDP는 그래도 전공과목 수강하며 자주 공부한 내용이니 최대한 정확하게 답변하려고 노력했습니다.
TCP는 에러컨트롤, 연결 제어를 수행한다. UDP는 커넥션리스 방식이다. 따라서 속도는 UDP가 더빠르다. TCP의 경우 3 way handshake방식으로 커넥션을 생성하고 에러에대한 제어도 수행하기 떄문에 UDP보다 느리다. 이후 프로그래밍 경험은 없습니다....
정도로 답변했습니다.
TCP, UDP를 이용한 프로그래밍... 한번은 도전해봐야할것 같다
이 질문은 제가 면접관이라면 10점 만점에 6점 줄거 같습니다.
Q4. API는 프론트엔드 개발자, 백엔드 개발자중 누가 정의해야 한다고 생각하냐?
시나리오에 따라서 다를것 같다고 얘기했습니다. 백엔드 비지니스로직상 어떠한 파라미터가 어떠한 방식으로 꼭 요구된다면 백엔드 개발자가 정의하고, 프론트앤드 개발자 측면에서도 특정한 이슈 해결을 위해 이러한 API로 규격화 해야할것 같다고 생각된다면 프론트엔드 개발자가 정의해야 된다고 생각한다고 대답했습니다.
사실 이 질문에 정답은 없는거 같지만, 면접이 끝나고 생각해보니 제 답변들이 조금은 회피적이었다고 생각이 들었습니다. 정답이 없는 문제에서 조금 더 논리력을 갖춘 주장을 하는편이 좋았을거 같다는 아쉬움이 남습니다.
이 질문은 제가 면접관이라면 10점 만점에 5점 줄거 같습니다.
Q5. 기본적인 질문을 하겠다. 데이터베이스는 왜쓰냐?
이 질문전에 개인적으로 느끼기에 압박스러운 질문이 여러개 들어와서 만족스러운 대답은 잘하지 못한거 같습니다. 이 질문에 대하여 답변했던것이 이 면접에서 제일 아쉽습니다.
데이터베이스는 데이터를 조금더 안전하게 오랫동안 보관하기위해 사용한다 생각한다. 파일로 저장할수도 있지만 계속 읽고 쓰는데 한계가 있을것 같다, 또 sql 쿼리를 이용해 데이터 자원을 조금더 효율적으로 운용할수 있다고 생각한다.
라고 답변했는데 만족스럽지 않습니다. 특히 파일을 예시로 든게 별로... 어짜피 DB도 접근하려면 DAO같은 모델을 사용하거나 커넥션을 생성해야하는데 이왕 비용얘기를 꺼낸김에 이런거도 함께 잘 버무려서 말했으면 좋았을 텐데... 라는 아쉬움이 컸습니다.
이 질문은 제가 면접관이라면 10점 만점에 3점 줄거 같습니다.
Q6. TDD를 사용하는 이유가 뭐라고 생각하냐, 즉 장점이 뭐라고 생각하냐
TDD는 test driven development의 약자로 기존의 [설계-> 구현->검증]의 개발순서가 아닌 [검증코드 작성 -> 설계 ->구현 -> 검증코드 통과시까지 설계 구현 방복]을 수행하는 개발 방법론으로 알고있다. 이렇게 설계하면 최초의 고려사항 또는 요구사항을 명확하게 테스트 코드에 정의하여 설계의 목적과 방향성을 잘 수립할수 있다.
라고 답변했습니다. 이후 이전 답변들이 아쉬워서 단점에 대해 부연설명했습니다.
하지만 이렇게 개발하게되면 개발비용이 많이 든다. 최근 저는 BDD방식으로 사용자 시나리오를 테스트에 적용하는 방식의 테스트 케이스를 작성하는데 이방법이 개인적으로 효율이 더 좋은거 같다.
라고 덧붙여말했습니다.
이 질문은 제가 면접관이라면 10점 만점에 7점 줄거 같습니다.
Q7. Q6의 꼬리 질문으로 그럼 테스트 케이스를 적용해서 리펙터링을 수행한 경험이 있냐, 리펙터링을 수행해보니 어떤점을 느꼈냐?
지금 개인프로젝트로 진행하는 웹서비스에서 유저 서비스 모델안에 비밀번호 초기화, 회원가입, 이메일 인증등의 기능을 떄려넣었는데 추상화수준이 맞지 않는점이 단점이다. 이걸 리펙터링을 시도하고있다. 분기가된 것들은 유지 보수 시도시 조금더 로직을 빨리 파악하는데 도움이 되었다
정도로 답변한거 같은데. 위에 글로적은거 처럼 깔끔하게 답변하지 못했습니다. 또, 질문의 의도를 처음에 잘못파악해서 엉뚱한 답변을 한거 같습니다.
이 질문은 제가 면접관이라면 10점 만점에 4점 줄거 같습니다.
Q8, 객체지향 SOLID 원칙 알고있냐?, 그중 뭐가 가장 중요하다 생각하냐?, 그걸 적용해본경험이 있냐
개방폐쇠, 단일 책임 등의 원칙등을 말하다가 다음내용이 생각이 또 안났다. 근데 면접관님이 원론적인 얘기 말고 본인이 생각하기에 솔리드 원칙중에 뭐가 제일 중요한거 같냐 물어보셔서 단일책임이 가장 중요한거 같다. 하나의 문제가 발생했을때 해당 책임이 여러군데로 분산되어있으면 문제를 해결하기 어렵기때문이다 라고 답변했고 그 예로 이전 질문에서 답변한 유저서비스 모델에 여러기능들을 다때려박은것이 이 원칙을 지키지 못한것이기 때문에 지금 고치고있다
라고 답변했다.
이 질문은 제가 면접관이라면 10점 만점에 5점 줄거 같습니다.
Q9, Spring MVC 구조에 대해 설명하고 왜 그렇게 구조가 나뉘는지 설명해라
모델 뷰 컨트롤러로 나뉘는 MVC 구조에서 컨트롤러는 사용자의 요청을 각각의 요청을 처리해주는 비지니스 로직에 연결해주고 뷰는 사용자에게 결과물을 보여주고 모델은 데이터를 처리하는 로직을 수행한다 라고 답변했다.
이후 각각의 구조들의 책임을 분산해서 문제가 생겼을시 좁은 범위 내에서 해당 문제를 처리할수 있도록 하기위해 구조가 분리된거 같다고 말했다.
이질문은 사실 MVC에대해 공부한 내용에 비해 굉장히 빈약하게 설명한거 같다. 내가 아는내용을 함축적이고 명료하게 표현하는게 참 어렵다는것을 알게된 질문이었다.
이 질문은 제가 면접관이라면 10점 만점에 5점 줄거 같습니다.
Q10, 이메일 인증기능이 있다했는데 그거 어떻게 구현했냐
메일 발송은 자바메일센더페키지를 이용했고 메세지 구성은 심플메일메세지 패키지를 이용했으며 개개인별 인증키는 UUID 클래스를 이용했다 답변했다.
꼬리질문으로 UUID의 중복성은 고려했냐 물어보셨는데,
이 다음 답변.... 똥이었다....
면접을 수행하며 지금까지 제일 신경쓴거는 확실한걸 정확하게 말하자 였는데... UUID의 값의 중복이 지금까지 없는걸로 알고있었다... 그래서 답변도 UUID로 생성된 key값에 중복성은 없는것으로 알고있습니다 라고 답변했다....
돌아오는 답변은 지금 그 말씀 책임질수 있습니까 였다....
이후 만회 해보고자 UUID에 만약 중복성이 있다면 Bcript 패키지의 해시 함수를 사용해 인증키를 발급할것이다, 라고 답변했는데 이미 돌이킬수 없었던거 같다.
이 질문은 제가 면접관이라면 10점 만점에 3점 줄거 같습니다.
Q11, 자꾸 유저 서비스 모델 이야기가 나오는데 그건 어떻게 구현했냐
스프링 시큐리티에서 사용자 정보를 다루는 인터페이스는 UserDetails로 알고있다 해당 정보를 조회하기 위해 UserDetailsService 인터페이스를 구현했는데 어쩌구 저쩌구~
이 질문 이전 질문에 멘탈 터저서 답변 잘 못했다...
이 질문은 제가 면접관이라면 10점 만점에 3점 줄거 같습니다.
종합회고
위 질문들 이외에도 여러가지 인성관련 질문또는 대학생활 관련 질문들이 있었는데 어찌 저찌 넘겼던거 같다.
CS와 웹개발 관련 면접 질문의 자가 진단을 해봤을 떄 110점 만점에 43점 이다.
전체적으로 회고해봤을때 가장큰 문제점은 회피성으로 답변하려고한게 오히려 꼬리질문을 계속 낳게되었고 감점포인트가 되지 않았을까 생각된다.
지원한 회사들중 가장 가고싶었던 회사였기에 아쉬움은 크지만 이미 지나간걸 후회하는거 보다 현실적으로 빨리 받아들이고 부족한점을 인지하여 보완하는게 더 큰 도움이 될거 같다...
아쉬운점은 개인적인 노력관련한 어필을 제대로 못한거 같다. 9월에서 11월까지 2달의 기간동안 그래도 성실히 취업준비하고 작업물들을 정리해 온거 같았는데 명확한 "수치"로 표현될만한 증빙자료가 없다.
주저리 부저리
질문중에 "본인은 성실한 편입니까?" 라는질문이 있었다.
면접때는 성실하다 대답했지만 사실 나는 본질적으로는 게으름뱅이다.
게으름뱅이에게 성실한 삶은 참 힘들다.
근데 진짜 9월부터 2달간은 성실히 살아왔는데 면접때 논리적으로 잘 이야기하지는 못한거 같아 아쉽다.
랩실에서 작업문서 정리하다 밤도새고~ 개인적으로 공부도 하고~ 재밌는 술약속도 잘 안잡으려 노력하고~
어떻게 평가되던지 나는 스스로 내 노력의 크기를 알기에 크게 상심하지는 않으려 노력하고있다...
면까몰이라 하지만 이번 면접은 확실히 승산이 별로 없는거 같아 아쉽다,
졸업후 1순위로 지망한 회사였는데 맥없이 탈락을 기다리자니... 썸타는 이성에게 고백은 했으나 부정적인 목소리로
"생각할 시간을 조금만 줘,,," 라는 답변을 받은거 같은 기분이다.
지금까지 살아오면서 면접에는 항상 자신이 있었다. 아르바이트, 대학수시면접, 군대등... 그리고 그 결과도 면접을 준비한만큼 항상 괜찮았던거 같다. 근데 첫 실패를 이렇게 경험하는거도 꽤 값질것 같다!
앞으로 인생살면서 계속 면접 떨어질텐데... 너무 의미부여는 하지 않으려 노력하고있다.
부족했던점을 냉철하게 되짚어서 보완하고 다음 면접때는 조금더 나은 모습으로 준비해볼 계획이다...!
일단 대학 마지막 기말시험이 2과목있어서 졸업을 위해 다음주 한주는 공부를 좀해야할것 같다...!
다다음주에 돌아오겠습니다~~~!
'Activity logs' 카테고리의 다른 글
[취준로그] 끝, 그리고 시작 (0) | 2022.12.30 |
---|---|
[취준로그] 12/16 (0) | 2022.12.16 |
[취준 로그] 12/2 (0) | 2022.12.02 |
[취준 로그] 대학교 졸업을 바라보며... (0) | 2022.11.25 |
3학년 2학기 리뷰 (0) | 2021.12.28 |