웹 개발 개념 정리
2022. 1. 8. 23:21ㆍEtc
- Web 구성 : Web Client & Server
- Frontend : Web Client(Web Browser) 페이지 개발
- Backend : Web Server 서비스 개발(Web Server / WAS)
- FrameWork : 개발을 편하게 하고자 제공하는 틀(언어마다 다름)
- Frontend FrameWork
- js - Angular / React / Vue
- Backend FrameWork
- js - express
- php - laravel
- java - spring
- python - django, flask
- Frontend FrameWork
- WebServer vs WAS(Web Application Server)
- WAS = Web Server + Web Container(jsp, servlet을 수행할 수 있는 소프트웨어)
- Web Server : 정적 컨텐츠(html, css, jpeg)를 제공하는 서버, 클라이언트와 통신하는 주체
ex> Apache, Nginx, IIS - WAS : 동적 컨텐츠를 제공하기 위한 서버, Web Server의 요청에 의해 작동
ex> Tomcat, Jeus, JBoss
- WAS 구성
- Servlet : web application 만들 때 필요한 인터페이스
- Servlet Container : Servlet과의 규칙을 통해 기존 CGI 규약을 위임해 처리, Cycle 관리도 함 ex> Tomcat
- Spring web MVC : Spring Framework에 있는 모듈로 MVC 패턴을 사용해 web service를 만드는 것을 말함(servlet을 사용)
- WAS 동작 방식
- client의 요청이 들어올 때마다 web Server에서 프로세스를 생성하여 각각의 CGI 구현체 사용 => 비효율성*CGI(Common Gateway Interface) : 동적 데이터를 처리하는 인터페이스(C, PHP, Perl등 다양한 언어 사용)
- 동작방식 변경
- 프로세스를 스레드로 처리
- 각각의 CGI 구현체 대신 Singleton 패턴을 적용한 Servlet 구현체를 사용 : Singleton이기 때문에 메모리를 공유하고 이에 따라 상호배제 필요, Local Variable은 스레드마다 독립적으로 생성
- 프로세스를 스레드로 처리
- client의 요청이 들어올 때마다 web Server에서 프로세스를 생성하여 각각의 CGI 구현체 사용 => 비효율성*CGI(Common Gateway Interface) : 동적 데이터를 처리하는 인터페이스(C, PHP, Perl등 다양한 언어 사용)
- Servlet Cycle(각 메서드는 Servlet Container(Tomcat)이 호출)
- init : Servlet Instance가 생성되는 곳
- service : 실제 기능이 수행되는 곳
- abstract class HttpServlet extends Servlet // Http 메서드(GET, POST, PUT, DELETE)에 따라 doGet(), doPost(), doPut(), doDelete() 호출(각 내용은 개발자가 구현)
- destroy : Servlet Instance가 제거되는 곳(보통 container가 종료되는 시점에 호출, 특정 servlet 로드/언로드 시에도 사용)
- 기존 Servlet 사용 방법
- url 마다 서블릿이 생성되고, Web Container(Tomcat)에게 알려주기 위해서 web.xml에 url과 서비스을 매핑시켜줌
<web-app> <servlet> <servlet-name>member</servlet-name> <servlet-class>servlets.MemberServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>member</servlet-name> <url-pattern>/member</url-pattern> </servlet-mapping> </web-app>
public class MemberServlet extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServiceException, IOException { String userName = req.getParameter("username"); String passWord = req.getParameter("password"); String result = doSomething(userName, passWord); String htmlResponse = "<html>"; htmlResponse += "<h2>Result : "+ result + "</h2>"; htmlResponse += "</html>"; PrintWriter writer = res.getWriter(); writer.println(htmlResponse); } }
- Spring Web MVC에서 서블릿을 사용하는 방법 : Dispatcher Servlet
- web.xml에 Dispatcher Servlet을 등록 -> 설정 파일이 자동으로 등록됨(/WEB-INF/[servlet명]-servlet.xml
- 모든 요청을 Dispatcher Servlet으로 보냄
- Dispatcher Servlet 동작 과정
- Handler Mapping : 요청에 따라 적절한 컨트롤러를 찾는다(핸들러안에 컨트롤러 존재)
- Spring Framework에서 제공하는 Handler Mapping 방식 : 생성된 서블릿 설정파일에 명시해야 함
- BeanNameHandlerMapping(Default라 별도로 작성 필요 없음)
<beans ...> ... <bean name="/employee" class="com.easycompany.controller.EmployeeController"> ... </bean> ... </bean>
- ControllerClassNameHandlerMapping
- SimpleUrlHandlerMapping
- DefaultAnnotationHandlerMapping
@Controller public class EmployeeController { @RequestMapping("/Employee") public String do() { // do something } }
- Spring Framework에서 제공하는 Handler Mapping 방식 : 생성된 서블릿 설정파일에 명시해야 함
- Handler Adapter : Controller를 찾아 model & view 형태의 응답을 보냄
- View Resolver : 응답으로 넘어온 view는 string 타입이므로 실제 뷰를 찾는 과정 진행
- model(data)을 view에 심음
- Handler Mapping : 요청에 따라 적절한 컨트롤러를 찾는다(핸들러안에 컨트롤러 존재)
https://lob-dev.tistory.com/entry/CGI-Servlet-Servlet-Container
CGI, Servlet, Servlet Container?
1월 13일에 Notion에 정리했던 내용을 옮겨 적은 것입니다. 잘못된 내용은 댓글 부탁드립니다. 한동안 회사 일로 공부한 걸 게시할 시간이 없네요.. ㅠ CGI? (Common Gateway Interface) HTTP 프로토콜 기반의
lob-dev.tistory.com
https://m.blog.naver.com/acornedu/221128616501
JSP와 Servlet(서블릿) 비교
JSP와 Servlet?? 어떤 개념을 가지고 있고 어떤 차이가 있는지 알아보도록 하겠다. 1. Servlet 정확한...
blog.naver.com
'Etc' 카테고리의 다른 글
디자인 시스템 (0) | 2021.10.27 |
---|---|
모놀리틱 아키텍처 vs MSA 아키텍처 (0) | 2021.10.20 |
IT 용어 정리 (0) | 2021.10.20 |