framework/spring

⭐️ 3. Web & WAS 경로

wooweee 2023. 10. 30. 21:57
728x90

1. web server, web app server

    • http 기반으로 작동 = http protocol의 규칙을 따라서 요청과 응답이 오고 간다.
  • http 메시지
    • 거의 모든 형태의 데어터 전송 가능
      ex) HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML (API)
    • 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 

 

2. 용어

2.1. 웹 서버(WEB)

  1. HTTP 기반으로 동작
  2. 정적 리소스 제공, 기타 부가기능
    • webServer가 가지고 있는 html,css.js.img,avi 를 client가 요청시, http로 응답해주는 것
    • ex) NGINX, APACHE

 

2.2. 웹 애플리케이션 서버(WAS)

  1. HTTP 기반으로 동작
  2. 웹 서버 기능 포함 + (정적 리소스 제공 가능)
  3. 프로그램 코드를 실행해서 애플리케이션 로직 수행    - 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가지 방식이 존재하는데 뭘 쓰든 상관 없다. 하지만 권장하는 방식을 따르는 것을 추천
    1. spring의 (src/main/webapp/resources/css,js,img && src/main/webapp/html ) 방식
    2. 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

  • 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 파일 <- (가능은 하지만 권장 안함)
        - 뷰 템플릿