안녕하세요 저희는 이번에 백엔드 인턴 면접을 본  jaehchoi, eun-park입니다.

Java/Spring을 공부하고 있어서 일부 내용은 Java에 한정되어 있지만 카뎃분들과 공유하면 좋을 것 같아 글을 작성하게 되었습니다.

면접은 1:1로 한 시간씩, 기술질문(프로젝트 관련 질문, Java 관련 질문)과 기타질문(자기소개 등)으로 진행됐습니다.

jaehchoi

처음 받은 질문은 프로젝트 관련 질문이었습니다.

단축URL을 만든 프로젝트였는데, 해당 프로젝트 관련해서 특정시점에 요청이 엄청나게 많을경우 어떻게 처리할 것인지 물어보셨습니다.

해당 프로젝트를 할 때, 이 경우에서 생각해본 적이 없기 때문에 단순하게 캐싱을 하면 좋을 것 같다고 말씀드렸습니다.

돌이켜서 생각해보니 캐싱은 결국 해당서버 내의 메모리를 점유하는 것이기 때문에 write가 많이 일어난다면 오히려 성능을 저하시키지만 DB read가 많이 일어나는 지점에 사용을 해야 한다던가 이런 맥락이 없이 말했습니다.

조금 더 디테일하게 답에 관해서 근거를 들었으면 좋았겠다는 생각이 듭니다. 그랬으면 더 깊은 추가 질문을 받을 수 있었을 것이고, 해당 질문에 관해서 답은 하지 못하더라도 추후에 해당 키워드로 찾아보면 더 깊은 이해를 할 수 있었지만 그렇지 못해서 후회가 됩니다.

자바 언어 관련 중에서 기억에 남았던 부분들은 다음과 같습니다.

먼저 추상클래스와 인터페이스의 차이점에 관해서 물어보셨습니다. 단순하게 추상클래스와 인터페이스의 차이라고 질문을 주신 것이 아니라. 둘의 차이점을 정확히 아는지 유도하는 방식으로 질문을 주셨습니다.

저는 자신있게 ‘인터페이스는 다중상속을 할 수 있지만, 추상클래스는 그렇지 않다.’라고 예전에 공부했던 내용을 말씀드렸지만, 그렇게 설계된 의도에 관해서는 깊게 알지 못해서, 이후에 질문받은 내용을 답변하지는 못했습니다.

또한, 특정 키워드나 메서드에 관해서 알고 있는지에 관해서 물어보셨는데 저는 알지 못한다고 솔직하게 말씀드렸고 화상면접을 통해서 진행되었기 때문에 구글링을 통해서 해당 개념을 숙지하고 이후에 그 개념을 토대로 추론을 해보는 방식으로 진행됐습니다. 

개념을 모른다고 말씀드렸을때 넘어가는 것이 아니라 구글링을 토대로 해당 내용을 추론하는 방식은 참신했습니다.

물론 면접 당시에는 너무 긴장을 해서 대답을 잘 못했지만 면접관님이 친절하게 저의 답변에 관해서 생각해볼 점들을 제시해주셔서 단순하게 모르겠습니다로 끝나지 않았던 점이 매우 긍정적인 경험이었습니다.

느낀점

다시 면접 내용을 정리하면서 깨달은 것이 있는데 내용들을 정리하면서, 시니어 분의 사고과정을 볼 수 있었던 것입니다.

어떤 기술에 관해서, 이 기술을 사용할때의 장점 및 단점, 이 기술의 차별화 된 점에 관해서 생각해야 한다는 것을 느꼈고, 면접 후 가장 크게 든 생각은 더 열심히 부족한 부분을 채워나가야겠다 는 것입니다.

eun-park

첫 기술 질문은 ‘데이터 정규화‘였습니다.

답변을 이어가면서 제가 정규화와 역정규화에 대해서는 학습했지만.. 데이터가 어떻게 어디에 저장되는지, join은 왜 오래 걸리는지 같은 원론적인 내용은 깊게 생각해보지 않았음을 깨달았습니다.

이렇게 잘 모르는 부분이 나오면 아는 지식을 어떻게든 짜내서 설명했던 것 같습니다.

제 설명 중에 질문과 관련이 없는 내용이나 틀린 내용도 있었는데 면접관님은 질문을 종료하지 않고 추가 설명을 붙여주셨고, 저도 잘 이해가 안되는 부분은 바로 질문을 드리면서 면접을 이어갔습니다.

java static에 관한 질문도 있었습니다.

블로그에 정리했던 메모리 구조 그림이 머리에 지나가면서, 메모리 위주로 답변했습니다.

하지만 정확한 용어를 쓰지 않았고 static을 왜 언제 쓰는지, static 변수/메소드/클래스는 무엇인지 확실하게 설명하지 못했습니다.

그래서 그냥 솔직하게 “전에 이 부분을 공부하면서 블로그에 정리한 적이 있는데 정확하게 기억이 나지 않는다. 정리했던 내용은 클래스 내부의 모든 변수와 메소드들이 인스턴스가 생성될 때 함께 메모리에 올라가는 것이 아니고, static은 클래스 이름만으로 접근할 수 있다는 내용” 이라고 답변했습니다. 

이후 java 관련한 질문들 중에는, 아는 기술도 모르는 기술도 있었습니다.

제가 사용해본 기술임에도 한마디로 정리가 되지 않는 부분은 “이런 상황에서 해당 기술을 썼었다“라고 예시를 들어서 답변했고, 면접관님은 그 예시를 가지고 이어 질문을 하셨습니다.

처음 듣는 키워드는 검색을 통해 답변을 했고, 그 기술을 왜 사용할 것 같은지 바로 그 자리에서 생각하고 답변하는 식으로 진행하기도 했습니다.

글로 정리해서 내용이 간단해졌지만 실제로는 한 주제에 대해서 질문과 답변이 여러번 오갔습니다.

기술면접 질문마다 공통적으로 느낀점은 답변을 하면 하는 대로 모르면 모르는 대로 계속 꼬리를 이어서 질문이 들어온다는 것이었습니다. 알면 어디까지 알고 있는지, 모르면 계속 질문을 던지면서 답을 어떻게 찾아가는지 보시는 것 같았습니다. 

그리고 제가 틀리게 설명했을 때도 질문이 계속 들어오니까 내 생각이 어디서 막히는지, 왜 잘못되었는지 깨닫는 부분도 있었습니다.

면접관님 설명을 들으면서 저도 궁금한 점은 바로 질문을 했고, 시간이 부족해서 의문점을 다 풀지 못한 부분도 있을 정도로 ‘내가 아는 내용을 답변한 것‘보다는 ‘배운 것‘이 더 많았던 시간인 것 같습니다.

면접을 보면서 머리에 조금이라도 남아 있던 내용에 대해서는 최대한 설명을 짜내서 답변을 했지만, 답변하면서도 부족하다는 것을 느꼈습니다.

특히 기술을 사용할 때 when, why가 중요하다는 것을 다시 한 번 느꼈고 ‘그 기술이 뭔데?’ 라는 질문에 한마디로 답변할 수 있을 정도로 학습해야겠다고 생각하게 되었습니다.

The End.