1. 웹 서버 vs 웹 애플리케이션 서버
    • 최근엔 거의 모든 형태의 데이터를 주고 받을때 HTTP 사용해 통신함 (클라이언트 ↔ 서버, 서버↔ 서버)
    • 웹서버: 정적 리소스 제공(html,css,js,image,영상 등)
    • 웹 애플리케이션 서버(WAS) : 웹 서버 기능 + 애플리케이션 로직(Servlet, JSP, Spring mvc등등) 실행
    • 실무에서 웹을 만들때 → was + db 만으로도 구성 가능
      • 그러나 was가 너무 많은 역할 담당
      • 애플리케이션 로직이 정적 리소스 때문에 수행에 문제,지연 가능
      • 장애 시 오류화면 로드 불가능
    • 실제론 웹서버에서 기본 처리하다가 필요할때 was 호출하는 방식 주로 사용함
      • 리소스 효율적인 분배 가능
      • 서버 증설이 편리함
      • was 장애 발생해도 오류화면 제공 가능
  2. 서블릿
    • TCP/IP 통신 연결 부터 HTTP 메소드 파싱 등 비즈니스 로직 외에 다른 일들을 제공함
    • url로 요청 → WAS에서 request,response 객체 만들어서 서블릿 컨테이너에 제공 → 컨테이너에서 요청에 맞는 서블릿 호출,  비즈니스 로직 실행 → response 응답 만들어서 브라우저에 전달
    • 서블릿 컨테이너란
      • 서블릿을 지원하는 was
      • 서블릿 객체를 싱글톤으로 관리한다
      • JSP도 서블릿으로 변환되어 사용 (java server pages)
      • 멀티 쓰레드 기능 지원
  3. 동시 요청과 멀티 쓰레드
    • 웹 요청 ↔ WAS 응답(servlet 객체를 누가 호출함? -> 쓰레드)
    • 애플리케이션 코드를 순차적으로 실행하는 것 = 쓰레드 (java main메소드 실행 -> main이라는 쓰레드 실행)
    • 쓰레드는 한 번에 하나 코드만 실행 → 동시 처리 필요 → 다중 쓰레드 필요
    • was 응답 ( 쓰레드 할당 → 서블릿 호출 → 응답 → 쓰레드 휴식)
    • 요청 여러개 → 요청마다 쓰레드 새로 생성하면?
      • 쓰레드 생성하는 시간 발생
      • 컨텍스트 스위칭 비용 발생
      • CPU, 메모리 과부화 가능
    • 보통 내부에 쓰레드 풀(개수 제한) 만들어놓고 운영함 ( 톰캣은 기본 200개 ← 개수가 나중에 주요 튜닝 포인트)
    • 쓰레드 풀 이상 요청시 → 대기 또는 거절
    • 어플리케이션 시작할때 미리 쓰레드 생성해놓음 → 생성 비용 없음, 응답 속도 굳, 요청 많아도 기존 요청 처리 가능
    • 쓰레드 적정 숫자 어떻게? → 성능 테스트 해봐야함. 아파치 ab, 제이미터, nGrinder 등등
    • 멀티 쓰레드 상황에서 싱글톤 객체 어떻게 사용됨
      • 멀티 스레드 → 메모리는 공유하는 상황임 → 객체 하나 메모리에 생성해놓고 호출하게 하는것
      • 그래서 공유 변수 없도록 항상 주의해야함(상태가 없어야한다, stateless 하도록)
  4. Http Request, Response 기본 지식
    • 요청시 데이터 보내는 방법
      • GET, 쿼리 파라미터
      • POST, Html Form (contentType = application/x-www-form-urlencoded) → 바디에 쿼리 파라미터형식으로 전달
      • Http 바디에 데이터 직접 담아서 제공 (JSON, XML, Text 등등)
    • 응답시 데이터 보내는 방법
      • 단순 텍스트 응답 (contentType = text/plain)
      • HTML 응답 (contentType = text/html)
      • Http body 응답(contentType = application/json... )

+ Recent posts