100퍼센트 불합격이다.
첫 면접이 하필 제일 가고싶던 회사였다.
면접을 위해 몇일 전부터 두뇌 풀가동시키고 설명하는 연습을 엄청 했다.
그런데 내가 갖고있는 지식을 다 보여주지 못해서 아쉬웠다.
면접관님들이 연쇄질문을 하실 줄 알았다.
그래서 질문에 대해 일단 대략적인 설명을 하고
연쇄 질문이 나오면 더 세부적인 것들에 대해 설명하려고 했다.
그런데 대략적인 답변을 하면 계속 다음 질문으로 넘어가셨다.
다음 면접부터는 답변을 얼마나 구체적으로 해야하는지에 대한 질문부터 하고 답변을 시작해야겠다.
기억나는 답변을 못한 질문들을 기록해야겠다.
와 이건 예상못했다.
무의식적으로 IDE 가 제공하는 import 자동완성 기능을 사용해왔다.
어... String 이 있었던 것 같은데.. 어.. Relfection 이 있었던 것 같은데.. 이런 식으로 답변을 했다.
이때 직감했다.
아 끝났구나.
오라클 문서를 보면 다음과 같은 설명이 있다.
Provides classes that are fundamental to the design of the Java programming language.
java.lang 패키지는 자바 프로그래밍에 필요한 기본적인 클래스들을 제공한다.
https://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html
여기를 보니 일단 Wrapper 클래스들이 눈에 들어온다.
StringBuffer, StringBuilder 도 보이고
수학 관련 메서드를 제공해주는 Math 클래스도 보인다.
Thread 관련 클래스, ClassLoader, Process, Compiler 와 같이 JVM 실행에 필요해보이는 클래스들도 보인다.
System.out.println() 할때 그 System 클래스도 보이고
재밌는건 Object, Enum 도 이 패키지 안에 있다.
그리고 다양한 Exception 클래스, 다양한 Error 클래스,
기본적인 어노테이션들이 포함돼있다.
잘 모른다고 답변함.
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
여기를 읽어보니
만약 정적 컨텐츠까지 WAS 가 처리하게 되면 부담이 커지기 때문에
Web Server에서는 정적 컨텐츠에 대해 처리하고, WAS에서는 동적 컨텐츠만 처리하도록 한다.
Web Server 와 WAS 를 분리함으로써 Web Server가 SSL에 대한 암복호화 처리를 하게 한다.
Web Server를 앞에두고 WAS 를 플러그인처럼 사용하면 효율적인 분산처리가 가능하다.
Web Server에 여러개의 WAS 를 둬서 여러 웹 애플리케이션 서비스 기능을 수행할 수 있다.
위와 같은 장점들이 있었다.
String 은 변경이 있을 때마다 새로운 객체가 생성된다.
문자열 변경이 많으면 GC가 호출되기 전까지 heap 에 String 객체가 계속 쌓이게 되어 메모리 관리측면에서 매우 비효율적이다.
반면에, StringBuffer & StringBuilder 는 변경이 있으면 메모리에 append 하는 방식이다.
하지만 문자열 변경이 많을때만 StringBuffer, StringBuilder를 사용하는 것이 좋다. 왜냐하면 이 두 자료형은 기본적으로 String 자료형보다 무겁기 때문에 메모리 사용량도 많고 속도도 느리기 때문이다.
기억이 안났다. DB관련 작업할때나 InputStream 과 같은 Stream관련 클래스를 이용해 작업을 할때 CheckedException 이 발생한다고만 말했다.
CheckedException 을 상속한 클래스들은 다음과 같다.
이 부분은 개인적인 의견임
나는 이 질문에 대해 API 설계의 변경은 프론트엔드 개발자들에게 혼란을 줄 수 있기때문에 DTO 클래스를 리스폰스해준다고 답변했다.
하지만 답변하면서도 스스로 뭔가 찝찝했다.
분명 내가 그것때문에만 DTO를 사용한 것이 아니었기 때문이다.
내가 느꼈던 DTO의 장점은, API 설계에 맞춰 개발할때 느껴졌다.
Person(name, age, phone, address) 가 있다면
가끔은 name과 age만 반환해야 하고
가끔은 name과 phone 만 반환해야 할 때도 있다.
DTO 를 사용하면 필요한 데이터들만 추출하는 과정을 추상화해서
손쉽게 필요한 데이터만 반환할 수 있다.
또한, 여러 테이블을 조인해 그 중 몇몇 데이터만 반환해야 하는 상황이 많다.
그럴 때 필요한 데이터들만 담아놓은 DTO클래스를 활용하면 각각의 레이어들이 자신의 로직에 충실할 수 있게 된다.
정리하면 DTO는 프레젠테이션 레이어와 서비스 레이어가 자신의 로직에 더 충실할 수 있도록 도와주고, 컨트롤러에서 필요한 데이터들만 손쉽게 반환할 수 있게 해준다.
다음 면접부터는 최대한 아는 것에 대해 어필하고
떨지 말아야겟다.