클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

서블릿과 JSP 개요 1 - 웹 프로그래밍과 JSP의 구조 본문

웹 · 앱 개발/JSP & Servlet

서블릿과 JSP 개요 1 - 웹 프로그래밍과 JSP의 구조

huenuri 2024. 8. 21. 11:53

어제까지 2주 동안 자바를 공부했고 오늘부터 일주일 정도는 JSP/Servlet을 공부해보려고 한다. 새벽에 30분 정도 더 공부할 시간이 있어서 JSP 공부를 시작해보려고 했었다. 하지만 갑자기 티스토리에 접근할 수 없어서 30분 동안 이걸 해결하느라 시간을 낭비하고 말았다.

사실 오늘 새벽에 3시에 일어났는데 30분을 어제 일정과 루틴을 정리하는데 시간을 보냈고 3시 반부터 8시까지 4시간 반이나 입사 지원서를 썼다. 2시간이면 끝날줄 알았는데 지난번에 입사지원을 아주 대충 써서 제대로 쓰는데 시간이 좀 걸렸다. 그래도 다 쓰고 나니 정말 뿌듯했다.

 

서류 전형을 합격한 후에 면접을 볼 수 있는 기회가 제공되는지 알았는데 선착순이라고 한다. 솔직히 진짜 가고 싶은 회사는 없었다. 게임 회사였다면 정말 좋아했을텐데 모두 웹이나 앱 관련 회사였다.

이 책의 첫 장은 톰캣을 설치하는 내용이라 그건 집에서 해야 제대로 공부할 수 있을 것 같다. 노트북에는 이미 설치된 톰캣을 삭제하고 하기도 그렇기 때문이다. 어쨌든 오늘도 아침 자투리 시간을 활용해 최대한 공부를 진행해볼 것이다. 오늘부터 새로운 과목을 공부하게 되어 정말 기쁘다.


 

 

 

웹 프로그래밍이란?

인터넷은 컴퓨터들이 연결된 거대한 네트워크 구조이다. 예를 들어 인터넷 쇼핑을 하기 위해 브라우저에 사이트 주소를 입력하면 이는 해당 사이트에 있는 웹 페이지를 내가 사용하는 브라우저에 보내달라고 요청하는 것을 의미한다. 이렇게 요청을 받아 웹 페이지를 찾아서 보내주는 일을 하는 컴퓨터나 프로그램을 웹 서버라고 하고, 요청된 페이지를 받아 보는 브라우저나 컴퓨터를 클라이언트라고 한다.

 

브라우저를 통해서 각종 정보를 제공해 주는 웹페이지는 HTML을 이용하여 웹 프로그래밍을 한 것이다 .하지만 HTML만으로는 시시각각 변경되는 새로운 정보를 제공해주지 못한다. 왜냐하면 HTML은 같은 내용만 표시해주는 정적인 페이지이기 때문이다.

우리가 사용하는 인터넷은 바로바로 새로운 나용을 제공해주어야 하기 때문에 HTML만 가지고 웹 프로그래밍을 하는데 문제가 있다. 그래서 등장하게 된 것이 동적인 페이지이다.

동적인 페이지에서 새로운 정보를 제공해주기 위해서는 방대한 정보를 관리할 데이터베이스가 필요하다. 예를 들어 게시판에 게재되는 글은 데이터베이스에 저장되었다가 보여주는 것이다. 이렇듯 다양한 정보를 데이터베이스에서 얻거나 저장하기 위해 등장한 언어가 PHP, ASP, 서블릿/JSP이다.

 

왜 JSP를 배울까?

앞으로 배우게 될 Spring이 JSP/Servlet으로 되어 있고 이 스프링에서 사용하는 언어가 자바이다. HTML/CSS로도 웹페이지를 만들 수 있지만 사용자의 요청에 따라 반응을 할 수 있는 동적인 페이지를 만들기 위해서는 JSP가 필요하다.

 

 

 

 

 

 

 

 

 

 

 

 

 

요청한 페이지를 받을 때 html 문서를 사용한다. 인터넷을 통해 변화무쌍한 정보를 얻거나 쇼핑응 할 수 있는이유는 웹 애플리케이션 언어로 개발한 네이버나 다음 같은 포털 사이트 등과 같은 온라인 쇼핑몰이 웹 서버에 구촉되어 있기 때문이다.

 

 

 

 

개발자가 일일이 HTML 문서를 작성하지 않아도 되니 편리하다.

 

 

 

 

 

 

변화에 민감하지 않는 백과사전 사이트 같은 경우는 정적인 페이지로 만들 수 있지만, 네이버 페이지와 같은 대부분의 웹페이지는 동적인 페이지로 구성된다.


 

 

웹 애플리케이션이란?

웹 애플리케이션은 웹(인터넷)을 기반으로 실행되는 애플리케이션(프로그램)을 말한다. 즉, 웹 브라우저로 접근하여 사용되는 애플리케이션을 말한다. 즉, 웹 프로그래밍이란 '웹 애플리케이션을 제작'하는 과정이다.

 

 

서버는 일반적으로 사용자(클라이언트)의 요청이 들어오면 이에 대한 처리를 한 결과를 페이지에 전송하는 웹 서버(Web Server)와 실질적으로 요청한 페이지의 로직이나 데이터베이스의 연동을 처리할 수 있는 비즈니스 로직이 구현되어야 하는 웹 애플리케이션 서버(Web Application Server : WAS)로 이루어져 있다.

대표적인 WAS로는 BEA 사의 웹로직, 톰켓 등이 있다. 톰캣은 웹 서버 기능이 내장되어 있어 별도로 웹 서버를 설치하지 않고 WAS 역할까지 한다. WAS라는 서버 프로그램이 웹 애플리케이션을 어떻게 동작시키는지 그 원리를 이해하기 위해 '회원 가입을 위한 프로그램(애플리케이션)'이 어떤 절차를 거쳐서 실행되는지 살펴보겠다.

 

 

 

요청이 들어오면 서버는 동적인 페이지인 프로그램을 작동시킨다. 서버는 웹에서 작동하고 프로그램은 자바 언어로 되어 있기에 이 둘을 연결하는 CGI를 작동시킨다. DB에 값을 넣거나 가져올 수 있고, 최종적으로 동적인 페이지를 만들어서 HTML에 돌려준다.

 

 
  1. Client
    • 클라이언트는 사용자가 웹 페이지에 접속할 때 사용하는 컴퓨터 또는 디바이스를 나타낸다. 클라이언트는 서버에 요청(요청: "요청"이라는 한글 텍스트)하고, 서버로부터 응답(응답: "응답"이라는 한글 텍스트)을 받는다. 이 과정에서 클라이언트는 HTML 데이터를 주고받는다.
  2. Server
    • 서버는 클라이언트의 요청을 처리하는 장치이다. 클라이언트로부터 요청을 받으면, 서버는 이를 처리하기 위해 CGI 프로그램을 호출하거나, 필요 시 데이터베이스(DB)와 통신하여 필요한 데이터를 가져온다.
  3. CGI (Common Gateway Interface)
    • CGI는 웹 서버와 외부 프로그램 사이의 인터페이스 역할을 하는 프로토콜이다. 클라이언트로부터 요청이 들어오면 서버는 CGI 프로그램을 실행하고, 이 프로그램은 데이터를 처리하여 HTML 형태로 서버에 응답을 반환한다.
  4. Program
    • 이 부분은 CGI 프로그램 또는 다른 서버 프로그램을 나타내며, 서버로부터 전달받은 데이터를 처리하여 클라이언트가 요구한 결과를 생성한다. 이 과정에서 데이터베이스(DB)와 상호작용하여 데이터를 가져오거나, 데이터를 저장할 수 있다.
  5. DB (Database)
    • 데이터베이스는 데이터를 저장하고 있는 저장소이다. 프로그램은 DB와 상호작용하여 필요한 데이터를 조회하거나 저장한다.
  6. HTML:
    • 서버나 CGI 프로그램이 생성하는 최종 결과물로, 클라이언트에 의해 웹 브라우저에서 렌더링되는 HTML 문서이다.

 

웹 서버는 요청이 있을 경우 이를 받아들여 요청한 페이지를 응답할 책임을 지고 있다. 웹 서버가 요청을 받아 응답할 때까지의 웹 애플리케이션의 동작 순서는 다음과 같다.

  1. 사용자가 브라우저 주소 입력란에 특정 사이트의 조소를 입력하게 되면 브라우저가 해당 웹 서버에 웹 페이지를 요청하는 것이 된다. 단 요청한 페이지가 단순한 정적인 페이지라면 윕 서버에서 바로 클라이언트에게 해당 페이지를 전송한다.
  2. 해당 웹 서버는 입력된 회원 정보를 윕 애플리케이션 서버(WAS)로 전송한다.
  3. 요청한 페이지는 웹 서버에서 바로 제공되지 못하고 웹 애플리케이션 서버에서 다양한 로직이나 데이터베이스와의 연동을 통해서 완성되어야만 제공된다.
  4. 로직이나 데이터베이스 작업 처리 결과를 웹 서버에게 보낸다.
  5. 웹 서버는 이 결과를 다시 클라이언트 측 브라우저에 응답하게 된다.
  6. 회원 가입이 성공적으로 이루어졌다면 가입 당시에 입력된 정보를 확인하기 위해서 출력해준다.

 

 

 

 

 

 

이 3가지 요소를 3 Tier라고 한다. 3-Tier 아키텍처는 소프트웨어 애플리케이션의 구조를 세 가지 독립적인 계층으로 나누는 아키텍처 패턴이다. 각 계층은 서로 독립적으로 동작하며, 서로 간의 의존성을 최소화하여 시스템의 확장성, 유지보수성, 보안성을 높이는 데 기여합니다. 3-Tier 아키텍처는 주로 다음과 같은 세 가지 계층으로 구성된다.

 

  1. Presentation Tier (프레젠테이션 계층)
    • 역할: 사용자 인터페이스(UI)를 담당하는 계층으로, 사용자가 애플리케이션과 상호작용하는 부분입니다.
    • 구성 요소: 웹 브라우저, 모바일 앱, 데스크탑 애플리케이션 등
    • 기능: 사용자가 데이터를 입력하고, 서버로부터 데이터를 받아 사용자에게 보여주는 역할을 합니다. HTML, CSS, JavaScript 등이 사용될 수 있습니다.
  2. Application Tier (애플리케이션 계층)
    • 역할: 비즈니스 로직을 처리하는 중간 계층으로, 사용자 요청을 처리하고, 데이터베이스와 상호작용하여 데이터를 가져오거나 저장하는 역할을 합니다.
    • 구성 요소: 웹 애플리케이션 서버(WAS), CGI 스크립트, 서버 측 스크립트 언어(예: Java, Python, PHP 등)
    • 기능: 비즈니스 로직을 수행하고, 데이터베이스에서 데이터를 가져와서 프레젠테이션 계층에 전달하거나, 사용자가 입력한 데이터를 데이터베이스에 저장합니다.
  3. Data Tier (데이터 계층)
    • 역할: 데이터를 저장하고 관리하는 계층으로, 애플리케이션에서 사용하는 모든 데이터를 저장하는 데이터베이스 시스템을 포함합니다.
    • 구성 요소: 데이터베이스 관리 시스템(DBMS) (예: MySQL, Oracle, SQL Server 등)
    • 기능: 데이터의 저장, 검색, 업데이트, 삭제 작업을 수행합니다. 데이터베이스는 애플리케이션 계층에서 요청한 데이터를 제공하거나, 애플리케이션에서 보낸 데이터를 저장합니다.

 

 

 

 

 

 

하지만 많은 사람들이 접근할 때 허용량을 초과하는 문제가 발생한다. 이 그림은 CGI(Common Gateway Interface)와 서버 프로그램의 동작 방식, 특히 다중 스레드 환경에서의 요청 처리 과정을 설명하고 있다. 그림에서 두 개의 다른 요청이 서버에 들어오고, 각각의 요청이 어떻게 처리되는지를 시각적으로 보여준다. 이것은 단일 스레드라고 할 수 있다.

 

  1. 서버로의 요청 (A와 B):
    • A B는 각각 클라이언트로부터 들어온 두 개의 요청을 나타낸다. 예를 들어, A는 로그인 요청일 수 있고, B는 회원 가입 요청일 수 있다.
    • 서버는 이 요청들을 CGI 프로그램으로 전달합니다. CGI는 서버와 프로그램 간의 인터페이스 역할을 하며, 들어온 요청을 처리할 적절한 프로그램으로 넘겨준다.
  2. CGI 프로그램:
    • CGI 프로그램은 서버로부터 받은 요청을 처리하는 프로세스를 시작한다. 그림에서는 A와 B 요청이 각각 다른 프로그램에 의해 처리되도록 CGI가 동작하는 것을 보여준다.
  3. 로그인 프로세스와 회원가입 프로세스:
    • 각 요청(A와 B)은 각각 "login Process"와 "join Process"라는 프로세스에 의해 처리된다.
    • 이 프로세스들은 각자 자신만의 스레드를 생성하여 요청을 처리한다. 스레드(Thread)는 프로세스 내에서 독립적으로 실행되는 작업 단위로, 다중 스레드를 사용하면 서버가 동시에 여러 요청을 처리할 수 있게 된다.
  4. 스레드(Thread):
    • 각각의 로그인 및 회원가입 프로세스는 독립적인 스레드를 생성하여 작업을 처리한다. 이로 인해 A와 B 요청이 서로 간섭 없이 동시에 처리될 수 있다.
    • 예를 들어, A 요청이 로그인 프로세스로 들어가서 스레드에서 처리되고, B 요청이 회원가입 프로세스로 들어가서 또 다른 스레드에서 처리된다.

 

 

 

 

이것이 JSP/Servlet과 자바의 특징이다. 한번에 많은 사람들이 접속해도 과부하가 걸리지 않도록 하는 것이 멀티 스레드이다.


 

 

 

 

Servelet이란?

 

 

 

 

자바 언어를 컴퓨터가 이해할 수 있는 언어(바이트, 비트)로 바꾸는데 이 작업을 컴파일이라고 한다. 이렇게 할 때 확장자가 .class로 바뀐다. 이 언어는 사람이 볼 수 없다. 이 파일을 JVM(자바 가상 머신)이 실행도록 도와준다. 자바 파일을 실행하면 HTML이 된다.

 

 

 

 

이 객체 지향 프로그램은 클래스, 모듈별로 관리되기에 큰 프로그램을 만들기에 적합하다.

 

 

 

 

 

 

 

 

자바와 서블릿은 실행 메소드가 이렇게 다르다. 웹 서버를 이해하려면 먼저 객체 지향 프로그래밍을 완벽히 이해해야 한다.

 


 

 

 

 

학습을 마치고

오늘 4교시 때 자율학습 시간이 주어져서 이 부분을 공부하며 JSP 수업을 다시 들으며 서블릿의 개념을 정리해보았다. 하지만 인터넷이 오늘 잘 안 되는 관계로 기록을 했던 모든 자료가 다 날라가고 말았다. 정말 속이 상했지만 점심시간을 아껴서 집에서 이 내용을 다시 정리했다.

한번 더 정리하니 머릿속에 확실히 기억되고 이해가 되는 장점이 있었다. 사실 처음 수업을 들었을 때는 무슨 말인지 하나도 몰랐고 그때는 자바도 거의 모르는 상태에서 수업을 듣다보니 이해력이 많이 부족했다.

 

오늘 수업을 다시 들었는데 신기하게도 대부분 이해가 되었다. 사실 아침에는 JSP 공부를 하는 게 지루하게 느껴지기도 했으나 학습일지를 쓰며 다시 즐거워졌다.

이제 오후 수업을 들으러 가야겠다~