우아한테크코스/레벨3
레벨2 학습로그 기반 모의면접준비
nauni
2021. 6. 24. 15:38
예상질문리스트
- Spring 사용 이유? 장점?
- 스프링은 자바 프로그래밍을 더 빠르고, 쉽고 편하게 해주는 애플리케이션 프레임워크이다. 애플리케이션 개발에 보편적이고 공통적으로 사용하는 코드들을 추상화하여 진짜 우리가 하고 싶은 기능 개발에 집중할 수 있게 도와준다. 스프링은 객체지향 개념을 사용하여 극대화하여 구현되어 있고, 더 객체지향적인 기술개발을 가능하게 한다.
- Web Server VS WAS?
- 웹서버는 웹브라우저에서 요청하는 정적 페이지를 전송해주는 서비스를 의미한다. WAS(Web Application Server)는 웹 브라우저의 요청에 동적인 컨텐츠를 제공하는 서비스를 의미한다. 웹 컨테이너(JSP, Servlet 등을 포함)라고 한다. WAS는 웹컨테이너 또는 웹컨테이너+웹서버로 구성되어 있다.
- Servlet?
- 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이다. JSP(Java Server Pages)는 HTML 내부에 자바코드를 삽입한 서블릿 기반의 스크립트 기술이다.
- DispatcherServlet?
- HttpServlet 을 상속하는 실질적인 Servlet 이다. 디자인패턴의 Front Controller 이다. 클라이언트의 요청을 받아 컨트롤러에게 요청을 위임하여 응답을 받는다. 이후 응답에 따라 적절한 뷰를 클라이언트에게 돌려준다.
- 웹 MVC의 동작과정? (Web Request~Response까지, MVC Request Lifecycle )
- Filter를 거쳐 DispatcherServlet에 요청이 들어간다.
- HandlerMapping에서 매핑될 컨트롤러를 탐색한다
- HandlerInterceptor를 거쳐 Contoller 로직을 수행하여 응답받는다.
- ViewResolver에서 적절한 뷰를 보내준다. (Contoller에서 @ResponseBody 를 사용하면 뷰 페이지를 반환하지 않고 그대로 return을 의미한다. ajax 통신을 한다면 ViewResolver 대신 MessageConvertor로 변환되어 반환된다.)
- CORS 정책이란?
- 브라우저에서 보안상의 이유로 동일 출처 정책(Same-Origin Policy)를 시행한다. 출처(프로토콜 + 호스트 + 포트)가 다른 리소스와 상호작용하는 것을 제한하는 것이다.
- 다른 출처의 리소스를 불러오기 위해 CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)를 사용한다. 실행중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하였음을 브라우저에게 알려주는 것이다.
- preflight 요청을 한다. (Option 메소드 사용)
- 출처와 관련하여 OK응답을 받으면 실제 필요한 요청을 보낸다.
- 각 레이어의 역할?
- PresentationLayer: View
- Contoller: request, response에 대한 매핑을 담당
- Service: 비지니스로직을 담당, Controller에서 request를 받아 DB와 비지니스 로직을 연결하여 적절한 response를 응답한다.
- Repository(Dao): 데이터베이스에 접근하여 영구 데이터를 처리한다. 객체의 정보를 영구데이터로 저장하거나 수정, 삭제 등을 시행한다. 데이터를 통해 객체를 반환하기도 한다.
- Domain: 객체로 비지니스 로직을 수행한다.
- 각 테스트가 갖는 의미?
- 인수테스트: 시나리오 테스트라고 하기도 한다. 실제 실행환경과 비슷한 환경을 조성하여 예상한 행동에 맞는 응답을 하는지 확인한다. (E2E, End To End 테스트를 진행)
- 통합테스트: 여러 모듈이 상호작용을 하는지 확인하는데 목적이 있다.
- 단위테스트: 작은 단위의 테스트를 의미한다. 가장 빠르다.
- 쿠키, 세션, 토큰에 대해 설명?
- 쿠키: 저장이 되면 서버 요청시마다 보내지게 된다. 암호화 되어있지 않다면 탈취시 개인정보가 그대로 노출될 수 있다.
- 세션: 세션을 통한 인증은 서버측에서 세션저장소라는 별도의 데이터베이스 저장공간에 사용자를 등록하고 sessionId 값으로 관리한다. 클라이언트에게 sessionId를 보내주고 요청이 올 경우 세션저장소에서 sessionId를 통해 사용자 정보를 확인한다. 사용자가 몰릴 경우 서버의 부하가 커진다.
- 토큰: 서버는 토큰을 로그인한 사용자에 대해 발급한다. 대칭키, 비대킹키를 통해 암호화를 알 수 있다. 토큰은 어딘가에 저장되는 값이 아니다. 클라이언트에게 토큰을 전달해주면 Authorization 헤더에 넣어보내고 서버에서 클라이언트가 보내주는 토큰이 서버에서 발급한 토큰과 일치하는지 확인하여 사용자 정보를 확인한다.
- 인증가 인가에 대해 설명?
- 인증: 로그인기능, 인증된 사용자인지 확인하는 것
- 인가: 사용자의 해당 서비스 사용권한이 있는지 확인하는 것
- Layer 우선, 모듈 우선 패키지 정책의 각각의 특징?
- Layer 우선: 도메인위주 개발에 적합, 중복부분을 제거하기 용이, 순환참조 가능성이 낮음, 모듈단위 분리시 어려움
- 모듈 우선: 기능 단위 개발에 용이, 중복코드 및 순환참조 가능성이 높음
- JWT
- JsonWebToken으로 JSON 객체를 사용하는 토큰
- 토큰 = 헤더(토큰타입 및 알고리즘) + 페이로드(정보) + 서명(헤더+페이로드를 암호화한 값)
- . 을 구분자로 3가지 문자열로 되어있다.
- Header: typ(토큰 타입), alg(해싱 알고리즘)
- Payload: claims
- Signature: 헤더+페이로드 를 암호화
- 대칭키, 비대칭키?
- 대칭키: 하나의 키로 암호화 복호화를 진행
- 비대칭키: 암호화 복호화하는 키가 다름
- 데드락이란?
- 여러 프로세스가 서로 가진 자원들을 요청하며 대기하는 현상
- 데드락을 줄이는 방법?
- 락이 걸리는 게 많을 수록 데드락의 발생가능성이 높아진다. 따라서 락이 걸리는 범위를 최소화하는 것이 줄이는 방법이다. 또한 락이 걸리는 순서를 동일하게 만들면 순서대로 락이 걸리기 때문에 서로 대기하는 데드락 상황이 발생될 가능성이 적다.
- @Bean 과 @Configuration 을 통해 빈등록하는 것과 @Component 로 빈등록하는 것의 차이?
- @Bean 은 메소드 수준에 @Component 는 클래스 수준에 사용되는 어노테이션이다.
- Lite Bean Mode란?
- @Bean 어노테이션을 @Configuration 이 아닌 @Component 아래에서 사용하면 Lite Bean Mode 가 된다. 이 경우 런타임 호출시 생성되나 CGLIB에 의해 싱글톤 객체로 관리되지 않기 때문에 버그 발생 가능성이 있다. 따라서 @Bean 은 @Configuration 과 같이 사용되는 것이 좋다.
- @Nested 테스트 구조를 사용하는 경우는?
- 테스트간의 계층구조를 만들 때 사용한다. 어떤 조건하에 있는 여러가지 테스트를 만들 때 사용할 수 있다. 예를들면 로그인한 경우에는 나이에 따라 추가 할인이 들어가고, 비로그인 경우에는 사용횟수에 따른 추가할인이 들어가는 경우가 있다.
기타
- REST 란?
- Representational State Transfer의 약자로 스타일가이드이다. 효율적, 안정적이며 확장가능한 분산시스템을 가져올 수 있는 아키텍처 디자인 제약의 모음이라고 한다. 제약이 준수될 때 RESTful하다고 한다. REST의 기본 개념은 자원(Resource)에 뿌리를 둔다. 해당 자원의 상태를 주고 받는 것을 의미하며 자원의 표현에 의한 상태전달을 의미한다.
- 프록시서버? 포워드프록시? 리버스프록시서버?
- 프록시서버: 자신을 거쳐 다른 서버에 접속할 수 있게 하는 서버
- 포워드 프록시: 내부망에서 외부 인터넷 요청을 하기 전에 거치는 프록시 서버, 서버에게 클라이언트가 누구인지 감추는 역할
- 리버스 프록시: 인터넷에서 내부방 서버에 통신하기 전에 거치는 서버, 서버가 누구인지 감추는 역할
- https://firework-ham.tistory.com/23
- https://yunyoung1819.tistory.com/9