728x90
1. web server, web app server
- 웹
- http 기반으로 작동 = http protocol의 규칙을 따라서 요청과 응답이 오고 간다.
- http 메시지
- 거의 모든 형태의 데어터 전송 가능
ex) HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML (API) - 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
- 거의 모든 형태의 데어터 전송 가능
2. 용어
2.1. 웹 서버(WEB)
- HTTP 기반으로 동작
- 정적 리소스 제공, 기타 부가기능
- webServer가 가지고 있는 html,css.js.img,avi 를 client가 요청시, http로 응답해주는 것
- ex) NGINX, APACHE
2.2. 웹 애플리케이션 서버(WAS)
- HTTP 기반으로 동작
- 웹 서버 기능 포함 + (정적 리소스 제공 가능)
- 프로그램 코드를 실행해서 애플리케이션 로직 수행 - web server와의 차이점
- 동적 HTML, HTTP API(JSON)
- 서블릿, JSP, 스프링 MVC • 예) 톰캣(Tomcat) Jetty, Undertow
- ex) 톰캣(Tomcat) Jetty, Undertow
2.3. WEB, WAS 차이점
- 구분하기 모호함 - WEB도 프로그램 실행하는 기능 포함하기도 하고 WAS도 WEB기능 제공함
- 주요 차이점 : WEB(정적 리소스) - WAS(app logic = 동적)
- 구체적 차이점 : WAS는 application code 실행하는데 더 특화
- 자바: 서블릿 컨테이너 기능 제공하면 WAS
ex) 톰켓
3. 구성
- 웹 시스템 구성 - WEB, WAS, DB
- WEB
- 정적 리소스 처리, WAS 서버 과부하 방지 및 역할 분담, 오류 화면 노출 가능 ex) 정적 리소스: html, css, js, img
- applicaion logic 처리가 필요시(=동적 처리 필요시) WAS에 요청 위임
- WAS
- 위임 받은 app logic 처리 전담
- 장점
- 효율적인 리소스 관리: 정적 리소스 많이 사용시 web 서버 증설, app 리소스 많이 사용시 WAS 증설
- web은 잘 안죽음 -> WAS, DB 죽을 시 WEB에서 오류 화면 제공 가능
5. 경로
5.1. 경로 방식 개요
- 경로 방식은 jsp 파일 사용 여부에 따라서 spring 경로, spring boot 경로로 나뉜다
이유: jsp 파일은 webapp/WEB-INF를 사용하기 때문
- spring 프로젝트는 옛날 프로젝트라 보통 jsp를 사용해서 spring 경로 방식을 권장
- springboot 프로젝트는 thymeleaf 사용을 권장해서 springboot 경로 방식을 권장
cf) spring-boot에서 굳이 jsp를 사용할 경우 spring 경로를 따른다. 반대로 spring project에서 thymeleaf 사용시 springboot 경로 따른다.
- web server의 경우 아래 2가지 방식이 존재하는데 뭘 쓰든 상관 없다. 하지만 권장하는 방식을 따르는 것을 추천
- spring의 (src/main/webapp/resources/css,js,img && src/main/webapp/html ) 방식
- springboot의 (src/main/resources/static/css,js,img,html) 방식
- jsp, thymeleaf를 섞어 사용하지 않기 때문에 복잡하게 생각하지 말 것. 그냥 각 프로젝트별 권장 방식을 이용할 것
- 화면은 보여주는 기준은 동적 view를 우선적으로 찾아서 반환하고 없을 경우 정적 view를 찾아서 반환한다.
5.2. default view 화면
- root("/") 경로로 접근하는 controller가 없을 경우 보여주는 default html이 있다. - default 설정은 커스텀 할 수 있다.
- 만약 "/" 경로로 접근하는 controller가 있을 경우 (return "index.html")
- 동적 view 경로에 index.html이 있을 경우 default html을 보여주지 않고 동적 view 파일을 반환
- 동적 view 경로에 index.html이 없을 경우 default html을 보여줌
- Spring 프로젝트의 경우 : src/main/webapp/index.html
- root 경로 (/)에 디폴트로 서비스하는 정적 HTML 파일은 일반적으로 src/main/webapp/html 디렉토리에 위치하며 파일 이름은 보통 index.html
- root 경로 (/)에 디폴트로 서비스하는 정적 HTML 파일은 일반적으로 src/main/webapp/html 디렉토리에 위치하며 파일 이름은 보통 index.html
- Spring Boot 프로젝트의 경우 : src/main/resources/static/index.html
- root 경로 (/)에 디폴트로 서비스하는 정적 HTML 파일은 src/main/resources/static 디렉토리에 위치할 것이며, 파일 이름은 마찬가지로 index.html
5.3. Spring
- web server: 정적 자원 (CSS, 이미지, JavaScript, 정적 html 등)
- src/main/webapp/resources/css
- src/main/webapp/resources/js
- src/main/webapp/resources/img
- src/main/webapp/html
- was server : JSP 파일 및 동적 뷰
- src/main/webapp/WEB-INF/views/jsp
- 경로(권장)
- src
- main
- resources
- webapp
- html (정적 html)
- resources
- css
- js
- img
- WEB-INF
- jsp (동적 html)
5.4. Spring boot
- web server
- src/main/resources/static/html
- src/main/resources/static/css
- src/main/resources/static/js
- src/main/resources/static/img
- WAS : HTML 파일 또는 Thymeleaf, Freemarker 등의 동적 뷰
- src/main/resources/templates/thymeleaf
- cf) 정적 html 파일을 넣을 순 있는데 권장 안함
- src
- main
- resources
- static
- css
- js
- img
- html
- templates
- HTML 파일 <- (가능은 하지만 권장 안함)
- 뷰 템플릿