안녕세계
[T아카데미] 모바일 서버 프로그래밍 기본 - 1일차 본문
[T아카데미] 모바일 서버 프로그래밍 기본 - 1일차
Junhong Kim 2016. 6. 27. 17:55*정적인 웹
- 미리 작성된(이미 만들어진) 웹 페이지를 보여주는 방식, 요청에 따라 페이지만 보여 준다.
*CGI(Common Gateway Interface) : 동적인 웹
- 클라이언트에서 요청을 받아 요청에 해당하는 프로세스(프로그램)를 실행시킨다.
*서블릿(Servlet)
- 서블릿은 CGI와 동일하게 동적인 웹 어플리케이션을 작성할 수 있는 기술
- CGI와 비슷하게 클라이언트의 요청을 받아 해당하는 프로그램을 실행시켜주지만 CGI와는 조금 다른 동작 형태를 보인다.
*AOT(Ahead-Of-Time) : 실행코드방식
- 미리 컴파일된 실행 프로그램을 사용자의 요청에 따라 실행, 컴파일이 되어있고 Running만 한다.
(예) CGI, Servelet
*JIT(Just-In-Time) : 스크립트코드방식
- 사용자의 요청이 있을 때 스크립트 코드를 번역해서 번역된 코드를 실행
- 스크립트 코드의 번역은 해당 페이지가 최초 요청된 맨 처음에 한번만 실행하고,
그 이후 해당 페이지의 요청이 있는 경우 번역된 코드가 실행됨.
(예) ASP, JSP, PHP
*웹 어플리케이션과 모바일 어플리케이션
모바일 어플리케이션의 유형 및 제공하고자 하는 서비스의 특징에 따라 적절한 데이터 포멧 선택
Mobile Website 에는 HTML을 활용
Mobile Native App 에는 XML, JSON을 활용, 최근에는 JSON을 많이 활용한다
- Web : HTML을 보여주는 것
- App
1) Native App
- 앱에서 처리하기 쉬운 데이터 타입으로 응답 (XML, JSON 등)
- HTML에 관련한 기술이 하나도 안들어 감.
2) Web App
- 모바일 기기내 브라우저(WebKit)가 인식할 수 있는 HTML 응답 [안드로이드 컴포넌트에서 Webview를 사용하면 됨]
- 모든 기능을 브러우저가 다 함.
- 앱에 안드로이드, iOS의 기술이 들어가지 않음.
- HTML, JavaScript, CSS로만 만들어 짐.
- 이것은 마켓에 올라가기 위해서 만들어진 것 임
3) Hybrid App
- Native App + Web App 을 혼용한 방식
웹 서버를 위한 이클립스 셋팅 방법
C:/webDev/work
*Encoding Setting windows → preferences → general/workspace → Text file encoid other(UTF-8)
/* 프로젝트 생성 */ 빈 네비게이션 탭 오른쪽 버튼 → new → project → Dynamic Web Project
Project name : test1
tomcat 설치 경로 → browser → C:/program files/tomcat8.0 (폴더자체) 로 연결 → next → next
context root : 그대로
*프로젝트 생성한 결과 java resources 에는 실제 .java 이 들어가고 java를 컴파일하면 build 밑에 들어감 webContent 에는 순수 html이 들어감
/* Test */ webContent 오른쪽 버튼 → html 파일 → a.html <body> 태그에 글쓰고 → 오른쪽 버튼 run as → run on server → tomcat 8.0 → next → finish → 웹서버가 열림
톰캣은 순수자바로 이루어져 있어서 대/소문자 구별을 함. 실행하고나면 네비게이션 탭에 Servers 폴더가 생김
/* 우리는 배포판과 테스트판을 구별하기 위해서 셋팅을 바꿔줘야 한다. */ 자바파일은 Java Resources/src 오른쪽 버튼 눌러서 new → package 하고 실제로 배포로사용하는 것과 배포안 되는 것을 구분함
java Resource 오른쪽 버튼 → 소스폴더 (순수 자바 테스트 할 때 필요한 것.) project name : browser → test1 프로젝트 클릭
생선 된 test 폴더 오른쪽 눌러서
/* 배포하기 위해 build path 재 설정 */ WebContent/WEB-INF 오른쪽 버튼 눌러서 폴더를 새로 생성 folder name 은 classes 라고하고 폴더를 생성한다. 개발자는 대세를 따르는 것이 좋음.
가장 왼쪽 탭을 보면 source라는 것이 보임 아래에 보면 build path를 browser 누름.
/* 웹 전체를 관리해주는 설정 파일 (안드로이드에서 manifest 역할과 동일) */ AndroidManifest.xml = web.xml
탐색기 열어서 tomcat 설치된 곳 (C:/programfiles/apache softeware~/tomcat 8.0 → webapps)에 들어가면 몇개가 생성 되어있다. ROOT 라는 것이 있는데 여기를 들어가면 WEB-INF 열면 web.xml이 있음, 복사해서 이클립스 WebContent / Web-INF에 붙여넣기
web.xml해서 열어보면 source로 봐보자 여기에 주석되어있는것은 apache tomcat 라인선스 동의 임. 안쓰면 위반 됨. 그리고 포맷형식때문에 한글을 쓰면 안됨. 이파일을 수정하면 무조건 기존 서버를 껏다가 다시켜야 함.
|
● GET 방식과 POST 방식
GET
- 서버로 전달하고자 하는 파라미터를 URL 뒤에 붙여 전송하는 방식
- 전달할 수 있는 데이터 길이에 제한이 있음
POST
- 전달하고자 하는 정보가 HTTP body에 포함되어 전송되는 방식
- 파라미터가 직접 노출되지 않고 길이 제한이 없음
GET 방식은 ?name=value&name=value → 주소에 첨부 되서 간다
POST 방식은 받기만 하면 됨 → 눈에 안보이는 아웃 스트림
※ GET 방식과 POST 방식의 차이 - GET 방식은 주소 창에 파라미터가 그대로 노출되지만, POST 방식은 노출되지 않는다 - GET 방식은 전달하는 파라미터의 크기에 제한이 있는 반면에 POST 방식은 제한이 거의없다. - GET 방식은 1KB 이상의 데이터(즉, 큰 데이터)를 보낼 수 없어서, 신뢰성이 약하다. (라우터마다 보낼 수있는 크기는 다르다) - GET 방식은 짧은 데이터에 적합, POST 방식은 큰 데이터를 보낼때 적합 - GET vs POST 누가 더 좋고 안좋고가 없다. → 빠름/늦음 차이 → 옳고 그름이 아니라 다름이다 - 정보 달라고 하는건 GET 방식, 삭제할 때도 GET 방식을 권장
|
<form> 태그가 아닌 <a>, <radio>, <checkbox> 등의 태그로도 데이터 보낼 수 있음
<a>는 무조건 get 방식 밖에없다.
null 방식이 넘어가지 않게 if문으로 잘 처리하자. 식별은 key 로, 실제 넘어가는 건 value
/* 파라미터가 1개일 때 */
String size = request.getParameter("size");
/* 파라미터가 여러개일 때 */
String[] langs = request.getParameterValues("lang");
● XML과 JSON
더 짧게 데이터를 보내기 위해사용하는것이 JSON
XML과 JSON의 내부적인 data는 같지만 용량이 JSON이 더 작다. 그래서 최근에는 JSON을 많이 쓴다.
(HTMl > XML > JSON) making : / parsing :
Google JSON(GSON) 을 쓰면 쉽게 JSON 형태로 만들 수 있다.
GSON은 데이터를 JSON 형식으로 바꿔주기 위한 좋은 라이브러리이다.
모바일 데이터를 위해서 JSON형식으로 나오기만 하면 되므로 toString()를 재정의해서 사용해도 무방하다.
하지만, GSON을 이용하면 매우 편리하기 때문에 GSON을 사용을 권장한다.
[ProductTest.java]
public class ProductTest { public ProductTest() { public static void main(String[] args) {
|
[ProductListResult.java]
public class ProductListResult { @Override
|
● 서블릿(Servlet)
JSP는 Servlet이다. (99.9% 맞는 말) Servlet이 JSP보다 먼저 나옴.
서블릿이란 "server" + "applet"의 합성어. 말 그대로 서버에서 실행되는 프로그램을 의미.
클라이언트의 요청에 따라 서버에서는 서블릿을 실행하고 그 결과를 클라이언트에게 전송하는 방식으로 동작.
URL 주소 치고 들어오면 무조건 get 방식이다 → post 방식으로도 쉽게 테스트 해보기 위해서 Postman을 사용
※ 서블릿은 응용프로그램이므로 WebContent/WEB-INF/web.xml에 추가해줘야 한다.
[web.xml]
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="true" version="3.1">
|
[HelloServlet.java]
@WebServlet("/HelloServlet") /** /**
|
※ 한글께짐 해결 방법: response.setContentType("text/html;charset=utf-8");
*서블릿의 라이프 사이클(Life-cycle)
- 서블릿 클래스는 클라이언트에 의해 바로 호출되는 것이 아니라, 일단 서블릿 클래스로부터 서블릿 객체가 만들어지고(create),
그 객체가 웹 컨테이너에 의해 초기화(initialize) 된 다음 호출된다.
init → service → doGet → destory
[init는 최초 한번만 호출 됨]
첫번째 - [서블릿 생성] → [init] → [service] → get / post 방식에 따라서 [doGet / doPost] 호출 됨
두번째 - [service] → get / post 방식에 따라서 [doGet / doPost] 호출 됨
이제 더이상 사용되지 않을때 ... - [destory] 호출 → 소멸
서블릿은 한개만 생성된다. 동시접속이 발생하면 서비스가 쓰레드로 여러개 생성됨
※ Eclipse Shortcut key
- ctrl + shift + o : 자동 임포트
- alt + shift + s : getter/setter, constructor
- syso + ctrl + spacebar : 자동 완성
- ctrl + mouse-right : 링크
※ Error
1) 404
- 페이지 없음 / 찾을 수 없음
2) nullPointException
- null이 넘어 갔을 때 나는 오류, 이부분을 예외 처리해야 하는데 try..catch 하지말고 if로 하는게 성능상 더 좋다.
if (langs != null) {
...
}
else {
...
}
※ Link
[Tomcat]
http://tomcat.apache.org
[Eclipse]
www.eclipse.org
[JSON]
[GSON]
https://code.google.com/p/google-gson/
https://github.com/google/gson
[Postman]
'My Trace > T아카데미' 카테고리의 다른 글
[T아카데미] 모바일 서버 프로그래밍 기본 - 5일차 (0) | 2016.07.01 |
---|---|
[T아카데미] 모바일 서버 프로그래밍 기본 - 4일차 (0) | 2016.06.30 |
[T아카데미] 모바일 서버 프로그래밍 기본 - 3일차 (0) | 2016.06.29 |
[T아카데미] 모바일 서버 프로그래밍 기본 - 2일차 (0) | 2016.06.28 |
[T아카데미] 모바일 서버 프로그래밍 기본 과정 합격! (0) | 2016.06.26 |