티스토리 뷰

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 은 성능저하의 요인이 됨
  • 배포시 주석처리해야 하는 문제가 있음

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함