-
[헤드퍼스트 Servlet&JSP] 3. 초 간단 미니 MVC 튜토리얼개발입문/Servlet&JSP 2017. 2. 1. 00:42
전 기획자입니다.
"늘 개발자들이 빌드해주세요. 배포 제가할게요." "커밋했습니다." "푸시가 안되었네요." 등등... 개발자들끼리 여러 개발 상태값이 오가지만, 기획자가 알아들을 수 있는 단 한마디는 요거: "테스트 해주세요." 이다. 역시... 주니어 기획자의 꽃은 테스트!!!
(쓸데없이 공들이기)그리고 괜히 들여다보는 크롬 - 검사, 개발자도구 F12
웹 애플리케이션 에러를 마주하면서 왜 이런 값을 뱉어내는 지 보고 싶어서 접했던 도구가 바로 크롬 개발자 도구이다. (개발자들이 CSS 틀어졌을 때 가끔 저 것을 꺼내보던 것이 기억에 남았던 듯하다.) 하지만 내가 볼 수 있는 것은 HTML 코드 뿐. 로직이나 값 계산은 모두 서버에서 이미 처리된 채로 HTML 코드 결과값만 보내준다는 것을 나중에 알았다.
저 이 장만 읽으면 위의 어색한 상황들이 해소되는걸까요? +_+
학습목표
웹 애플리케이션 디렉토리 구조: 정적인 컨텐츠 (HTML), JSP 뷰, 서블릿 컨트롤러 클래스, 배포서술자 (XML), 태그 라이브러리, JAR파일, 모델 (자바 클래스 파일)
배포서술자 용도 및 문법, 구조
+a. 코딩 - 컴파일 - 빌드 - 배포 -테스트 - 실행
반복적인 개발에는 Unified Process를, 테스트 주도 개발 방법에 대해서는 TDD (Test Driven Development) 를 참고하세요. XP (Extreme Programming) 은 뭐죠?
빌드
1. 고차원적인 구조화 - 개발환경 - 배포환경 - 반복적인 개발과 테스트
2. 개발환경: 개발 디렉토리 구조
개발 디렉토리를 웹애플리케이션으로 배포하는 방식은 디렉토리의 일부를 컨테이너가 지정한 곳에 복사한다. (e.g. 톰캣 컨테이너)
3. 배포환경: 톰캣 컨테이너, 서블릿 스펙 영역, 애플리케이션 영역
4. 웹 어플리케이션 개발 여정 (서블릿 버젼 1,2,3 or 테스트 클래스 등 단계별로 진행)
개발자는 (로컬) 개발 디렉토리에서 소스를 작성, 편집하고, 로컬환경에 배포하고 자체 테스트를 한다. 그리고 개발 전용 dev 서버를 사용하는 배포 환경에 빌드한다.(개발 디렉토리에서 웹 배포 디렉토리로 복사한다) 그리고 배포 담당자는 dev 배포를 하고 기획자들이 테스트를 한다.
그리고 꽤 큰 프로젝트의 경우 stage 서버를 거친다. 이 때, 모든 서버에서 공유하는 소스, 이미지들은 한 경로를 사용한다. 단, DB는 다르다. (고객의 정보는 소중하니까요.) development 서버 (줄여 dev 서버) 에서는 DB는 테스트 DB를 사용한다. stage 서버의 경우 실제 환경에서의 워킹을 봐야하므로, 프로덕션 DB를 사용한다.
이 빌드 - production 서버 (실제 웹 구동서버)에 배포하고, 테스트를 한다.
빌드 How-To
개발환경
톰캣 컨테이너: 톰캣 홈 디렉토리/webapps 에 자신의 프로젝트 폴더를 위치시킨다.
컨텍스트 홈 디렉토리: Beer-v1 폴더
{톰캣 홈 디렉토리}/webapps/{프로젝트명} 디렉토리 구조
/Library/Java/JavaVirtualMachines/apache-tomcat-8.0.41/webapps/Beer-v1
{톰캣 홈 디렉토리}/bin 이동, 톰캣 실행/종료
./startup.sh
./shutdown.sh
http://localtest:8080 아파치 호랑이 확인하고
http://localtest:8080/Beer-v1/form.html 랜딩/확인
반가운 호랑이? 고양이!?
클래스 파일이 변경되었을 경우, 반드시 톰캣을 종료, 재실행해주셔야 합니다.
<form method="POST" action="SelectBeer.do">
/Beer-v1/SelectBeer.do
{서버 루트 디렉토리}/{웹 애플리케이션 컨텍스트* 루트}/{자원에 대한 논리적인 이름}
DD (Distribution Descriptor)에는 <servlet> 과 <servlet-mapping>이 있습니다. 그리고 각각은 공통되는 servlet-name 을 통해 서로를 대응시킵니다.
<servlet> servlet-name, servlet-class
<servlet-mapping> servlet-name, url-pattern
servlet-name: 논리적인 이름
url-pattern: 외부 유입경로
servlet-class: 실제 파일 경로
서블릿 코드 작성하고
컴파일, 배포, 테스트하기손 컴파일이라니... ㅇㅂㅇ;;;; 한참헤매서 해냈다. (자바 손컴파일 필요하면 나중에 공부해봐야지)
(주의) -d 옵션이 없으면 컴파일 대상이 위치한 경로에 클래스 파일이 생긴다.
아무런 에러 or Usage를 살펴보렴 메시지가 없으면 성공한 것이다.
$ javac -classpath {톰캣 경로}/[common/]lib/servlet-api.jar:classes:.
-d {클래스파일 위치시킬 경로} {컴파일 대상}
$ javac -classpath /Library/Java/JavaVirtualMachines/apache-tomcat-8.0.41/lib/servlet-api.jar:classes:. -d ./WEB_INF/classes/com/example/web/ ./WEB_INF/src/com/example/web/BeerSelect.java
https://www.youtube.com/watch?v=Po9O_Nobh0g
끝
처음으로 손컴파일로 성공적으로 배포를 완료하셨습니다!!
중간중간 서블릿을 못찾는 404에러, 패키지 경로를 잘못 설정해서 발생한 500 서버 에러 등 다양한 과정을 거쳐 드디어 '처음' 완성시켰습니다. (감동 ㅜㅜ)
다음 포스트에서 컨테이너 로직으로 서블릿, 클래스를 호출하는 구조를 다시 정리해봐야겠다!
'개발입문 > Servlet&JSP' 카테고리의 다른 글
[헤드퍼스트 Servlet&JSP] 4. 요청과 응답 (0) 2017.02.05 [헤드퍼스트 Servlet&JSP] 3-2. MVC 진행 (0) 2017.02.05 [헤드퍼스트 Servlet&JSP] 2. 웹어플리케이션 아키텍쳐 (0) 2017.01.30 [헤드퍼스트 Servlet&JSP] 1. 웹 지식 리뷰 (0) 2017.01.30 (공부일기) HeadFirst Servlet & JSP 시작 (0) 2017.01.30