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