인생 첫 회사 면접 후기??..
제가 원하는 Java/spring 스택이랑 출퇴근 거리만 1시간 반 이내면 안 가리고 지원했습니다.
저번 주부터 이력서를 돌리기 시작했는데 했는데 첫 면접부터 쉽지가 않네요..
오늘 면접을 보고 오니까 제가 얼마나 부족한 지 내심 깨닫게 됬습니다. 특히 CS적인 측면에서 너무 한 것 같아요.
질문은 대략 15개 정도 받은 거 같은데 너무 정신이 없어서 그나마 생각나는 건 이 정도에요.
당장 내일 면접도 잡혀있는데 오전에 연락해서 취소할까 고민입니다. 오늘 면접 본 곳은 아마 떨어질 거 같습니다 ㅎㅎ..
1) SQL과 NoSQL의 차이점과 서로의 장단점
SQL은 관계형 데이터베이스의 정보를 저장하고 처리하기 위한 언어인데, 관계형이라는 말 답게 기본적으로 각 테이블마다 명확하게 짜여진 구조가 있고, 그 구조와 정확한 기반으로 테이블간의 관계가 서로 긴밀하게 연결되어있다.
SQL 답변하고 나머지 답변 못했어요.. 이건 준비를 제대로 안한 제 잘못입니다 ㅠㅠ
2 ) Java, JSP, Servelt에 대한 설명(특징과 차이점)
Java는 객체지향 프로그래밍 언어로 주로 데스크톱 애플리케이션과 모바일 앱 개발에 사용되지만, 객체지향의 특성상
독립적이고 클래스의 상속과 다형성 등을 지원해 재사용성과 확장성이 높다.
Jsp는 Servlet의 단점을 보완하기 위해 만들어졌는데, Html내에 Java 코드를 삽입할 수 있고, 이걸 통해 동적인 웹페이지를 생성할 수 있으며 서블릿의 기능을 좀 더 쉽게 사용하기 위해 고안된 표현 방식이다.
Servlet은 자바를 사용하여 웹 애플리케이션을 개발하기 위한 서버 사이드 기술이고 동적인 웹 콘텐츠를 생성하며, Http 요청과 응답을 처리하는 자바 클래스다.
예전에 공부할 당시에 봤던 기억을 토대로 답변을 했지만 맞는지는 모르겠습니다.
3) 객체지향 프로그래밍(OOP)이 무엇인지, OOP의 특성을 아는데로 말하고 설명
객체지향 프로그래밍 OOP란 프로그램을 단순히 데이터와 처리방법으로 나누는 것이 아닌 object 즉 객체라는 기본 단위로 나누어 이들과 상호작용하는 프로그래밍을 말함 객체지향 프로그래밍은 딱히 정의된 개념이 없고 사용자가 원하는 특정 역할을 수행하도록 정의한 추상적인 개념에 가깝다.
객체 지향의 특성으로는 추상화, 캡슐화, 상속, 다형성이 있으며 추상화의 경우 한 객체에 대한 중요한 특징만 추출해서 표현하는 것인데 예시를 들면 자동차의 색이나, 몇 마력인지, 자동차의 종류는 무엇인지 등과 같이 중요한 개념만을 선언한 미완성인 설계도와 같고, 캡슐화는 객체가 가진 데이터에 접근하지 못하도록 외부에서 직접 접근하는 것을 막고 내부에서만 접근하도록 하는 특성, 상속은 기존에 선언된 클래스의 속성과 메소드를 재사용해서 새로운 클래스를 만드는 것입니다.
다형성의 경우는 다른 인터페이스나, 부모 클래스를 통해 여러가지 형태의 객체를 상속받아 사용할 수 있는 것이라고 이 정도만 알고 있다.
이것도 전체적으로는 답변했는데 찾아보니까 다형성에 대한 답변은 살짝 애매하네요.
4) 인터페이스에 대한 설명과 인터페이스를 왜 사용하는지
제일 정확하게 기억하는 질문, 인터페이스는 추상화 클래스보다 좀 더 추상화된 것 그 때문에 구성원에 대한 제약이 있다. 다만 선언부는 존재하고 구현부는 존재하지 않아서 한 클래스를 이용해 다중 구현이 가능하고, 표준화와 일관성을 제공함 이런식으로 답변했어요.
5) MVC 패턴에 대한 설명
디자인 패턴 중 하나인데 애플리케이션을 모델, 뷰, 컨트롤러 이 세 파트로 나누어서 개발하는 방식, 각 부분별로 맡은 역할이 달라서 개발 과정 중 변경사항이 다른 부분에 최소한의 영향을 줄 수 있고, 개발자나 디자이너 등 서로 담당하는 파트가 명확하므로 맡은 파트에만 집중이 가능해 협업 과정에서 용이하고, 다양한 인터페이스에서 같은 로직을 재사용할 수 있다.
이것도 아는대로 답변은 했는데 맞는지 모르겠네요.
6) 쿠키와 세션의 차이
제일 쉬운 질문이였던 거 같은데 답변을 못햇습니다..
7) 프로젝트에서 JWT를 사용했다는데 어느 부분에서 어떤 방식으로 적용한건지 설명
처음에는 Base64로 인코딩된 구글 소셜 로그인 ID 토큰을 단순히 디코딩하여 필요한 데이터를 추출하는 방식으로 구현함. 그런데 이 방법으로는 토큰의 유효성을 제대로 확인할 수 있는지 의문이 들었 그래서 개선된 방식으로, ID 토큰을 사용하되, 구글의 검증 API를 통해 토큰의 유효성을 먼저 검증하는 절차를 추가했다. 이 과정에서는 토큰이 내가 설정한 클라이언트 ID와 일치하는지 확인하여, 해당 토큰이 진정한 로그인 요청에서 생성된 것임을 보장했고. 검증을 통과한 경우에만 JWT 형식의 페이로드에서 사용자의 정보를 추출하는 방식으로 구현함.
추가적으로, memberService의 CheckSoclalId메소드를 통해 데이터베이스에서 소셜 ID의 중복 여부를 확인하는 기능도 구현, 이 검사를 통과한 경우에만 사용자의 정보를 성공적으로 등록하며, 동시에 로그인된 데이터를 세션에 저장하는 방식으로 처리했다.
이건 저도 잘 모르겠어서 한번 같이 올려봤어요 근데 이게 맞는 케이스의 경험인가라는 생각이 드네요 ㅎㅎ..
8) http와 https의 차이점
http는 웹 상에서 클라이언트와 서버 간에 데이터를 주고 받기위해 기본적으로 제공하는 프로토콜인데 HTTPS의 경우 거기에 암호화가 가능한 프로토콜을 결합하여 보안을 강화한 프로토콜이다.
딱 기본적인 거로만 답변했습니다 다만 https가 특정 프토로콜이랑 결합해서 보안을 강화했다는 건 아는데, 프로토콜 이름을 몰라서 애매한 답변 인거 같아요.
9) http 메소드 종류의 설명 + 보안적 측면에서 https와 post에 대한 생각을 해봤냐
보안적 측면까지 생각을 해봤냐라고 하면.. 솔직히 생각을 안해본건 아닌데, https랑 post 방식으로 데이터를 전송하는 부분이랑 연관지으니까 어떻게 답변을 할지 너무 당황해서 전체적으로 답변을 못했습니다 ㅠㅠ..
10) 협업 과정에서 트러블이 생겼다면 그걸 어떻게 해결할건지 아니면 어떻게 해결했는지에 대한 질문
개인적인거라 생략..
11) 개발 과정에서 발생한 에러를 어떻게 해결했는지
이건 그냥 예매하고 아임포트 API를 이용해 결제하는 과정에서 디버깅을 통해 어떤 데이터들이 null 값으로 표현되는지 확인하고, 해당 데이터가 어느 부분부터 못 받아오는지 데이터의 흐름을 체킹하면서 에러를 해결했다.. 더 말하면 내용이 길어서 이렇게 축약할게요.
12) 성격의 장단점
개인적인거라 생략..
13) 왜 개발자를 선택했나
개인적인거라 생략..