본문 바로가기
강의/웹 프로그래밍(풀스택)

부스트코스 웹 프로그래밍(풀스택) - 1. 웹 프로그래밍 기초 - 4-6-2 강의 정리

by 리드민 2022. 4. 10.
반응형

[1] 강의

웹 프로그래밍(풀스택)

4. 개발환경 설정 -BE

6) HelloWorld 서블릿 컴파일 및 실행하기-1

https://www.boostcourse.org/web316/lecture/254268?isDesc=false 

 

웹 프로그래밍(풀스택)

부스트코스 무료 강의

www.boostcourse.org

 

[2] 개념 정리

 

 

[3] 강의 정리

  이번 강의에서는 지난 강의에서 생성한 웹 애플리케이션 프로젝트에다가 서블릿을 등록해보도록 하겠다. 서블릿은 URL 요청을 처리하는 프로그램이라고 생각하면 된다. 우리 이번 시간 목표는 이런 URL을 브라우저에 요청을 하면 실제 HelloServlet 하고 응답을 해주는 서블릿 파일을 하나 만들어보는게 목표다. 웹 애플리케이션 지금 이 프로젝트 firtweb에다가 서블릿을 하나 먼저 생성을 해본다. New 메뉴를 선택하고 Servlet를 선택해라. 그러면 Create Servlet이라는 창이 하나 열릴 것이다. 여러분이 입력해야 될 부분은 Java package를 하나 입력해야 한다. 우리는 이번 시간에 example라고 package를 입력해 줄 것이다. Class 이름은 HellowServlet 이라고 입력을 할 것이다. Next 하고 보면 또 여러 가지 메뉴를 가진 창이 보이게 될 것이다. 여기에서 가장 중요한 부분은 HelloServlet 즉, URL mapping이라고 되어있는 부분이다. 이 HelloServlet 클래스가 WAS에 배포될 때 사용할 이름을 지정하는 것이다. 클래스 이름과 같은 Hellow Servlet이라고 입력이 되어있는 것을 알 수 있다. 기본으로 이클립스가 이렇게 해준 거라고 생각을 하면 될 거 같다.

  이클립스가 runtime으로 설정된 WAS에 다음과 같은 규칙의 URL로 서블릿을 실행하도록 설정을 한다. 어떤 규칙이나면 이런 규칙이다. 프로토콜 그리고 이 부분이 IP, 서버 도메인 이런 부분이 될 수 있을 것이다. 톰캣 설치할 때 포트에 대해서 설명했던 것 기억나는가? 톰캣이 8080 포트를 사용하고 있었기 때문에 여기까지 주소를 입력했다. 그 다음에 나오는 것이 프로젝트, 그다음 URL Mapping 값이다. 아까 URL Mapping 값이 HelloServlet이었던 거 기억나시나? 현제 우리는 프로젝트 이름이 firstweb이고, URL Mapping 값이 HelloServlet이다. 그래서 서블릿을 실행할 때 이 URL 주소로 실행하면 우리가 원하는 부분들이 실행이 될 거 같다. 그렇다면 다음, Next를 선택하고, 또 현재 우리는 이것저것 많이 나오니 궁금한 부분들이 분명히 있지만 지금은 내용을 배우는 것이 아니라 그냥 간단하게 따라 해서, Hello까지 한 번 찍어보는 게 목표기 때문에 그냥 따라 해주면 된다. 메서드가 여러 개가 있는데 그 중에 doGet이라는 메서드만 체크 버튼을 남기고 나머지는 없애줄 거다. doGet을 선택했다. 그리고 Finish 버튼을 눌러준다.

  우리 HTTP라는 프로토콜 학습할 때 HTTP request에 첫 번째 줄이 메서드라는 것이 있다고 배웠다. 메서드에는 GET, POST, PUT, DELETE 등이 있다고 했었다. 웹 브라우저가 GET 메서드 방식으로 요청을 보낼 때 서블릿에 doGet() 메서드가 호출이 된다. GET 메서드는 웹 브라우저가 서버에게 문서를 요할 때 사용하는 방식이다. 다시 한번 기억해주면 좋겠다. 아직 난 잘 모르겠다 그러면 지금은 또 따라 하니까 다음에 뒤에서 또다시 설명할 것이다. 이렇게 생성을 해보니까 자동으로 이런 소스가 만들어져있는 것을 볼 수 있다. 소스 코드가 뭔지 모르게 굉장히 복잡하다. 주석문까지 많이 들어가 있어서 더 그렇게 보일 수 있다. 안에 들어있는 자세한 내용들은 우리가 서블릿 작성 방법 이런 부분들을 배울 때 조금 더 상세하게 배워보도록 할 거다. 우리는 여기에 최종 목표가 뭐였나면 브라우저가 요청됐을 때 안녕 서블릿하고 출력을 해보는 것이 가장 큰 목표였기 때문에. 소스 코드를 조금만 바꿔 보겠다. 실제 뭔가 응답이 들어왔을 때, 일을 처리해주는 메서드는 doGet()이라는 메서드이다. 여기에다가 작성한 내용만 여러분들의 응답 결과로 보일 수 있을 거다.

  일단 한번 따라서 해보자. response라는 이 객체에 setContentType() 이라는 메서드를 실행을 해보자. setContentType()이라는 메서드가 보이는가? response 라는 객체는 응답할 내용들을 몽땅 모아서 추상화해놓은 객체라고 생각을 하면 된다. 이 응답 결과를 보내줄 이 객체에다가 ContentType 이라는 것을 정해준다. 그래서 우리는 이 응답 결과가 뭐라는 것을 브라우저에게 알려줘야지 브라우저가 이 ContentType을 보고 지금 들어온 게 뭐구나라고 해석을 해줄 수가 있다. 그래서 나는 응답 결과로 text를 보낼 텐데 이 text는 html이야. 라는 의미를 담고 있다. 그리고 하나 더 추가해주면 좋은 게 charset이라는 부분이다. charset에 대해서는 또 배울 시간이 있을 거다. charset이 조금씩 다르면 한글이 제대로 보이지 않는 경우들이 생긴다. 그래서 응답 결과를 보내는데 나의 charset은 UTF-8이고 알려주는 거라고 생각하면 될 거 같다. 응답 결과는 이런 내용으로 갈 거야라고 알려줬다면 그러면 실제 이런 텍스트를 써 줄 필요가 있다. 이 쓸 수 있는 통로를 여러분들이 얻어와야 한다. 자바 기본 때 io를 배웠던 사람은 알 텐데 io의 객체 중에 PrintWriter라는 객체가 존재했다. 어디다가 무엇을 써야 될 때 가장 많은 메서드들을 가지고 있기 때문에 굉장히 좀 편하게 쓸 수 있는 객체 중에 하나다. 그래서 이 response가 가지고 있는 getWriter()라는 메서드를 호출하면 PrintWriter 객체를 return 해준다. 그러면 이 통로에다가 이제 응답 결과를 여러분들이 보내준 내용들을 써주면 된다.

  우리는 뭘 하고 싶다고 했나면 Hello servlet 이렇게 하나 출력을 해보고 싶다고 했다. Hello servlet만 보내줘도 되는데 앞뒤로 HTML 태그 h1을 넣어준 것은 조금 더 크게 보이라고 넣어준 거다. 이렇게 작성을 해주면 실행해주자. 이 작성한 서블릿을 실행할 때 이 src 폴더 안에 보면 서블릿이 하나 만들어져 있다. 여기서 Run As라는 메뉴에 가서 Run on Server라는 메뉴를 선택해보자. 그럼 우리가 처음에 선택했던 거 Tomcat v8.5을 선택하고 있는 것을 볼 수 있다. 그 다음에 앞에서 설정했으니까 아주 낯설지는 않을 거다. 항상 이 runtime 설정을 이용할 거기 때문에 여기 체크박스에도 꼭 하나 선택을 해주면 좋을 거 같다. 선택하고 Finish 하고 하단을 보자. 이 콘솔 창에 Apache Tomcat이 실행된 부분이다. 톰캣이 실행되는 콘솔이 막 나오는 걸 볼 수 있다. 이클립스가 내부적으로 톰캣을 이용하고 있다. 이렇게 톰캣을 실행하고 있다고 기억을 하면 된다.

  그러면 이클립스 자체에 지금 내장으로 가지고 있는 브라우저에 Hello sevlet 하고 잘 나오는 거를 볼 수 있다. 혹시 안 나오는 사람은 내 코드에 오타가 있는지 조금 살펴보면 좋을 거 같다. 이 부분이 URL 주소를 그대로 가져다가 여러분들이 원하는 브라우저에 입력하고 이렇게 수행해도 Hello servlet 하고 잘 보이는 것을 볼 수 있다. 나는 매번 실행할 때마다 이클립스가 가진 내장 브라우저가 아니라 밖에 있는 다른 브라우저를 이용해서 보고 싶다고 생각이 되면 그 해당 설정들도 바꿔줄 수 있다. 메뉴 중에 보면 Window라는 메뉴가 보인다. 그 안에 Web Browser라는 것을 보면 현재는 Internal Web Browser 해서 내장 웹 브라우저가 선택 되어 있는 것을 볼 수 있다. 다른 웹 브라우저, 나는 Chrome에서 보게 하고 싶다 하고 이렇게 선택해주신 상태에서 다시 외부에 있는 웹 브라우저에서 보이는 것도 확인할 수 있다. 이클립스를 이용해서 간단한 웹 애플리케이션을 한번 작성해봤다.

 

[4] 코드 정리

package examples;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<h1>Hello World</h1>");
	}

}
반응형