-
TIL 32th day(2021.11.22)TIL(Today I Learned) 2021. 11. 22. 17:13
TIL 32th day(2021.11.22)
웹 서버, WAS(Web Application Server)
- 웹 서버, WAS 모두 HTTP 기반으로 동작
- 웹 서버는 정적 리소스(파일)
- WAS는 서버 기능 + 정적 리소스
- 동적 HTML, HTTP API(JSON), 서블릿, JSP, 스프링MVC
- 애플리케이션 코드를 실행하는데 더 특화
Servlet
- HTTP 요청 및 응답 정보를 평리하게 사용하거나 제공할 수 있다. 즉, 개발자는 HTTP 스펙을 매우 편리하게 사용가능하다.
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
- 서블릿 생성, 호출, 관리해줌
- 서블릿 객체는 싱글톤으로 관리
- 요청마다 새로운 객체 생성은 비효율적.
- 주의) 공유 변수 사용 주의(지역변수, 파라미터, ThreadLocal 등을 사용해야함)
- 멀티 쓰레드 처리 지원(중요)🎯
쓰레드
- 애플리케이션 코드를 하나하나 순차적으로 실행하는것
- 동시 처리가 필요하면 쓰레드를 추가
멀티 쓰레드
- WAS에서 지원해준다(핵심, 멀티쓰레드 관련 코드 작성 x). 동시 요청 처리 가능 🎯
- 주의) 멀티 쓰레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)은 주의해서 사용
- 단점) 사용 비용이 높다, 스위칭 비용 발생, 임계점 이상의 요청이 오면 서버 다운
- 해결방안) 쓰레드 풀 : 쓰레드를 미리 쓰레드풀에 적재해놓고 사용, 허용량 이상 요청 시 대기 또는 거절
- 장점 : 스위칭 비용이 절약, 응답시간 단축, 과요청 시에도 안전하게 처리 가능
- 실무 Tip
- 주요 튜닝 포인트는 최대 쓰레드(max thread) 수(성능테스트로 판단, 툴:아파치 ab, 제이미터 nGrinder)
HTTP API
- JSON 형식으로 데이터를 요청받고 반환하는 방식.
- 앱,웹,서버 to 서버
backend 개발자 웹 개발시 고려사항 3가지
- 정적페이지 어떻게 제공할건지(HTML)
- 동적 페이지 어떻게 제공할건지(WAS, JSP, 타임리프 -> HTML)
- API 어떻게 제공할건지(JSON방식)
SSR, CSR
SSR - 서버 사이드 렌더링(백엔드), 필수적
- 정적이고 복잡하지 않은 화면에 사용
- HTML을 서버에서 만들어서 웹 브라우저에 전달
- JSP, 타임리프 사용
CSR - 클라이언트 사이드 렌더링(프론트엔드)
- HTML을 동적으로 만들어주는 자바스크립트 사용
- ex) 구글 지도
- 관련 기술 : React, Vue
참고 : SSR에서도 자바스크립트를 사용해서 화면 일부로 동적으로 변경 가능
IP(Internet Protocol)
- 인터넷 통신에 필요
- IP 패킷
- 출발지 IP, 목적지 IP
- 한계) 비연결성(받을 대상이 없어도 패킷 전송), 비신뢰성(패킷의 연결 중단 또는 불규칙한 순서), 프로그램 구분을 못함
- 해결방안) TCP
TCP(Transmission Control Protocol)
- IP 패킷안에 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보, 전송 데이터 등이 포함
- 연결 지향(선 연결 후 전송)(TCP 3 way handshake(가상 연결))
- 순서 보장
- 신뢰성, 대부분 application에서 사용
TCP 3 way handshake
- 클라이언트와 서버가 서로간에 syn(접속 요청)와 ack(요청 수락) 및 데이터 전송
- 가상 연결
IP 스택 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층(예) LAN 드라이버, LAN 장비)
UDP(User Datagram Protocol)
- IP + PORT(프로그램 구별해줌) + 체크섬
- 최근에는 최적화 때문에 UDP도 사용하는 추세이다.
PORT
- 같은 IP 내에서 프로세스(프로그램(?)) 구분
DNS(Domain Name System)
- 전화등록부와 유사, IP를 미리 등록해놓고 필요할 때 사용
- IP 변경 가능
복습 + 궁금한점 ✔
싱글톤의 기능은 @Configuration이 보장한다.(환경 설정 클래스를 CGLIB class로 변환해줌으로써)
AutoScaling이 쓰레드 요청 부하를 해결해줄 수 있는가?
lombok : @RequiredArgsConstructor로 final 생성자를 자동으로 생성해주는 기능이다.
참고(References)
- 인프런 '김영한' 강사님의 "스프링 MVC 1편", "HTTP 강의"
'TIL(Today I Learned)' 카테고리의 다른 글
TIL 35th day 2021.11.26 (0) 2021.11.26 TIL 33th day(2021.11.23) (0) 2021.11.23 TIL 31th day (2021.11.21) (0) 2021.11.21 TIL 30th day(2021.11.20) (0) 2021.11.20 TIL 29th day(2021.11.19) (0) 2021.11.19