웹
1. HTTP 기반 통신의 이해
1.1 통신 순서
①웹 브라우저(클라이언트)에서 url입력(서버에 데이터 요청)
②인터넷을 통해 서버에 접근
③인터넷을 통해 서버가 클라이언트에게 응답
※ 클라이언트에서 서버로 데이터를 전송할때, 서버에서 클라이언트로 데이터를 응답할때
모두 http 프로토콜 기반으로 데이터를 주고 받음
- HTML, TEXT
- IMAGE ,음성, 영상, 파일
- JSON, XML (API) 등
2. 웹서버와 웹어플리케이션서버(WAS)
2.1 역할
• 웹 서버
- 정적 리소스를 제공 (html,css,js,이미지,영상)
• WAS
- 웹서버 기능 + 프로그램 코드를 실행가능(애플리케이션 로직 수행)
- 서블릿, JSP, 스프링 MVC가 웹어플리케이션 서버에서 동작하게 됨
2.2 웹시스템 구성 (WEB, WAS, DB) 설명
• 웹서버가 앞에서 정적리소스를 응답해줌
• 애플리케이션 로직이 있어서 웹서버가 처리를 못하면 WAS에게 넘김
• 정적리소스가 많이 필요하면 웹서버를 증설
• 애플리케이션 리소스가 많이 사용되면 WAS 증설
• WAS,DB 장애시 웹서버가 오류 화면 제공이 가능함
※ API서버만 제공하면 WEB서버는 필요없음.
서블릿
1. 클라이언트 요청 / 서버 응답
1.1 클라이언트에서 요청
• HTML의 form 데이터를 전송할때 웹브라우저가 HTTP 메세지를 만들어서 서버에 보냄
1.2 서버에서 처리 및 응답
• 서버 TCP/IP연결 대기, 소켓연결
• HTTP 요청메세지를 파싱해서 읽기
• POST 방식, /save URL 인지
• content-type 확인
• HTTP메세지 바디 내용 파싱(데이터를 사용할수 있게 파싱)
• 저장 프로세스 실행
• 비지니스 로직 실행(DB 저장 요청)
• HTTP 응답 메세지 생성
• TPC/IP에 응답 전달, 소켓 종료
※ WAS를 직접 구현할 경우 위의 로직을 구현해야함
1.3 역할
• 서블릿을 지원 하는 WAS 사용하면 비지니스 로직 실행 이외의 로직을 대신 수행 해줌
• urlPatterns의 URL이 호출 되면 서블릿 코드가 실행
• http 요청 정보를 편리하게 쓸수있는 HttpServletRequest
• http 응답 정보를 편리하게 제공 할수 있는 HttpServletResponse
• 개발자가 HTTP 스펙을 편리하게사용 가능
2. 서블릿 컨테이너
2.1 서블릿 컨테이너란 ?
• 서블릿을 지원하는 WAS를 서블릿 컨테이너라고함
• WAS안에 서블릿 컨테이너가 있는데 서블릿을 자동으로 생성, 호출, 생명주기를 관리
• 서블릿 객체는 싱글톤으로 관리
◦ 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
◦ request, response 객체는 요청이 올때마다 새로 생성되지만
◦ request와 response의 요청을 실행하는 서블릿 객체는 재사용을함
◦ 서블릿 컨테이너 종료 시 함께 종료
• JSP도 서블릿으로 변환되어 사용
• 동시 요청을 위한 멀티쓰레드 처리 지원
3. 멀티 쓰레드
3.1 쓰레드의 용도
• 웹브라라우저에서 요청을 할때 WAS(서블릿)와 연결되어 쓰레드가 처리함
• 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드
• 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행
• 쓰레드가 없다면 자바 애플리케이션 실행이 불가능함
• 쓰레드는 한번에 하나의 코드 라인만 수행
• 동시 처리가 필요하면 쓰레드를 추가로 생성
3.2 HTTP요청과 쓰레드의 역할
• 클라이언트에서 요청이 오면 쓰레드를 할당
• 쓰레드를 가지고 서블릿을 실행해서 서블릿이 응답
3.3 요청마다 쓰레드를 생성 시 장단점
장점
• 동시 요청을 처리 가능
• 리소스(CPU,메모리)가 허용될때까지 처리가능
• 하나의 쓰레드가 지연 되어도, 나머지 쓰레든느 정상 동작한다.
단점
• 쓰레드는 생성비용이 비싸서 많은 쓰레드가 생성되면 응답소도가 느려짐.
• 쓰레드가 많아지면 쓰레드 컨텍스 스위칭 비용이 발생.
• 쓰레드가 많아지면 CPU, 메모리 임계점을 넘어서 서버가 죽을 수 있음.
3.4 쓰레드풀
• 요청마다 쓰레드를 생성하는것이 아닌 쓰레드 풀에 쓰레드의 최대 개수를 설정하여 쓰레드를 관리
※ WAS의 주요 튜닝 포인트는 쓰레드 개수이고 쓰레드 개수의 적정선은 애플리케이션 마다 모두 다름
• WAS가 멀티쓰레드에 대한 부분을 처리하고 개발자가 멀티쓰레드 관련 코드를 신경쓰지 않아도 됨
프론트 엔드 기술
1. HTTP를 통해서 데이터 주고 받는 방식
1.1 정적인 리소스
- 이미 생성된 리소스 파일(고정된 HTML, css, js, 이미지, 영상 등)을 제공
1.2 HTML 페이지
- 동적인 페이지는 클라이언트 요청 시 WAS에서 처리한 로직을 동적으로 HTML을 생성해줌(ex JSP, Thyemleaf)
1.3 HTTP API
- HTML이 아니라 데이터를 전달(주로 JSON 형식)
- WAS에서 처리한 로직을 JSON형식의 데이터로 응답해줌
※ JSON 형식 예시 → {"상품명": "스프링","수량" : 100, "금액" : 4000}
- UI화면이 필요하면 클라이언트가 별도로 처리함
- 다양한 시스템에서 호출 : 웹 클라이언트(React, Vue.js, Ajax) to 서버 / 앱 클라이언트 to 서버 / 서버 to 서버
2. SSR
2.1 SSR 이란
• 서버사이드 렌더링
• 서버에서 생성된 동적인 HTML을 클라이언트에 최종적으로 전달
• 정적인 화면에 사용
• 관련 기술 : JSP, Thyemleaf (백엔드 개발자)
3. CSR
3.1 CSR이란
• 클라이언트 사이드 렌더링
• 처리 방식
◦ <클라이언트> HTML에서 url 요청
◦ <서버> 내용이 없고 자바스크립트 링크를 담은 HTML을 전달
◦ <클라이언트> 서버에서 받은 자바스크립트를 요청
◦ <서버> 자바스크립트안에 클라이언트 로직, HTML 렌더링 로직을 전달
◦ <클라이언트> HTTP API 데이터 요청
◦ <서버> JSON 데이터 전달
※ 웹브라우저가 Javacript의 클라이언트로직과 HTML 렌더링 로직으로 JSON 데이터를 실어서 클라이언트 사이드에서 HTML 생성
• HTML 결과를 자바스크립트를 사용해서 웹브라우저에서 동적으로 생성해서 적용
• 동적인 화면에 사용, 웹환경을 앱처럼 필요한 부분부분 변경 가능
• 관련기술 : React, Vue.js (웹 프론트엔드 개발자)
자바 백엔드 웹 기술 역사
• 서블릿 1997 : HTML 생성이 어려움 (java 소스안에서 html을 생성해야함)
• JSP 1999 : HTML 생성은 편리하지만, 비지니스 로직까지 담당
• 서블릿 JSP 조합 MVC 패턴 : 모델, 뷰, 컨트롤러로 역할을 나눠 개발
• MVC 프레임워크 춘추 전국 시대 2000초~2010초
• 애노테이션 기반의 스프링 MVC : MVC 프레임워크의 통일
• 스프링부트 : 빌드결과 jar파일에 WAS서버를 포함
'일상의 흔적 > Study' 카테고리의 다른 글
인프런 스프링 MVC 1 (웹개발 핵심 기술) : 서블릿, JSP, MVC 패턴 - 3 (0) | 2023.03.16 |
---|---|
인프런 스프링 MVC 1 (웹개발 핵심 기술) : 서블릿 - 2 (0) | 2023.03.16 |
인프런 스프링 핵심 원리 요약 : 빈스코프 - 9 (0) | 2023.03.05 |
인프런 스프링 핵심 원리 요약 : 빈의 생명주기 콜백 - 8 (0) | 2023.03.05 |
인프런 스프링 핵심 원리 요약 : 자동 의존 관계 주입(2) - 7 (0) | 2023.03.05 |