[ URL 구성요소 ]
https:// search.naver.com:443/search.naver?&sm=top_hty#section2
- https:// : 프로토콜(서버와 클라이언트 사이의 통신 시 프로토콜)
- search.naver.com : 요청할 DNS(도메인 네임) . IP로 변환됨
- :443 : 요청할 port (보통 생략되어 있으며, https는 443임)
- /searc.naver : 웹 서버 내에서 요청하고자 하는 특정 페이지나 리소스
- ? 뒷 부분 : 쿼티 스트링(서버로 정보를 전달하기 위해 URL에 추가로 붙여지는 데이터로, ?로 시작하며 키과 값 쌍으로 구성됨)
- #section2 : fragment(서버쪽에 요청하는 정보는 아니고, 클라이언트 측에서 현재 위치를 파악하기 위한 것. #section2 라고 하면 html에서 id가 section2인 곳으로 바로 이동)
http:// localhost:8181/basic
- localhost : 127.0.0.1 라는 내 컴퓨터의 private IP (FYI. private IP : 외부 인터넷이 아닌 특정 조직에서만 사용하는 IP. 외부에서 연결하려면 public IP를 알아야 함)
[HTTP STATUS CODE]
- 2xx는 요청 성공, 3xx는 리다이렉션, 4xx는 클라이언트측으로 인한 실패, 5xx는 서버로 인한 실패
- 200 OK : 요청이 성공적으로 처리되었음
- 201 Created : 요청이 성공적으로 처리되었으며, 새 리소스가 생성되었음(=서버에 새로운 데이터가 저장되었음= 댓글 달기 등)
- 400 Bad Request : 클라이언트가 보낸 요청이 서버에서 이해할 수 없을 때(쿼리스트링을 형식에 맞게 안 보내면, 백엔드 개발자가 원래는 505로 뜨지만 try-catch 로 400으로 뜨게 setStatus함)
- 404 Not Found : 올바르지 않은 리소스(페이지=path) 요청
- 500 Internal Server Error : 개발자가 코드 잘못 짬
[ 정적 페이지 vs 동적 페이지 ]
| 구분 | 정적 웹 페이지 | 동적 웹 페이지 |
|---|
| 설명 | 비즈니스 로직과 상관없이 항상 내용이 고정될 때 | 사용자나 DB 내용에 따라 내용이 달라짐 |
| html 생성 | 웹 서버에서 개발자가 이미 만든 html 파일을 가지고 있다가, 클라이언트에게 전달 | WAS (클라이언트 요청에 따라 DB 조회 또는 서버 로직 실행 -> JSP, Servlet를 통해 실시간 생성) |
| 렌더링 | 클라이언트 사이드 (html, css, js를 해석하여 시각적으로 화면에 표시) | 클라이언트 사이드 (서버가 생성한 html을 해석하여 화면에 표시) |
| 로딩 속도 | 빠름 (고정된 컨텐츠를 단순히 제공하므로 요청과 응답이 빠르게 이루어짐) | 느림 (서버에서 요청을 처리하고 html을 생성하는 과정이 필요하므로 시간이 더 걸림) |
| 서버 종류 | 주로 웹서버 | 주로 웹어플리케이션(java에서 비즈니스 로직 처리하고, db랑도 연결해야 하므로) |
[ 웹 서버 vs WAS(Web application server) ]
- JSP, Servlet은 뒷 포스트에서 확인 가능
| 구분 | 웹 서버 (Web Server) | 웹 애플리케이션 서버 (WAS) |
|---|
| 설명 | 클라이언트가 정적 웹페이지를 요청할 때, 웹 서버에 미리 저장되어 있던 HTML,CSS,JS 파일을 전달해줌 | 클라이언트가 HTTP 통신으로 요청 -> 정적 웹페이지는 웹 서버가 처리하고, 동적 웹페이지(비즈니스 로직 및 DB 조회 내용에 따라 달라지는 것)은 WAS로 전달 -> WAS(Tomcat)은 Servlet을 호출 -> Servlet이 호출됨(JSP로 html 생성했을 경우, JSP는 tomcat에 의해 자동으로 컴파일 되어 servlet으로 변환됨) -> 생성된 콘텐츠를 WAS가 클라이언트에 전달 |
| 처리 내용 | 정적 콘텐츠 제공 | 동적 콘텐츠 생성 및 처리 |
| 예시 | Apache HTTP Server, Nginx | Apache Tomcat, JBoss, WildFly, WebLogic |
[ 빌드 도구 ]
용도1. 의존성(라이브러리 관리)
-외부 라이브러리를 pom 파일에서 자동으로 다운로드 및 관리
용도2. 컴파일
- HTML, CSS, JavaScript는 브라우저가 바로 읽을 수 있지만, 서버 사이드 언어인 Java는 컴파일 과정을 거쳐야