SSR과 CSR에 대해 설명해주세요.
내 블로그
SSR : 서버에서 사용자에게 보여줄 페이지를 렌더링하여 사용자에게 페이지를 보여주는 방식이다.
HTML은 즉시 렌더링되므로 유저가 사이트를 직접 볼 순 있음(JS파일이 로딩되는동안 조작은 불가 TTV TTI 공부해야함 TTV 와 TTI의 간격이 큼. 하지만 기억했다가 실행)
CSR 보다 페이지를 구성하는 속도는 늦어지지만(HTML과 스크립트만 불러오고 나머지 CSS등은 또 다시 다운) 전체적으로 사용자에게 보여주는 콘텐츠 구성이 완료되는 시점은 빨라진다.
SSR 모든 컨텐츠가 HTML에 담겨있기 떄문에 SEO 좋음
네이버 블로그가 SSR로 바꿈
CSR(client-side rendering)클라이언트에서 사용자에게 보여줄 페이지를 렌더링하여 사용자에게 페이지를 보여주는 방식이다.
HTML파일에는 스크립트부분에 js파일 링크만 달랑 들어있음. 즉
JS파일에 다 들어있는 HTML, CSS와 모든 스크립트들을 한 번에 불러오기때문에
보다 페이지를 구성하는 속도는 늦어진다. 네트워크 상황이 좋지 않다면 글을 보기 전에 상당 시간 하얀 화면을 봐야한다.
또한 CSR에서 사용되어지고 있는 HTML 바디는 텅텅 비어있기 때문에 SEO가 좋지 않음.
https://www.youtube.com/watch?v=iZ9csAfU5Os
https://d2.naver.com/helloworld/7804182
https://proglish.tistory.com/216
AJAX에 대해 설명해주세요.
웹 서버와 비동기적으로 데이터를 주고받는 자바스크립트 기술임.
전체 페이지를 매번 새로고침하지 않고도 페이지의 일부만 데이터를 로드함.
새로고침을 매번 할 필요가 없으므로 웹 페이지 전환이 부드러워짐.
fetch 문법이나 async 문법 혹은 외부 라이브러리(axios등)
단점은 페이지 내 복잡도가 증가하므로 에러 발생 시 디버깅이 어려움.
https://qkrtkddn77.tistory.com/50
https://www.youtube.com/watch?v=nKD1atl6cAw
URL 입력
URL 처리 : 웹 브라우저 URL 해석 ( http 프로토콜, 도메인 이름, 포트, 경로, 파라미터 등)
DNS 조회
서버로 request 전송
response로 브라우저에게 응답 전송
https://yeonjewon.tistory.com/87
모든 사람은 데이터 처리가 필요한 듯 하다(All-People-Seem-To-Need-Data-Processing)
7층. 응용 계층(Application) : 사용자에게 보이는 부분. 구글 크롬등의 웹 브라우저나 HTTP, FTP 등의 프로토콜등이 있음 UI를 제공하는 계층
6층. 표현 계층(Presentation) : 데이터의 변환 작업을 하는 계층
예를 들어 데이터를 안전하게 전송하기 위해 암호화, 복호화하는 작업
5층. 세션 계층(Session) : 응용 프로그램 간의 연결을 지원해주는 계층
2대의 기기, 컴퓨터 또는 서버 간에 대화가 필요하면 세션을 만들어야하는데 이 작업이 여기서 처리.
-----------------------이까지 애플리케이션 계층 ------------------
4층. 전송 계층(Transport) : 서비스를 구분하고 데이터의 전송 방식을 담당하는 계층 (TCP/UDP)
보낼 데이터의 용량과 속도, 목적지 등을 처리. TCP(전송 제어 프로토콜)
3층. 네트워크 계층(Network) : 네트워크를 논리적으로 구분하고 연결하는 계층 - 논리적 주소 사용 IP
2층. 데이터 링크 계층(Data Link)
1층. 물리 계층(Physical)
TCP는 연결지향형 프로토콜 3-way handshaking과정을 통해 연결을 설정하기 때문에 높은 신뢰성 보장. 패킷에 대한 응답을 해야하기 때문에 성능이 낮고, 스트리밍 서비스에 불리(손실된 경우 재전송 요청을 하므로)
UDP는 데이터를 데이터그램 단위로 처리하는 프로토콜임. 데이터그램이란 독립적인 관계를 지니는 패킷이라는 뜻이므로 패킷마다 지맘대로인(연결을 위해 할당되는 논리적인 경로) 비연결지향 프로토콜임.
전송 순서 보장도 안되오, 데이터 수신 여부도 확인하지 않지고 신뢰성이 낮지만 속도가 빠르기 때문에 스트리밍 서비스에 적합.
출처: https://mangkyu.tistory.com/15
예를 들어 www.naver.com 치면
브라우저는 IP를 모르니 로컬 DNS 서버에 물어봄.(보통 통신사 것으로 세팅되어 있음)
거기에 없으면 Root DNS서버(전세계 13개) 에 물어보고 Root DNS서버는 .com으로 끝나는 도메인들을 담당하는 DNS 서버 반환 => 다시. .com에서 naver.com 반환 =>
다시 naver.com DNS 서버에서 www.naver.com 반환!
https://www.youtube.com/watch?v=6fc9NAQkcv0
장점은 데이터를 중앙 서버에 저장하여 관리하여 데이터의 유일성과 통일성을 보장하며 편리하지만
보안에 취약하고(서버털리면 끝) 유지보수도 어려움.
3티어 아키텍쳐는 클라이언트 - 서버 - DB 로 구성
DB를 서버에서 같이 관리하지 않기 때문에 보안측면에서 유리해지지만
관리 포인트가 늘어나 비용 증가
https://www.stevenjlee.net/2020/05/08/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-3%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0-3-tier-architecture/
https://tosiri.tistory.com/7
비연결성은 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊음.
(TCP/IP의 경우 기본적으로 연결 유지 => 서버 자원 지속적으로 소모)
이를 통해 최소한의 자원으로 서버 유지를 가능하게 함.
허나 각각의 자원(HTML, JS, 이미지)을 다운로드하기 위해 연결 종료를 반복하게 됨으로써 자원을 낭비했지만 (HTTP 1.0 초기) TCP 연결이 세팅된 후에 처음에 연결된 TCP연결을 이용해 나머지 파일에 대해 서로 요청/응답을하는 HTTP 지속연결기술을 통해 해결.
지속연결
적절한 엔드포인트를 사용한다거나
적절한 HTTP 메서드를 사용해
해당 자원에 대한 CRUD Operation을 적용하는것.
응답에 리소스의 URI(URI URL)
를 포함한 링크 요소를 삽입하여 작성 함.
PUT은 리소스의 모든것을 업데이트 (만약 PUT인데 일부만 요청을 보내면 보내지지않는 값에 대해서는 null로 처리)
PATCH는 리소스의 일부를 업데이트
요청메세지 시작 줄에는 HTTP 메서드, 요청대상인 URL등, HTTP 버전이 들어감.
응답메세지 상태 줄에는 프로토콜버전(HTTP/1.1), 상태 코드(200등), 상태 텍스트가 들어감.
요청메세지 헤더에는 필수헤더 Host(요청한 호스트정보), User-Agent(유저 앱 정보) 등이 있고
응답메세지 헤더에는 Server(요청을 처리하는 origin 서버의 스프트웨어 정보 apache등)
Allow(허용 가능한 HTTP 메서드) 등이 있음.
둘다 HTTP 요청 헤더임.
If-Modified-Since는 캐시 관련 헤더.
웹 브라우더나 캐시서버가 웹서버에게 Last-Modified의 값을 표기하여 전달하면
실제 서버가 확인하고 304 Not Modified를 보내면 프록시 서버는 자신의 데이터를 클라이언트에게 저장
If-None-Match는 컨텐츠가 변경되었다면...임
GET 에서는 If-Modified-Since처럼
차이점
프록시 캐시에 대해 설명해주세요.
프록시 캐시 서버는 클라이언트 서버 사이에 중계 기능을 하는 서버임.
틀라이언트에 빈번히 요청되는 데이터를 프록시 캐시서버에 보관해빠른 서비스를 가능하게 함.
따라서 응답 시간을 줄이고 병목현상을 줄여 웹 트래픽을 줄일 수 있음.
교차 출처 리소스 공유
이를 해결하기 위해
CORS는 다른 출처의 리소스를 불러오려면 올바른 CORS 헤더를 포함한 응답을 반환해 접근을 허용하는것! !
Access-Control-allow-origin 헤더를 추가에 특정 호스트에 대한 요청을 허용할 수있음.
Preflight 요청에 대해 설명해주세요.
만약 예비 요청의 Host와 응답 헤더에 보함된 Access-Control-Allow-Origin의 값이 다르거나 하는 상황이 오면 CORS 정책을 위반했으므로 브라우저는 에러가 남