본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 53일차 (2023-08-04) 자바 프로그래밍_56. 웹 애플리케이션 자바 표준 기술 JavaEE 도입_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 8. 5.
## 56. 웹 애플리케이션 자바 표준 기술 JavaEE 도입

- JavaEE 기술 소개
- JavaEE 버전 별 하위 기술 버전 
- JavaEE 구현 서버 및 Servlet 컨테이너 관계
- Servlet API 사용법

 

 

gradle 이용하여 프로젝트 생성

=>

 

eomcs-servlet/build.gradle

ㄴ plugins 에서 application 이 아닌 java 로 변경해주도록 함

ㄴ 이제 더 이상 application 이 아니므로 해당 코드 제거

 

ㄴ 자바 소스를 컴파일 할 때 적용할 옵션 추가

 

ㄴ eclipse 프로젝트 이름을 설정 => servlet-app

     ㄴ 프로젝트 이름을 servlet-app 으로 변경할 것임

 

프로젝트 이름 변경

=>

=>

ㄴ gradle 설정해주기

 

ㄴ workspace 에 servlet-app 프로젝트 import 하기

 

 

ㄴ App.java 는 필요 없으므로 제거

 

ㄴ AppTest.java 도 필요 없으므로 함께 제거

 

ㄴ src/main/resources 패키지가 비어있으면 git 에 commit 할 때 commit 이 되지 않으므로 README.md 파일을 추가해줌

 

 

ㄴ src/test/java 패키지 안에 있는 eomcs.servlet 패키지가 비어있으면 git 에 commit 할 때 commit 이 되지 않으므로 README.md 파일을 추가해줌

 

ㄴ src/test/resources 패키지가 비어있으면 git 에 commit 할 때 commit 이 되지 않으므로 README.md 파일을 추가해줌

 

ㄴ src/main/java 패키지 안에 eomcs.servlet 패키지에 HelloServlet.java 클래스 생성

 

HelloServlet.java

ㄴ Servlet 을 import 하기 위해 라이브러리 다운로드 필요

 

Servlet 라이브러리 추가

https://central.sonatype.com/

 

Maven Central

# Programming Language Utilities

central.sonatype.com

 

=>

ㄴ 4.0.1 버전을 선택

 

ㄴ Gradle(short) 선택 후 [Copy to clipboard] 선택

 

build.gradle

ㄴ Servlet API 추가

 

ㄴ gradle 재설정

 

ㄴ javax.servlet-api-4.0.1.jar 생성됨을 확인

 

HelloServlet.java

ㄴ 이제 javax.servlet.Servlet 라이브러리 import 가능

 

 

HelloServlet.java

ㄴ service 메서드 오버라이딩

 

HelloServlet.java

ㄴ init 메서드 오버라이딩

 

HelloServlet.java

ㄴ destroy 메서드 오버라이딩

 

HelloServlet.java

ㄴ GetServletInfo 메서드 오버라이딩

 

HelloServlet.java

 ㄴ GetServletConfig 메서드 오버라이딩

 

HelloServlet.java

ㄴ init 메서드 작성

 

HelloServlet.java

ㄴ service 메서드 작성

    =>  클라이언트가 요청할 때 마다 서블릿 컨테이너가 호출함을 확인하기 위한 코드

 

HelloServlet.java

ㄴ destroy 메서드는 서블릿 컨테이너가 종료되기 직전에 호출함

 

HelloServlet.java

ㄴ getServletInfo 메서드는 서블릿의 간단한 설명이 필요할 때 호출하도록 함

    ㄴ 서블릿 컨테이너가 관리 화면에 출력하기 위해 호출할 수 있고, 다른 서블릿에서 호출할 수도 있음

 

HelloServlet.java

ㄴ ServletConfig 를 담기위해 config 필드 선언

 

HelloServlet.java

ㄴ ServletConfig 메서드는 서블릿에 대한 설정 정보를 담은 객체를 리턴함

    ㄴ 서블릿과 관련된 설정 정보를 알고자 할 때 이 메서드를 호출하여 그 리턴 값을 사용하도록 함


HelloServlet.java

ㄴ init 메서드에서 서블릿 실행에 필요한 것들을 준비하도록 함

 

HelloServlet.java

ㄴ service 메서드에서 클라이언트 요청을 처리한 후 그 결과를 리턴하면 됨

 

HelloServlet.java

ㄴ destroy 메서드를 이용하여 init 메서드에서 준비한 자원을 해제시키도록 함

 

HelloServlet.java

=>

HelloServlet.java

ㄴ @WebServlet 애노테이션을 이용

 

ㄴ gradle 재설정하기 하기

 

ㄴ /Users/사용자명/git/bitcamp-study/servlet-app/app/build/classes/java/main/eomcs/servlet/HelloServlet.class

    => HelloServlet 의 클래스 파일 확인

 

build.gradle

ㄴ war 플러그인 추가

 

ㄴ gradle 재설정

 

ㄴ /Users/yangsoyul/git/bitcamp-study/servlet-app/app/build/libs/app.war 파일 확인

 

build.gradle

ㄴ war 설정 추가

 

ㄴ gradle 재설정

=>

ㄴ build.gradle 스크립트 파일 설정에서 설정한 이름으로 war 파일 생성됨

ㄴ 생성된 servlet-app.war 파일 복사

=>

ㄴ 톰캣 경로/webapps 위치에 붙여넣어 배포하기

=>

ㄴ 조금 기다리면 servlet-app 폴더가 생김

 

ㄴ /Users/사용자명/server/apache-tomcat-9.0.78/webapps/servlet-app/WEB-INF/lib 경로에 라이브러리들 확인

=>

build.gradle

ㄴ 배포 받는 쪽에서 라이브러리를 갖고 있을 때 사용하는 옵션

    ㄴ 배포 제외

=>

ㄴ gradle 재설정

 

ㄴ war 파일 확장자를 zip 으로 변경한 후 zip 파일 압축 풀기

=>

ㄴ /Users/사용자명/git/bitcamp-study/servlet-app/app/build/libs/servlet-app/WEB-INF/lib 에 들어가서 8개였던 라이브러리가 7개로 줄어듦을 알 수 있음

=> build.gradle 스크립트 파일에서 배포시 제회할 라이브러리 설정을 해주었기 때문

 

ㄴ localhost:8888/ 에 바로 Hello 를 적어주면 정상적으로 실행되지 않음

=>

ㄴ 현재 프로젝트 이름까지 적어줘야 정상적으로 실행됨

 

프로젝트 적용

build.gradle

=>

build.gradle

ㄴ Netty 라이브러리 제거

=>

build.gradle

ㄴ Servlet API 추가

 

build.gradle

ㄴ application 제거

 

build.gradle

ㄴ war 파일 이름 설정 추가

 

ㄴ gradle 재설정

=>

ㄴ 라이브러리가 생기지 않아서 cleanEclipse 를 해줌

=>

ㄴ 프로젝트 Refresh 해주기

 

ㄴ 라이브러리 생긴 것을 확인

 

ㄴ 해당 파일들 모두 제거

 

MySQLBoardDao.java

ㄴ @Component 애노테이션 제거

 

MySQLItemDao.java

ㄴ @Component 애노테이션 제거

 

MySQLMemberDao.java

ㄴ @Component 애노테이션 제거

 

ㄴ report-server/src/main 경로에 webapp 폴더 생성

 

ㄴ /report-server/src/main/resources/static 에 있는 auth, item, member 폴더 및 favicon.ico, index.html 파일을 /report-server/src/main/webapp 경로로 이동시킴 (드래그 앤 드랍)

 

ㄴ /report-server/src/main/resources 에 있는 static 폴더 삭제

 

ㄴ LoginServlet.java 파일 복사

=>

ㄴ /report-server/src/main/java/bitcamp/report/handler 경로에 InitServlet 이라는 이름으로 붙여넣기

 

ㄴ AbstractServlet 클래스 생성

 

AbstractServlet.java

ㄴ AbstractServlet  클래스는 

 

InitServlet.java

ㄴ @WebServlet 애노테이션 추가

 

InitServlet.java

ㄴ AbstractServlet 을 상속받도록 수정

 

InitServlet.java

ㄴ service 메서드 새로 오버라이딩 해주기

 

InitServlet.java

ㄴ req -> request 로 변경

ㄴ res -> response 로 변경

 

InitServlet.java

ㄴ 코드 변경

 

InitServlet.java

ㄴ AppConfig.java 파일에서 해당 코드 잘라내와서 sqlSessionFactory 에 대입해주기

 

InitServlet.java

ㄴ DAO 인터페이스를 구현하고, 실제 데이터베이스 연산을 처리하며 SqlSessionFactory를 이용하여 데이터베이스 세션을 생성하고 관리하도록 함

=> init 메서드는 각각의 DAO를 생성하고 SqlSessionFactory를 초기화하여 데이터베이스 작업을 수행할 준비를 하도록 함

 

ㄴ config 패키지 자체를 삭제 => AppConfig.java 파일은 이제 필요 없음

 

ㄴ ApplicationContext.java 파일 제거

 

ㄴ DataSource.java 파일 제거

 

BoardListServlet.java

ㄴ @WebServlet 애노테이션 추가

 

BoardListServlet.java

ㄴ 생성한 AbstractServlet 상속받도록 해줌

 

BoardListServlet.java

ㄴ 해당 인터페이스구현은 이제 InitServlet 에서 해줄 것이므로 제거

 

BoardListServlet.java

ㄴ service 메서드 새로 오버라이딩 해주기

=>

BoardListServlet.java

ㄴ req -> request 로 변경

ㄴ res -> response 로 변경

 

BoardListServlet.java

ㄴ boardDao 는 InitServlet 에서 구현하므로 해당 코드 추가

 

ㄴ /Users/사용자명/git/bitcamp-study/report/app-server/src0

ㄴ app-server 의 src 를 src0 라는 이름으로 백업해두기

 

ㄴ BoardListServlet.java 를 제외한 XxxXxxServlet.java 파일 모두 삭제

 

ㄴ gradle build 실행해주기

 

=>

ㄴ tomcat 에 배포해주기

 

ㄴ 톰캣 실행하기

=>

ㄴ 브라우저를 띄운 후 init 을 실행해주기

 

ㄴ 리스트 출력 잘 됨을 확인

 

ㄴ 메인 페이지로 이동하려면 프로젝트 이름도 브라우저에 적어줘야 하는 문제점이 있음

=>

server.xml

ㄴ 톰캣 server.xml 설정에서 해당 코드에서 docBase 를 report 로 변경해줌

=>

톰캣 서버 재시작

=>

ㄴ 기본 루트가 report 로 변경됨

 

 

ㄴ 글 목록이 노출되지 않음

=>

ㄴ init 해주면 해결됨

=>

ㄴ 목록 제대로 출력됨을 확인

=>

init 을 자동으로 실행하도록 하자

=>

InitServlet.java

ㄴ loadOnStartup의 값이 숫자로 지정되며, 작은 숫자일수록 먼저 로드됨

    => 1을 지정하여 웹 애플리케이션이 시작될 때 InitServlet 서블릿이 가장 먼저 로드되도록 설정

 

InitServlet.java

ㄴ init 메서드 오버라이딩

=>

InitServlet.java

ㄴ service 메서드에 있던 해당 코드를 init 메서드로 옮긴 후 try~catch 문으로 묶어주기

 

InitServlet.java

ㄴ init 호출 확인을 위해 출력문 추가해주기

 

ㄴ gradle build 실행해주기

 

=>

=>

ㄴ 이제 init 을 실행하지 않아도 자동으로 실행됨

=> 게시글 목록이 잘 출력되는 것을 확인

 

Mac 에서 로그 확인 방법

 

=>

ㄴ Server > Runtime Environments 선택

=>

ㄴ Apache Tomcat v9.0 > [Next>] 선택

=>

ㄴ 톰캣 경로 설정해주기

=>

=>

 

ㄴ 이렇게 Servers 탭이 보이지 않는다면 아래와 같이 설정해주기

=>

=>

ㄴ No servers are available. Click this link to create a new server... 링크를 선택

=>

ㄴ Apache > Tomcat v9.0 Server 선택

ㄴ Server name 이름 변경해주기

=>

ㄴ Project Explorer 창에 Servers 폴더가 생성되며, 생성한 Tomcat 서버 노출됨

 

ㄴ 추가한 서버별로 설정파일을 따로 설정할 수 있음

 

=>

ㄴ server 가 start 됨을 확인

ㄴ start 가 실행되지 않는다면 이미 실행되고 있는 tomcat 서버를 모두 종료시켜줘야 함

 

ㄴ /Users/yangsoyul/bitcamp-workspace/.metadata/.plugins/org.eclipse.wst.server.core 경로에 tmp 폴더가 생김

=> tmp0, tmp1, tmp2 에서 각각의 번호는 서버가 생성된 순서대로 부여됨

 

ㄴ 다른 서버가 실행되고 있을 때 또 다른 서버를 실행시키려고 하면 다음과 같은 오류 발생함

=>

=>

ㄴ 다른 서버를 실행시키고 싶으면 이미 실행되고 있는 서버를 stop 한 후 다시 실행하면 됨

=>

=>

 

 

=>

=>

해당 서버 실행시키기

=>

ㄴ 해당 오류 발생

=>

ㄴ /Users/yangsoyul/bitcamp-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/report-server/WEB-INF/lib 경로 들어가서 라이브러리 확인

 

build.gradle

ㄴ plugins 설정에서 eclipse -> eclipse-wtp 로 변경해주기

 

build.gradle

ㄴ wtp 설정을 추가해주도록 함

 

ㄴ gradle clean 후 재설정하기

 

ㄴ 프로젝트 Refresh 해주기

=>

 

=> 다음 포스팅에서 해결해보도록 하겠음