[데브코스] Servlet 기초
Updated: Categories: TILW5D1 - 웹 기본지식과 Servlet 기초 사용법에 대해 알아보자
- 알고있던 지식도 다시 한번 정리!
URI
[URI스키마]://[호스트명]:[포트번호]/[path]?[쿼리]
쿼리 파라미터
:?key=value
형식으로 값 전달하기- 웬만하면 상대경로 쓰기
- URI엔 ASCII 문자만 사용하기
HTTP
- URI를 통해 Resource를 가져와 데이터를 사용하기
- 클라이언트 요청 -> 브라우저 -> OS자원을 사용 -> 네트워크를 타고 -> 호스트 서버로 전달
- 정확한 정보는 MDN 공홈을 참고하자 !
특징
- TCP/IP 기반
- 요청/응답 + 동기형 프로토콜이다
Stateless
- 상태를 가지지 않음
구조
Method
Web Architecture
- 출처는 이곳!
4
: OLTP5
: Redis 같은 메모리 기반 DB를 캐싱용으로 사용6
: 시간이 오래 걸리는 작업(압축)을 미리 저장하고 수행해주는 서버7
: 검색 전용 서버8
: 기존 서버의 서비스 로직을MSA
구조로 나눌수도 있음9a
: (firehose임) kafka 같은 데이터 전달하는 메시징 시스템9c
: OLAP10
: 이미지 저장소11
: 지리적 한계를 극복하기 위한 분산 서버
Web Server & Web Application Server
Web Server
- 정적 리소스를 제공하는 서버
- Apache나 nginx 등이 이에 해당됨
- 프론트엔드만을 서빙하는 서버라고 생각하면 될듯
Web Application Server(WAS)
- 동적 컨텐츠를 제공하는 서버
- WAS 내부에 정적 페이지 제공하는 Web Server도 포함하고, DB연동하는 Web Container도 포함
- Web Container는 war로 빌드되어 물리적 서버인 Tomcat 등을 통해 실행됨
Servlet
- 브라우저에서의 요청(http)을 받고 응답해주는 계층에서 사용
- Web Container 안에서 동작하는 것
- 요즘엔 Jakarta Servlet 이라고 부름
MVC
- MVC 패턴이 드디어 등장 (
설명은 생략)
Life Cycle
init
: 컨테이너가 처음 실행될 때 servlet 객체는 단 한번만 만들어짐service
: 클라이언트에게 요청이 오면 새 스레드를 만들고 서비스 로직을 실행destory
: 응답 완료시 해당 스레드를 종료시킴
Spring Servlet
- 옛날 방식 그대로~ 노가다로 서버를 구동해보자!
의존성 설정
- 우선
pom.xml
에 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Servlet 작성
HttpServlet
을 상속받아 여러 메소드를 사용할 수 있다
public class 클래스명 extends HttpServlet {
@Override
public void init() throws ServletException {
...
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
...
}
}
xml 설정
- Servlet을 매핑시키기 위한 xml 파일을 아래처럼 만들어주자
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- test라는 이름의 서블릿 생성 -> TestServlet 클래스-->
<servlet>
<servlet-name>서블릿명</servlet-name>
<servlet-class>매핑시킬 클래스 경로</servlet-class>
</servlet>
<!-- 모든 url에 test 서블릿을 매핑한다 -> 라우터라고 생각하면 될듯-->
<servlet-mapping>
<servlet-name>서블릿명</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Tomcat 설정
- 톰캣 홈페이지에서 다운로드 (난 9버전)
- Intellij에서 압축 해제한 폴더 경로를 설정 (아래 참고)
- 그리고 Deployment -> FIX 눌러주고
- 아래 그림처럼 선택~
- Facet 가서 xml 참조설정까지 해주면~
- 설정 끝. 서버 구동해보면 잘 돌아감
@WebServlet
web.xml
에 라우팅 설정을 하지 않고 어노테이션을 사용해 간편하게 사용가능loadOnStartup
: default는 -1 / 1인 경우 클라이언트 호출이 없어도 일단 Servlet init.
@WebServlet(value="/url", loadOnStartup = ??)
결론
- 요즘엔 이런 방식으로 배포하지 않고
Embedded Tomcat
을 사용한다 - 요즘 같은 MSA 환경에선 Embedded Tomcat + Servlet 으로만 함
- Tomcat에 war 말아서 올리는건 구식… (그래도 근-본이 중요하니 알아두자)