What is Server? and Servelet?
자 이제 좀더 백엔드 개발자 다운것들을 배우기 시작했습니다!!
지금 수업내용량이 어마무시하기 때문에 차근차근 정리하면서 복습을 하자는 의미로 이렇게 게시글을 작성해볼려고 합니다!
이 글을 작성함으로써 제가 얻고자 하는 목표는 총 세가지입니다!
- 정확한 용어와 정확한 정의.
- 내가 남에게 쉽게 설명을 해줄 수 있는 소통 능력 향상
- 이런걸 몰라서 고생을 했었다…. 라는 것들을 정리해서 리마인드!
자 거두절미 하고 이제 바로 제일 기본 개념인 서버는 뭔지 정의를 우선 해봅시다!
Server?
일단 간단하게만 정의 하면, 데이터를 주고 받고 할 수 있는 개념입니다!
자 server 랑 비슷한 단어가 있어요… 그건 바로 serve(서브 : 전달하다)
그쵸?….그러면 자 server는? (전달자 !! 근데 어디서 뭘 전달한다??? 서버컴퓨터에서 다른 컴퓨터에게(즉 사용자) 서비스를 제공하는것)
자 용어를 그냥 해석하니까 쉽게 이해가 가죠??
위에서 말했듯이 서버란. 데이터를 사용자에게 전달해주고 받는 역할을 수행하는 걸 의미합니다!
자 끝.
서버는 단순히 용어에요…뭔가 대단한 시스템을 가르켜서 하는말이 아닙니다.
이 서버를 실제로 구현해서 클라이언트에게 데이터를 주고 받고 하는 방식을 아는게 주 목적입니다!.
그렇다면 데이터를 주고 받는 상대와 본인은 ⇒ 클라이언트 : 서버컴퓨터(에 담겨있는 데이터들)
이 관계이겠죠?….
자 여기까지 이해가 갔다면, 이제는 이렇게 말을 할 수 있어야합니다!
“서버란 클라이언트가 어떠한 요청을 했을때 그에 맞는 데이터를 보내주는 역할을 하는 것입니다.”
자 결론은:
웹브라우저==클라이언트 ↔ 웹사이트의 데이터들 == 서버(컴퓨터)
이렇게 상호작용하는 것이죠?
ex)
- 웹 브라우저(사용자)가 웹 서버(서버 컴퓨터)에게 'www.naver.com' 사이트 데이터를 달라고 요청
- 웹 서버는 해당 사이트의 파일을 찾음
- 웹 서버는 찾은 파일을 웹 브라우저에게 반환
- 웹 브라우저는 파일을 받아 네이버 메인을 화면에 표시
끗.
Servlet??…
단어부터가 뭔가 포스가 있고 무섭습니다 (왠지 어려울거 같아요)
하지만 저희가 실제로 이 서블릿이라는걸 구현할 일은 거의없을겁니다….
보통은 “톰캣”과 같은 서버가 이미 이러한 기능을 구현을 해놓고, 저희는 그걸 쓰는 입장이죠
하지만 “서블릿”이 정확히 뭔지도 모르는 상태에서 그냥 서버를 막 다루다가,
“서블릿” 때문에 에러가 났는데, 서블릿이 뭔지도 몰라요…? ⇒ 에휴 ; 대참사;;
자 일단 정의를 먼저 해봅시다.
⇒ 클라이언트의 요청을 처리하고, 그 결과를 반환하는
Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
뭔가 쓸데 없이 말이 어렵죠? 쉽게 알아보기 위해 좀 말을 바꿔보면!
Servlet ⇒ 자바를 이용해서 웹을 만들기 위해 필요한 기술.
(클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해줘야 하는데, 이러한 역할을 하는 자바 프로그램입니다)
단어가 간단해지고 이해하기가 쉬워졌죠?….
자 이렇게만 정의를 내리고 끝내면 ⇒ “뭐라는건지 알겠는데,,,,그래서 어떻게 쓰는데? 언제 쓰는데 이걸?….”
예를 들어봅시다.
어떤 사용자가 로그인을 할려고 할떄, 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누릅니다. 그때 서버는 클라이언트의(사용자) 아이디와 비밀번호가 일치하는지 확인하고 다음 페이지를
띄워줘야 하는데, 이러한 역할을 수행하는것이 바로 서블릿입니다!!!!!
그래서 서블릿은 자바로 구현 된 CGI라고 칭합니다.
(여기서 CGI ⇒ 공용 게이트웨이 인터페이스: Common Gateway Interface; CGI)는
웹 서버상에서 사용자 프로그램을 동작시키기 위한 조합이다.
그냥 아 이런거구나!! 라고 알고만 넘어가면 좋을 거 같네요…저희가 서버라는걸 만들수 있는 프로그램을 개발할거는 아니니…..하ㅏ핳. 뭐 나중에 만약 그렇게 된다면 딥하게 다뤄야겠죠??
일반적으로 웹서버는 정적인 페이지만을 제공합니다. 그렇기 때문에 동적인 페이지를 제공하기 위해서 웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 합니다.
동적인 페이지로는 임의의 이미지만을 보여주는 페이지와 같이 사용자가 요청한 시점에 페이지를 생성해서 전달해 주는 것을 의미합니다.
여기서 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 어플리케이션이 CGI입니다.
위에서 말씀드린것이 제일 핵심 내용입니다! 서버를 개발할려면 위에 내용은 기본적으로 알고있어야겠지요??
서블릿 컨테이너는 뭐에요?…
저희가 만약에 서블릿을 만들었다고 해서 스스로 작동하는게 아닙니다!
서블릿을 별도로 관리를 해줄 수 있는 것이 필요한데요!
그러한 역할을 하는게 서블릿 컨테이너다!! 라고 생각하면 되겠습니다.
자자 중요한 내용이 나옵니다!
서블릿 컨테이너는 클라이언트의 요청(Request)를 받고 응답(response)을 할 수 있게, 웹서버와 소켓으로 통신하며 대표적인 예로 톰캣!!!!!이 있습니다.
자자 톰캣은… 실제로 웹 서버와 통신하여 JSP와 Servlet이 작동하는 환경을! 제공해줍니다.
그래서 저희는 수업을 들으면서 서블릿에 대한건 배우지는 않았지만?
톰캣을 통해서 동적인 서버를 생성하고 배포하고 하는 과정에서 이미 톰캣이 자동으로 서블릿을 생성하고
컨테이너도 생성을 해줘서 동적인 웹페이지를 만들 수 있게 해주고 있는겁니다!!!!
(몰랐죠? ㅋ)
자 이정도만 이해해도 서버가 어떻게 동작하는지는 알 수 있을거 같습니다.
마지막으로 서블릿 컨테이너가 하는 역할들과 특징을 알아보고 끝내도록 하겠습니다 🙂
[Servlet Container 역할]
1. 웹서버와의 통신 지원
서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해줍니다. 일반적으로 우리는 소켓을 만들고 listen, accept 등을 해야하지만 서블릿 컨테이너는 이러한 기능을 API로 제공하여 복잡한 과정을 생략할 수 있게 해줍니다.
그래서 개발자가 서블릿에 구현해야 할 비지니스 로직에 대해서만 초점을 두게끔 도와줍니다.
2. 서블릿 생명주기(Life Cycle) 관리
서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리합니다. 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메소드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 호출합니다.
또한 서블릿이 생명을 다 한 순간에는 적절하게 Garbage Collection(가비지 컬렉션)을 진행하여 편의를 제공합니다.
3. 멀티쓰레드 지원 및 관리 (자바를 열심히 공부했다면 이해가 갈겁니다 ^^)
서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성하는데, HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 죽게됩니다.
원래는 쓰레드를 관리해야 하지만 서버가 다중 쓰레드를 생성 및 운영해주니 쓰레드의 안정성에 대해서 걱정하지 않아도 됩니다.
4. 선언적인 보안 관리
서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 됩니다.
일반적으로 보안관리는 XML 배포 서술자에 다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능합니다.
빡셉니다. 저도 설명하고 적기 위해서 많은 블로그들을 참조 했고, 이해는 하지만 직접 쓰기에는
살짝 버거운 감이 있네요….
하지만 이것도 다 사람이 만들어놓은 지식인데,
저는 못할게 뭡니까? 쌉가능 ^^ 이해를 못하면 될 때 까지 곱씹어야죠 뭐ㅎㅎ….^^
'JSP' 카테고리의 다른 글
Servlet으로 웹페이지 구현해보기 (로그인) (0) | 2023.01.16 |
---|---|
JSP ⇒ JSTL/EL 문법과 사용법…허허 (0) | 2023.01.16 |
JSP 내장 객체의 종류, 영역 ? (0) | 2023.01.16 |
WHAT IS JSP?? Java Server Page (0) | 2023.01.16 |