ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [헤드퍼스트 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 서버 에러 등 다양한 과정을 거쳐 드디어 '처음' 완성시켰습니다. (감동 ㅜㅜ) 

    다음 포스트에서 컨테이너 로직으로 서블릿, 클래스를 호출하는 구조를 다시 정리해봐야겠다!

    댓글

Designed by Tistory.