본문 바로가기

대학교 과제/웹 프로그래밍 [3 - 1]

[공부 정리] Tomcat서버의 코드 생성과정 - (Eclipse, Tomcat)

반응형

1. 개요

 

 웹 프로그래밍 수업이 시작되었다! 지금까지는 Django를 활용해 공짜 HTML탬플릿과 간단한 코드로 페이지를 만드는게 다였지만 드디어 서버와 같은 중요한 개념에 대해 확실하게 배울 기회가 생긴 것이다. 에브리타임에 강의평도 매우 좋고 선배들이 매우 추천해주시는 교수님의 수업을 들을 수 있어서 매우 다행이었고 첫 시간부터 왜 이 교수님께서 선배들에게 최고의 교수님이라는 말을 들으시는지 알 수 있었다. 서버에  올라오는 파일들의 개념과 컴파일 과정을 정확하게 알려주셨다. 다음은 내가 배운 내용을 정리해본 것이다.

 

2. 내용

 

- 웹 서버와 어플리케이션 서버

 

 처음 배운 내용은 웹 서버와 어플리케이션 서버의 차이점이다. 이를 알아야 이후에 배운 아주 중요한 내용인 코드가 서버에서 실행되는 과정을 이해하는데 더 쉽다고 생각하기에 이 개념을 먼저 설명해보겠다. 내가 지금까지 배운서버의 구조는 다음 그림과 같았다.



 여기서 서버란 내가 진행한 프로젝트를 올려놓는 곳 즉, 원격 저장소의 역할을 하는 것이고 주소를 통해 요청이 온다면 그에 맞는 응답을 해주는 역할을 한다고 알고있었다. 그러나 이번 강의에서 배운 서버는 하나가 아니었다. 다음 그림을 보자.



 이렇게 서버는 정적인 웹 서버와 동적인 웹 어플리케이션 서버로 나뉘는 것이다. 결국 클라이언트에서 정적인 요청을 한다면 웹서버는 즉각 응답을 해주지만 동적인 요청을 해온다면 웹 어플리케이션으로 요청을 재 전송해 응답을 받아온 후 다시 클라이언트에 요청을 해준다. 내가 지금까지 그렇게 많이 들었던 WAS가 Web Application Server의 약자였고 웹동적인 웹 어플리케이션 서버를 의미한다는 것을 알게 되었다.

 

- 파일의 생성과 서버 내에서의 컴파일 과정 이해

 

 이제 우리가 개발한 코드를 웹 어플리케이션 서버에 올려놓고, 응답된다는 것을 알았으면 그 과정을 직접적으로 확인해보자. 일단 개발 서버 즉, 우리가 직접적으로 개발을 진행하는 서버(내 노트북, 자기 컴퓨터 등등) 에서 작성한 코드를 24시간 구동되는 서버에 올려놓아야 된다는 것이다. 이 서버의 역할을 Tomcat, Apache가 하는 것이고 말이다.

 

 자 그럼 Eclipes에서 myapp이라는 이름의 프로젝트를 생성해보자. 이 프로젝트는 내가 개발하려는 웹 페이지의 역할을 할 것이다. 그렇게 되면 myapp의 하위 폴더에 WebContent라는 파일이 있는데, 이곳에 HTML, CSS 와 같은 프론트앤드 언어를 작성하면 된다. 나는 012sample.jsp라는 파일을 생성하였다. 그러면 다음과 같은 구조가된다.



 myapp(프로젝트명) 이라는 폴더 밑에Webcontent라는 파일 밑에 내가 작성한 jsp파일이 존재한다. 이곳은 개발서버 즉 우리가 직접적으로 코드를 개발하는 곳이다. 자 그럼 이것을 운영서버 즉 tomcat, apache에 올려야 한다는 것인데, 사실 이클립스에서 코드를 실행시키는 순간 서버에 코드는 올라간다. 그렇다면 이 코드의 위치를 찾아보자. 이 코드의 위치는 다음과 같다.



 이 코드를 보면 workspace폴더 안에 .metadata 폴더 밑에 .plugins 밑에 org.eclipes.wst.server.core 폴더밑에 tmp0폴더가 있다는 것을 확인할 수 있다. 여기서 tmp0폴더가 바로 서버이다. tmp0에서 뒤에 0이 붙는 이유는 가장 첫번째 서버여서 그렇다. 새로운 서버를 만들면 그 서버의 이름은 tmp1이 될 것이다.

 

 어쨎든 우리는 우리가 작성한 코드가 서버에 어딘가에 있다는 것을 알고 있고 그 어딘가를 정확하게 찾아보려고 한다. 그럼 이 서버 안에 하위폴더를 보자. tmp0 밑에는 wtpwebapps가 있는데 그 폴더 밑에 우리가 생성한 폴더랑 같은 이름의 폴더가 있다. 이것이 서버에 올라간 우리코드의 위치이다. 한눈에 보기위해 다음과 같이 정리하였다.



 위의 K파일이란 워크스페이스 폴더이다. 그 밑에 내가 생성한 프로젝트인 myapp폴더가 있고 같은 위치에 .metadata 폴더가 있다. 내가 직접 작성한 코드는 webcontent 폴더에 저장되어 있다. 그리고 이 코드가 그대로 서버에 올라가는데 서버에 올라가는 코드의 위치가 바로 .metadata 하위폴더 깊숙히 잇는 wtpwebapps 폴더 밑에 존재하는 것이다.

 

 이제 개념을 알았다면 한번 더 생각해보자. 코드는 실행될 때 .자바파일 즉, .calss 파일로 실행된다. 하지만 서버에 올라와있는것은 .jsp 파일이다. 그렇다면 이 .jsp파일을 .class파일로 바꿔줘야 할텐데 우리는 이런 과정을 커치지 않고도 화면에 우리가 작성한 코드가 나타났다. 그 이유는 .jsp파일은 tomcat 과 apache 즉 서버가 알아서 .class 파일로 바꿔준다. 

 

 그럼 서버가 친절하게 만들어준 .class 파일을 찾아보자. 우선 서버안에서 만들어진 파일이니 당연히 tmp0파일의 밑에 있을것이다. tmp0 밑에 파일을 보면 우리가 작성한 코드가 속해있는 wtpwebapps 파일과 같은 위치에 work파일이 있다. 이제 굴을 파듯이 깊숙하게 들어가야한다. work파일 밑에 catalina, localhost 파일을 확인해보면 우리가 생성한 프로젝트 이름과 같은 이름의 파일이 있다. 그 파일 밑으로 다시 org, Apache, jsp 파일을 계속 들어가다보면, 우리가 작성한 .jsp파일과 이름이 비슷한 파일들이 있다. 나를 예시로 들자면 내가 개발 서버 즉 eclipes에서 작성한 jsp코드의 이름은 012Sample.jsp 이다. 그리고 이 코드를 java로 바꾼것이 바로 _012Sample_jsp.java 이다. 앞에 _ 가 붙은 이유는 자바파일명이 숫자로 시작할 수 없어서이다.

 

 자 이제 다시 정리해보자. 우리가 작성한 파일 즉 jsp파일은 서버에 올라가게 되고 이 파일의 위치는 tmp0폴더 즉 서버폴더 하위에 존재한다. 이렇게 서버에 파일이 올라가게 되면 서버 즉 tomcat 자동적으로 .jsp 파일을 .java 파일을 바꿔주게 되는데, 이렇게 바꿔준 파일을 work 폴더의 밑에 깊숙한 곳에 존재하는 jsp 파일에 생성한다. 그리고 이렇게 생성된 .java파일을 .class로 바꿔 실행하면 최종적으로 우리의 눈에 보이는 것이다. 파일의 위치를 그림으로 정리하면 다음과 같다.



 

3. 결어

 

 Django를 공부할 때도 생성되는 app그리고 그 밑에서 조작하는 url 등과 같이 파일 위치에 대해 정말 햇갈린 기억이 있다. 이번 교수님이 이 부분을 확실하게 잡아주셔서 정말 좋았다. 앞으로 이렇게 내가 공부한 것을 많이  정리해서 올렸으면 좋겠다.

반응형