티스토리 뷰

MVC구조 이해를 위한 MVC프레임워크 직접구현
구현
- 질문/답변 게시판
- 회원가입
- 로그인/로그아웃
- 개인정보 수정
실습환경
- GitHub
- JDK 8
- eclipse
- Maven
프로젝트 Fork
github.com/lurutia/web-application-server
Fork 후 eclipse에서 clone한 후 실습을 진행하도록 하는것이 본인의 소스를 보관할 수 있어서 권장
Fork -> eclipse open perspective -> Git -> git repository 우클릭 -> import projects
원격 서버에 배포
요구사항
ubunutu 14.04 LTS 에 배포한다.
AWS에 대한 회원가입, 우분투 운영체제 설치, SSH를 통한 접근은
opentutorials.org/module/1946 << 문서에 잘 나와있다. AWS를 사용할수도 있지만 VMWare를 이용해 진행하려고 한다.
계정 추가 및 sudo 권한 할당
보안을 위해 root가 아닌 계정을 추가한다.
- adduser 명령어 사용
- ubuntu sudoer 추가
각 계정별 UTF-8 인코딩 설정해 한글 이슈 해결
sudo locale-gen ko_KR.EUC-KR ko_KR.UTF-8
sudo dpkg-reconfigure locales
- 각 계전 디렉토리의 .bash_profile에 다음 설정 추가
vi .bash_profile
LANG-"ko_KR.UTF-8"
LANGUAGE="ko_KR:ko:en_US:en"
- source .bash_profile 명령을 실행해 설정한 내용을 시스템에 반영시킨다.
- env 명령을 실행해 설정을 확인한다.
SSH 설치
sudo apt-get install ssh
sudo apt-get install openssh-server
sudo /etc/init.d/ssh restart
JDK, 메이븐 설치
JDK
(다운로드시 Oracle 정책이 변경되어 불가능 할 수 있음.. tar.gz 파일을 받을 수 있는방법을 다양하게 찾아보는걸 권장)
sudo wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://다운로드경로/jdk-8u281-linux-x64.tar.gz
gunzip jdk.tar.gz
tar -xvf jdk.tar
ln -s jdk1.8.0_281/ java
vi .bash_profile
export JAVA_HOME=~/java
export PATH=$PATH:$JAVA_HOME/bin
java -version
메이븐
https://maven.apache.org/download.cgi 에서 최신버전 tar.gz 다운로드
wget https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
gunzip 파일.tar.gz
tar -xvf 파일.tar
ln -s apache-maven/ maven
vi .bash_profile
export MAVEN_HOME=~/maven
export PATH=$PATH:$MAVEN_HOME/bin
source .bash_profile
mvn -version
HTTP 웹서버 코드 빌드 및 배포
Git 설치
sudo apt-get install git
mkdir repositories
git clone
git clone https://github.com/lurutia/web-application-server.git
build
mvn clean package (프로젝트 폴더에서 실행 자동으로 의존성에 필요한 jar들을 받아주고 build해줌)
실행
-cp : classpath 경로 (의존성이 있는 jar파일 모음 폴더 경로)
webserver package의 Webserver class의 main을 실행
인자로 $PORT 를 줌 해당 포트로 실행
java -cp target/classes:target/dependency/* webserver.Webserver $PORT
빌드 도구
- Ant -> Maven -> Gradle로 변화
- Gradle은 Groovy라는 문법을 사용
- Maven은 부모설정파일을 가지고있음 Effective POM에서 Maven이 어떻게 이루어져있는지 알 수 있음
- maven 기본 명령어 compile/test/package
- Maven은 plugin 중심 plugin의 명령어는 goal이라고 함
- Phases가 있어서 Phases 순차대로 실행됨 Phases마다 Plugin:Golas가 있음 Phases는 default가 있고 변경할 수 있음 하지만 plugin은 변경할 수 있음
요구사항 1 - index.html 응답하기
request를 분석하여 webapp 에 있는 파일을 반환해준다.
요구사항 2 - GET 방식으로 회원가입하기
url에 queryString으로 회원정보를 받아 User객체를 만든다.
요구사항 3 - POST 방식으로 회원가입하기
header에서 content-length에 따라 body 데이터를 parse한뒤 user객체를 만들어 response body에 담아 리턴한다.
요구사항 4 - 302 status code 적용
응답헤더를 302코드를 사용하고 Location을 설정해 redirection 할 페이지를 결정한다.
요구사항 5 - 로그인하기
로그인이 성공하면 index.html 페이지로 이동하고 Cookie에 logined=true를 설정한다.
로그인이 실패하면 logined를 false로 설정한다.
요구사항 6 - 사용자 목록 출력
로그인 상태면 사용자 목록을 출력 로그인 되어있지 않다면 login.html로 이동
요구사항 7 - CSS 지원하기
CSS응답일 경우 응답 헤더의 Content-Type을 text/css로 전송한다.
디버깅을 위한 로깅(loggin)
왜 로깅을 사용하는가?
- System.out.println 은 성능저하의 요인이 됨
- 배포시 주석처리해야 하는 문제가 있음
'프로그래밍 언어 > Java Programming' 카테고리의 다른 글
자바 프로그래밍 Next Step 4장 (0) | 2021.03.19 |
---|---|
자바 프로그래밍 Next Step 2장 (0) | 2021.03.17 |
JAVA Checked Exception, Runtime Exception (0) | 2021.02.25 |
객체지향 프로그래밍 OOP 5대원칙 SOLID (0) | 2021.02.25 |
파일 확장자 또는 파일명만 추출하기 (0) | 2020.06.05 |