본문 바로가기
JAVA

[JAVA] JSP 게시판 따라 만들어보고 서버 배포까지 공부해보기(EC2, Docker)

by five-sun 2022. 12. 16.
728x90

Spring을 공부하기 이전에 영상 자료를 따라서 JSP를 사용하여 간단한 게시판을 만들어보았다.

*간단하게 따라서 만들면 끝나겠지 싶었지만 강의와 다르게 AWS를 이용해 배포 작업을 해보려다 보니 여정이 길어졌다...

 

 

 

참고: https://www.youtube.com/watch?v=wEIBDHfoMBg 

목차 보기

더보기

1강 : 개발 환경 세팅(Eclipse, Tomcat, JDK 설치)

2강: Index 페이지 생성, 부트스트랩 다운로드 후 연동하기

3강: 데이터 관리를 위한 데이터베이스 설치와 데이터베이스 생성, JSP에서 데이터를 사용하기 위해 Java Beans 생성하기

4강 : JSP에서 데이터에 접근하기 위해 DAO 만들기, login 함수와 loginAction.jsp 만들기

5강: join.jsp페이지 만들기

6강 : join 함수와 joinAction.jsp 만들기

7강 : 회원 세션 관리 기능 만들기

8강 : 게시판 메인 페이지 만들기

9강 : 게시판 데이터베이스 구축해보기 (create과 java beans 생성 까지)

10강 : 게시판 글쓰기 기능 구현하기

11강 : 글쓰기 목록 페이지 출력 구현과 데이터베이스에서 게시물 데이터 가져와 목록 만들기

12강 : 게시글 보기 기능 구현하기 + 게시물의 작성자인 경우, 수정 삭제 버튼이 보이도록 구현하기

13강 :  게시글 수정하기 기능과 삭제하기 기능 구현하기

14강 : 메인 페이지 디자인하기(jumbotron, Carousel 활용하기)

15강 : 프로젝트 마무리와 배포

배포하는 단계에서 강의에선 카페24의 호스팅 서비스를 이용했지만 AWS EC2를 이용해보기로 했다.

메타 코딩 - AWS 배포 강의를 보면서 공부했다.

우선 앞서 만든 JSP 프로젝트와 AWS 프리티어 EC2 컴퓨터를 한대 만들었다.

 

* EC2 서버를 임대하는 것과 같은 서비스를 Infra as a Service  = IaaS

* 컴퓨터와 window, tomcat, jdk 개발환경을 제공해주는 서비스를  Platfrom as a Service = PaaS

* 컴퓨터와 window, 엑셀과 같은 프로그램까지 제공해주는 서비스를 Software as a Service = SaaS

 

만든 EC2 컴퓨터를 Window 환경에서 조작하기 위해서 Putty를 설치하고 Linux환경을 만들었다.

이후 apt를 활용해서 톰캣과 MySQL을 설치해보았다. 최신 버전 설치를 위해 Ubuntu apt 저장소를 kakao mirror로 변경도 해보았다. (apt는 우분투에서 쓰이는 데비안 계열의 패키지를 관리하는데 쓰이는 도구이다.)

 

apt 명렁어를 간단하게 정리해보자.

패키지 리스트 업데이트 : apt-get update

패키지 업데이트 :  apt-get upgrade

패키지 설치 : apt-get install [패키지명]

패키지 재설치 : apt-get --reinstall intsall [패키지명]

패키지 삭제 : apt-get remove [패키지명] #설정파일은 지우지 않음, apt-get purge [패키지명] #설정파일까지 지움

패키지 검색 : apt-cache search [패키지명]

패키지 정보 : apt-cache show [패키지명]

 

나의 Ubuntu 컴퓨터에 tomcat과 MySQL을 모두 설치했다면 tomcat의 webapps 폴더를 찾아서 war파일을 올려주기만 하면 됐다. war파일을 Ubuntu 컴퓨터에 옮기는 방법은 FileZilla를 이용하는 방법을 인턴경험하면서 보았었는데 Git의 Clone 명령어를 이용해서 옮겨보았다. 옮겨주면 자동으로 압축해제를 해주고 8080포트에서 내가 올린 웹 게시판이 잘 올라갔다.

하지만 DB를 연동하는 부분이 잘 동작하지 않았다.

 

<%
String dbURL = "jdbc:mysql://localhost:3306/bbs?serverTime=Asia/Seoul";;
String dbID = "root";
String dbPassword = "0000";

Connection conn;
Statement stmt;

try {
 Class.forName("com.mysql.cj.jdbc.Driver");
 conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
 stmt = conn.createStatement();
 conn.close();
 out.println("MySql jdbc test: connect ok!!");
} catch(Exception e) {
 out.println(e.getMessage());
}
%>

해당 코드를 test.jsp로 작성해서 DBconnection이 연결되지 않았다는 걸 확실하게 확인했다.

 

DB에 인증할 수 없다는 문제를 확인하고 MySQL에 접속하여 내가 적은 dbID 와 dbPassword에 맞게 변경해보았다.

alter user 'root'@'localhost' identified with mysql_password by '0000'; 으로 변경하고 flush privileges를 입력하지 않아 문제가 또 발생했다.

 

MySQL을 인증 생략하여 들어가기 위해 MySQL을 종료한 후 --skip-grant-table& 옵션을 이용해 접속한 후 다시 새 패스워드를 지정하였다.

 

DB connection은 연결이 되었지만 내가 지정한 Database와 테이블을 찾지 못하고 있는 것 같았다 이와 같은 로그를 찾아 보기 위해 tomcat/logs 디렉토리로 이동하여 tail 명령어를 사용해 catalina.out 파일을 살펴보며 문제를 찾고 수정하며 DB연결과 동작을 완성했다.

 

구현 화면보기

더보기
메인 화면
게시판 화면

 

War파일을 직접 던져 배포해보는 경험을 해보고 다음 강을 이어서 수강하면서  Docker를 사용해봤다.

참고: Jsp aws 배포 1강 - war파일 생성 - YouTube

 

우선 Docker를 apt 저장소를 이용해 설치한 후, Docker Hub를 이용하여 tomcat과 MySQL도 설치할 수 있었다.

docker를 실행할 떄는 docker run -d -p 포터:포워딩 명령어를 사용하고 -d 옵션으로 백그라운드 시작 -p 옵션으로 포트포워딩을 지정할 수 있었다.

docker ps 명령을 통해서 도커에 컨테이너가 올라왔는지 확인할 수 있었다.

docker exec -it 컨테이너 id 명령을 통해서 활성화된 프로세스에 진입할 수 있었다. -it 옵션으로 응답이 있는 터미널 모드로 접속할 수 있었다.

 

(나는 이부분에서 문제를 겪어 MySQL 연결에 어려움을 겪었다. 내부 ip를 찾는데 문제가 생겼다.)

 

이후 배포과정은 똑같이 war 파일을 tomcat에 webapps에 올려줌으로서 배포할 수 있었다.

 

Docker의 경우, 같은 컴퓨터이지만 다른 컨테이너에 DB와 WAS가 존재하므로 WAS로 들어온 DB요청을 DB 컨테이너로 넘겨주는 부분을 잘 설정해주는 것이 중요해 보였다.

 

728x90