JAVA 웹개발 과정 국비 52일차 정리

52일차

※ 배우는 과정이므로 정확하지 않을 수 있습니다.
잘못된 점은 알려주시면 수정하도록 하겠습니다!


1. Dynamic Web Project

1) Tomcat 설치하기

  1. 네이버에 tomcat 검색
  2. 사이트 들어가서 왼쪽 Download에서 Tomcat 8 클릭
  3. (커리큘럼은 8.5이므로) 8.5.73버전의 32bit/64bit Windows Service installer 클릭
  4. tools 폴더에 넣고 exe 파일 실행
  5. shutdown Port -1 대신 8888로 적어준다. (-1이면 실행할때마다 에러가 뜸)
  6. Login 계정은 혹시 모르니 생성한다. (User Name : admin / Password : admin)
  7. JRE 주소 찾아준다. (내PC > C: > Program Files > Java > openjdk 폴더 선택 )
  8. Setup 완료!

2) Port 번호 재설정

  1. http://localhost:8080에 들어갔을 때 로그인 창이 뜨면 다른 프로그램(ex 오라클)이 쓰고 있다는 것이므로 오라클의 포트번호를 변경해주어야 한다.
  2. SQL Developer 실행
  3. System계정으로 접속 후 exec dbms_xdb.sethttpport (9090); 쿼리문 실행
  4. PL/SQL 프로시저가 성공적으로 완료되었습니다. 가 뜨면 오라클의 포트번호가 9090으로 바뀐 것이다.
  5. 다시 http://localhost:8080에 들어가면 Apache Tomcat 메인 화면이 뜬다.

3) Web Server와 WAS

  • Web Server
    • 이미 만들어진 페이지 (html/css/js) 를 클라이언트의 요청에 따라 전달.
    • 정적인 내용을 가진 내용들만 클라이언트에게 제공 가능.
    • 신문 같은 것이라고 생각하면 됨.
    • Apache 는 웹서버 중 하나임.
  • Web Application Server(WAS)
    • Web Server + Application 중개
    • 클라이언트 요청을 프로그램에 연결하는 중개자 역할
    • Middle ware라고도 불림.
    • 클라이언트의 복잡한 요구를 해결 가능
    • Tomcat 은 WAS 중 하나임.

4) Web Application 만들기

지금까지 기존의 자바 프로젝트는 이클립스 들어가서 오른쪽 상단 Open Perspective를 눌러 Java를 선택해서 진행해왔었지만, 지금부터는 기존 Default 값인 Java EE로 프로젝트를 진행한다.

① Create a Dynamic Web project

새로운 Dynamic Web project를 생성한다.
이때, Target runtime을 설정해주어야 한다. 프로그램을 만들고 실행할 때 서버와 클라이언트 개념이 없는 native 프로그램과는 달리, 웹 어플리케이션(WAS 서버에 들어가는 프로그램) 을 실행하려면 클라이언트의 요청이 필요하고 WAS가 앱에 요청을 전달하는 일련의 과정이 필요하기 때문이다. (앱만 덩그러니 실행할 수가 없음)

Ctrl + F11 누름 > Tomcat 을 키고 WAS 가동 > WAS야 프로그램들 좀 가지고있으렴 > 브라우저 킴 > 브라우저(클라이언트)한테 프로그램 요청하라고 명령 내림 > 프로그램 실행

이 과정에서 eclipse에 Tomcat이 어디있는지 알려줘야 하기 때문에 Target runtime을 설정해주는 것이다.

② Target runtime 설정

  1. New runtime 클릭
  2. 맞는 버전의 Apache Tomcat 클릭 (8.5)
  3. Next 클릭
  4. Brouse 클릭
  5. Tomcat 위치 찾아주기 (내PC > C: > Program Files > Apache Software Foundation > Tomcat 8.5 > Tomcat 폴더 안에서 폴더 선택)

③ webapp 폴더와 src/main/java 폴더

프로젝트를 생성하면 여러가지 파일과 폴더가 보일텐데, 실질적으로 사용하는 폴더는 webapp폴더와 src/main/java 폴더 두개이고, 나머지는 자동으로 쓰여진다.

  • webapp 폴더
    • HTML / CSS / JS
    • 이미지파일, 음악파일 등
    • 프론트 관련된 파일들을 모아두는 곳
  • src/main/java 폴더
    • 자바로 만든 프로그램들을 모아두는 곳

④ 인코딩 설정

이클립스 내에서 사용하는 모든 Text를 모두 utf-8으로 설정해준다.

  1. Window > Preferences > 검색창에 encode > CSS Files, HTML Files, JSP Files Encoding을 EUC-KR에서 UTF-8로 변경.
  2. Content Types > Text > Java Source File 선택 후 아래쪽 Default encoding에 utf8 을 적어준다.
  3. Workspace > 아래쪽 Text file encoding에 Other 클릭 > UTF-8 선택

5) Servlet

① Servlet 이란?

클라이언트의 복잡한 요청을 처리하는 자바로 만들어진 백엔드 웹 어플리케이션
자바의 Class라고 생각하면 된다.

사실 클래스를 만드는 거지만 왜 이름이 서블릿이냐 하면 클라이언트로부터 넘어오는 요청을 처리하기 위해 필요한 기능들을 톰캣 서블릿을 개발한 사람들이 이미 만들어놨다.
그래서 클래스를 만들면서 이 서블릿 클래스를 상속받으면 그것을 서블릿이라고 부르는 것이다. 서블릿을 생성할 때 Class name을 쓰고, 밑에 Superclass 설정이 되어있는 것을 보면 이해가 될 것이다.

② @WebServlet

@WebServlet("/Exam_01")을 어노테이션(Annotation)이라고 한다.
스프링에 가서야 자주 쓰이는 기술인데, 지금 상황에서는 쓸 일이 없어 간단하게 코드를 어떻게 이해하면 되는지만 알고 넘어가자.

클라이언트가 HTML, CSS, JS 파일이 아닌 기능을 요청하면 기능에 맞는 서블릿이 실행을 시켜줘야 한다.
예전에는 WAS에 기능별로 서블릿이 누구인지 쭉 연결해주는 문서(배포서술자-DD)가 xml 파일로 존재했는데, 이게 쓰기가 불편하다보니 서블릿이 업데이트 되면서 xml을 만드는 대신 어노테이션을 사용하여 간소화시킨 것이다.
간단히 말하면, 서블릿 이름의 주소가 오면 그 서블릿에게 보내라라는 설정이 되어있다.

③ protected

접근제한자로써 protected가 잘 쓰이지 않다보니, 일종의 컨벤션처럼 의미를 담게 되었는데 메소드에 protected를 사용하면 “이 메소드는 오버라이드를 해서 쓰는게 좋을껄?” 이라는 뜻을 가진다.
서블릿에서 doGet과 doPost 메소드에서 protected는 기술적인 의미는 없다.

④ servlet 의 역할

  1. 클라이언트의 복잡한 요청을 처리한다.
  2. 처리된 내용을 바탕으로 응답을 작성하여 반환한다.

서블릿은 request를 받아서 처리하고, response를 작성하여 클라이언트에게 돌려보낸다.

클라이언트가 버튼을 눌렀을 때, 현재 시간을 돌려주는 서블릿을 생성해보자.

<!-- index.html -->
<form action="Exam_01" method="post">
	<input type="submit" value="현재시간은?">
</form>
@WebServlet("/Exam_01")
public class Exam_01 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 작업의 처리
        String currentTime = new Date().toString();
        // Response를 작성하는 작업
        PrintWriter pw = response.getWriter();
        pw.append(currentTime);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response){
		doGet(request, response);
	}
}

⑤ request

클라이언트에서 값을 전달할 때는 꼭 name속성을 가져야 한다.
name은 데이터에 대한 이름표이므로, name이 없으면 서버에서 데이터를 꺼낼 방법이 없다.
서블릿에서 받을때는 getParameter 메소드를 이용한다. 파라미터는 name을 받는다.

<form action="Servlet01" method="get">
	<input type=text name="name">
	<input type=text name="message">
	<input type=submit>
</form>
String name = request.getParameter("name");
String message = request.getParameter("message");

⑥ response

response는 현재 빈 바구니와 같은 상태인데, 여기에 글을 쓰는 작성자 getWriter 메소드를 꺼내준 뒤, PrintWriter라고 하는 자료형 변수에 담아준다.(getWriter 메소드의 리턴값이 PrintWriter)
append메소드는 PrintWriter를 데려와서 이것좀 써봐! 라고 명령하는 메소드라고 생각하면 된다.

response 한 내용을 이쁘게 꾸며주기 위해 color와 size를 바꿔주었다.
이렇게 append로 태그를 직접 보내주는 것이 최초의 서블릿 response 동작 방법인데, 뒤에 더 최적화된 방법을 배울 것이다.
일단은 비효율적이더라도 이해를 돕기 위해 아래와 같은 방법을 사용한다.

PrintWriter pw = response.getWriter();
pw.append("<html>");
pw.append("<body>");
pw.append("<font color=pink size=20>");
pw.append(name + "'s message : " + message);
pw.append("</font>");
pw.append("</html>");
pw.append("</body>")

댓글남기기