[목차여기]
Java 프로젝트의 폴더 구조
Java 프로젝트의 폴더 구조를 살펴보면, webapp과 WEB-INF를 발견할 수 있다.
├── src
├── webapp
│ └── WEB-INF
│ ├── lib
│ └── classes
│ └── web.xml
├── bin
webapp
webapp 폴더 아래에 존재하는 파일의 경우는 주소를 입력하여 바로 접근할 수 있다.
Web Application을 만들면 기본으로 생성된다.
webapp 아래의 index.jsp 파일은 프로젝트 실행 시 가장 먼저 접근된다.
WEB-INF
WEB-INF 폴더 아래에 존재하는 JavaScript 파일은 보안상 바로 접근이 불가능하다.
웹 브라우저에서 직접 접근할 수 없기 때문에 컨테이너가 대신 접근하여 결과를 반환해준다.
이 둘의 차이점을 정확히 이해하기 위해서 WAS와 Web Server에 대한 공부가 선행되어야 한다.
Web Server
클라이언트가 웹 브라우저에 페이지 요청을 하면, 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서비스이다.
* 정적 컨텐츠 : HTML, CSS, javascript, 이미지, 파일 등
* 웹 서버 예시 : Apache
그런데 정적 컨텐츠 만을 제공하면 어떤 일이 발생할까?
데이터베이스 조회나 서비스 로직과 같은 세부적인 로직 처리가 불가능해진다. 즉, 동적 처리가 불가능하다.
그래서 우리는 WAS를 도입한다.
WAS(Web Application Server)
웹 서버(Web Server)와 웹 컨테이너(Web Container)가 합쳐진 형태로서, 데이터베이스 조회나 서비스 로직과 같은 세부적인 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application Server다.
HTTP를 통해 JSP, Servlet 구동환경을 제공해주기 때문에 웹 컨테이너 또는 서블릿 컨테이너라고도 불린다.
* 웹 컨테이너 : 웹 서버가 보낸 JSP, PHP 등의 파일을 수행한 결과를 다시 웹 서버로 보내주는 역할을 함
* WAS 예시 : Tomcat
더 자세한 Web의 구조 새로운 게시글에 작성할 것이다. -> (작성중)
번외
번외로, SpringBoot 프로젝트 구조를 설명하겠다.
나는 일반 Java 프로젝트와 SpringBoot 프로젝트의 구조가 헷갈려서 혼란스러웠기 때문이다.
SpringBoot의 프로젝트는 src/resources 안에 static, templates 폴더를 생성할 수 있다.
src
├── main
│ └── resources
│ ├── static
│ └── templates
static 안에는 정적 컨텐츠를 넣고, templates 안에는 VIEW 컨텐츠를 넣는다.
* 정적 컨텐츠 : HTML, CSS, javascript, 이미지, 파일 등
* VIEW 컨텐츠 : Thymeleaf, Groovy
static/index.html 은 view 역할을 한다. 프로그램을 실행했을 때(= 주소에 접속했을 때) 보이는 화면을 말한다.