CS면접 -1-

개나뇽·2024년 4월 6일
0

IoC와 DI

IoC란?

IoC는 Inversion of control 제어의 역전의 약자로 인스턴스 생성 및 관리의 주체가 개발자가 아닌 프레임워크에게 위임한다는 말입니다.

DI란?

DI는 Dependency Injection는 한 객체에서 다른 객체가 필요하여 의존성을 가지게 하는 기술로 Ioc원칙을 실제로 어떻게 적용하는지에 대한 하나의 해결책입니다.

DI 방법으로는 필드 주입, 생성자 주입, @Setter 주입 이렇게 3가지의 방식이 있으며 순환 참조 방지, 불변성의 이유로 권장되는 방식은 생성 자주 입 방식이 주로 사용됩니다.

WAS와 웹 서버의 차이

WAS

비즈니스 로직이 작성 가능
ex) Tomcat, PHP, ASP, .Net...
  1. 동적인 데이터를 제공하기 위한 서버, 웹 서버에서 처리가 불가한 동적인 정보를 처리하여 웹 서버에 제공해줍니다.
  2. 웹 서버의 기능을 내장하고있어 웹 서버 없이 서비스가 가능합니다.
  3. DB와 연결이 가능하여 필요한 데이터를 꺼내 원하는 정보로 가공이 가능합니다.

WS(웹 서버)

비즈니스 로직 작성 불가능
ex) Nginx, Apache...
  1. HTML, CSS, Js등의 정적인 파일을 제공하기 위한 서버입니다.
  2. 정적인 파일로만 처리가 가능한것은 WAS로 넘기지 않고 자체적으로 처리합니다.

대용량 트래픽에서 장애가 발생시 대응법

Scale UP

단어 그대로 스케일을 높이는 방법 서버의 스펙(고성능 CPU, 메모리 확장, SSD)을 높이는 수직적인 방법입니다. 
  • 장점 : 구축이 쉽다,여러 서버에 데이터 일관성을 유지 작업이 필요하지 않다,
    컨트롤러, 네트워크 비용이 별도로 발생하지 않는다의 장점이 있습니다.

  • 단점 : 한대의 서버에 모든 부하가 몰려 장애 발생시 치명적이다, 용량과 성능 확장에 제한이 있다, 비용이 많이 든다의 단점이 있습니다.

Scale out

 비슷한 스펙의 서버를 여러대로 증설하여 로드밸런싱을 통한 병렬처리가 가능한 수평 스케일업 아키텍처입니다.
  • 장점 : 장애 발생이 대처가 유연하다, 지속적인 확장이 가능하다, 저렴하다의 장점이 있습니다.

  • 단점 : 모든 서버의 데이터 일관성을 유지해야한다, 구축하기 어렵다, 관리하는데 비용이 증가하는등의 단점이 있습니다.

Servlet

Servlet 이란?

서블릿이란 클라이언트의 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술입니다. Spring MVC에서 컨트롤러로 이용됩니다.

ex) 클라이언트가 로그인 시도를 한다고 했을때 입력된 아이디, 비밀번호를 확인하고 결과를 반환해주는 역할을 수행하는것이 서블릿이라고 생각하면 될거같습니다.

  • 동작과정
1. 클라이언트에서 웹 서버에 요청
2. 웹 서버에서 WAS에 위임
3. HttpServletRequest, HttpServletResponse 객체 생성
4. 그 다음 요청이 온 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다.
5. 해당 서블릿에서 service메소드를 호출한 후 POST, GET여부에 따라 doGet() 또는 doPost()를 호출한다.
6. doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답
7. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸

Dispatcher Servlet

WAS의 서블릿 컨테이너를 통해 들어오는 모든 요청을 제일 앞에서 받는 프론트 컨트롤러 입니다. Dispatcher Servlet은 공통된 작업을 거친후 적절한 세부 컨트롤러로 작업을 위임하고 세부 컨트롤러에서는 작업을 마치면 반환해야하는 view를 Dispatcher Servlet로 넘겨줍니다.

  • 동작과정
1. 클라이언트가 URL로 접근하여 정보를 요청
2. 해당 요청을 매핑한 컨트롤러를 검색(Dispatcher Servlet)
3. 공통 작업을 처리(Handler Mapping)후 세부 컨트롤러로 위임
4. 위임 받은 컨트롤러에서 작업후 반환하는 view이름을 Dispatcher Servlet으로 리턴
5. view이름을 검색(View Reslover)
6. 검색된 view이름을 다시 Dispatcher Servlet에 전달
7. Dispatcher Servlet는 클라이언트에게 응답

동기 와 비동기

  • 동기(Synchronous)
    • 요청을 보내고 실행이 끝나야 다음 동작을 처리한다.
    • 순서에 맞춰서 진행하여 제어가 쉽다. 하지만 여러 요청을 동시에 실행이 불가능하여, 효울성이 떨어진다.

ex) 한명의 콜센터 직원이 동시에 여러 전화 응대가 불가능하다. 하나의 응대가 끝나야 다음 응대가 가능

  • 비동기(Asynchronous)
    • 요청을 보내고 처리결과 상관없이 다음 작업이 가능하다.

    • 작업이 완료되기까지 대기가 필요없어 자원의 효철적 사용이 가능하나 제어가 어렵다.

      ex) 이메일을 발송했을때 답변을 받지 않아도 다시 이메일을 전송할 수 있다.

profile
정신차려 이 각박한 세상속에서!!!

0개의 댓글