추천 글 🍀
[SpringBoot] REST API 카카오 로그인 개발하는 법
SpringBoot를 이용하여 카카오 로그인을 구현해 보겠습니다. 카카오 로그인에 대해서 설명되어 있는 공식 문서입니다. 공식 문서에 설명 ...
[구조 패턴] 어댑터 | 퍼싸드 | 컴포지트 | 브리지 패턴 (with 예시 코드)
GoF가 정의하고 있는 23가지 패턴은 3가지 종류(생성, 구조, 행위)로 분류한다. 정보처리기사 필기 시험에서 해당 종류에 속하는 패턴을 ...
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 역할을 한다. 프로그램을 실행했을 때(= 주소에 접속했을 때) 보이는 화면을 말한다.