css 파일 로드시 


브라우저에서 다음과 같은 오류가 출력되는 경우가 있다.


Uncaught SyntaxError: Invalid or unexpected token



이 때 가장 의심해 볼 수 있는 부분은 css 파일 로드시


<script src=""> 

다음과 같은 방식으로 로드했는지 의심해 보아야 한다.


css 파일은 자바스크립트 파일이 아니기 때문에 로드시 문법 오류를 유발 할 수 있다. 


그래서 css 파일로드시 다음과 같이 로드하여야 한다.


<link href=""  rel="stylesheet" type="text/css" /> 

REST 구성

구성 요소
표현방법
내용
Resource
HTTP URI
자원을 정의
Verb
HTTP Method
자원에 대한 행위를 정의
Representations
HTTP Message Pay Load
자원에 대한 행위의 내용을 정의

ex)
Resource : /wedul/member
Verb : HTTP POST
Representations : 
{
   "id" : "wedul"
}

REST 특성

1. 유니폼 인터페이스
-> HTTP 표준만 따르면 어떠한 기술이든 사용가능 (HTTP/JSON, HTTP XML)

2. 무상태성 (STATELESS)

3. 캐시 가능
-> 웹 캐시, CD을 이용한 캐싱 가능

4. 자체 표현 구조 (SELF-DESCRIPTIVENESS)
-> API 내용만 보고도 별도의 문서 없이도 쉽게 이해가 가능하다.


REST 설계 패턴

- API URL만 보고도 무슨 API인지 쉽게 직간적으로
- URL을 길게 만들지 말고 2 depth 수준 까지만 
  > /dogs/
  > /dogs/uki
- 대상은 명사가 되야한다.
ex) getDogs (X), /dogs/ (O)
- 단수보다는 복수형을 사용
/dog (X), /dogs (O)

HTTP Response code
- 총 70개있는 것 중에 권장하는 Response code 사용
> 200 : 성공
> 400 : Bad Request - Field validation 실패
> 401 : 인증, 인가 실패
> 404 : 해당 리소스 찾을 수 없음
> 500 : Internal Error - 서버에러

에러처리
-> 상세 내용은 HTTP body에 표현해 주어야 한다.
-> Error Stack이 노출되지 않도록 조심해야한다.
{
  "error" : 200,
  "message" : "massage sending failed",
  "detail" : "Id Logouted"
}



API 인증방식
1. API 키 방식
-> API 호출할때, API KEY를 보내는 방식 
-> 키가 한번 뚫리면 문제가 발생

2. API 토큰 방식
-> ID, PASSWORD를 사용하여 일정 기간 유효한 API 토큰을 리턴하고, 매 호출마다 토큰 사용
2.1) HTTP BASIC AUTH
  => ID, PASSWORD를 직접 보낸다.
 2.2) DIGEST ACCESS AUTHENTICATION
  => 패스워드를 네트워크를 통해서 보내지 않고, 클라이언트와 서버에서 공통적인 키를 이용해서 패스
  워드에 대한 해쉬를 생성하고 이를 비교하는 방식 (프로젝트에서 경험해 봄)

3. 사용자 인증 방식
 1.1) 3자 인증 방식
  => 계정 정보를 다른 서비스가 가지고 진행
 1.2) 클라이언트 인증
  => 서비스가 여러 클라이언트에 의해 사용될때, 클라이언트별 접근 토큰을 발급하여 인증을 강화



100번대 : 현재 데이터의 처리 중인 상태

  • 100: 데이터의 일부를 서버가 받은 상태

 

200번대 : 정상적인 응답

  • 200 : 에러가 없이 정상 처리
  • 204 : 정상 처리되었으나 서버에서 보내줄 데이터가 없음

 

300번대 : 다를 URL 처리

  • 301 : 요청된 페이지가 URL 변경되었음
  • 304 : 이미 기존의 데이터와 변경된 것이 없음

 

400번대 : 서버에서 인식할 없음

  • 400 : 전송된 Request 문제가 있어서 서버가 인식할 없음
  • 403 : 서버에서 허락되지 않음
  • 404 : URL 해당하는 자원이 없음
  • 406 : 전송 방식이 허락되지 않음(Rest에서 자주 발생)

500번대 : 서버 내부의 문제

  • 500 : 서버에서 처리 문제가 발생
  • 502 : 게이트웨이나 프록시 상태의 문제(과부하 )
  • 503 : 일시적인 과부하나 서비스 중단 상태
  • 504 : 지정된 처리시간이 지나서 처리되지 못함


Comet

 

기존의 지속적인 갱신을 위해서는 Polling이라고 불리는 일정 간격으로 서버에 요청을 보내서 바뀐 내용을 조회하는 방식이였지만 이 방식을 리얼타임 수준으로 갱신하려면 간격을 줄여야 해서 불편하였다.

 


반면

Ajax Push라고도 불리는 Comet은 Long Polling 과 Streaming 방식 두 가지를 제공한다.

1)     Long Polling

클라이언트가 요청을 보내면 서버에서 이벤트가 발생할 때까지 응답을 하지 않고 가지고 있다가 이벤트가 발생하면 응답을 하고 다시 클라이언트에서 요청이오면 응답을 하는 구조로 되어있다.

2)     Streaming

요청을 최초의 한번 보내면 Chunk데이터를 통해서 이벤트가 있을 때마다 계속 클라이언트에 데이터를 보내준다.

서블릿(Servlet)은 자바 플랫폼에서 컴포턴트를 기반으로 한 웹 애플리케이션을 개발할 때 사용하는 핵심 기술이다. 


무엇보다 서블릿이 중요한 이유는 JSP가 바로 서블릿을 기반으로 한 기술이기 때문이다.


JSP가 등장한 가장 큰 이유는 서블릿이 가진 HTML 표현상의 문제를 해결 하기 위함이었다.

- 서블릿은 프로그램 내에서 HTML을 처리하기 때문에 간단한 태그를 변경할때 조찿 컴파일해야하는 문제가 있다.

- 그러나 JSP와 서블릿은 서로간의 상호 보완적인 관계이다. 


서블릿의 장점


- 스레드를 기반으로 하므로 웹 애플리케이션 운영에 효율적이다.

- 자바를 기반으로하는 자바 API를 모두 사용이 가능하다.

- 자바는 바이트 코드로 구성된 가상모신으로 돌리기 때문에 운영체제나 하드웨어에 영향을 받지 않고 한번 개발된 애플리케이션은 다양한 서버환경에서도 실행이 가능하다.

- 웹 확장이 가능하다.

- JSP 페이지에 HTML CSS 자바스크립트와 자바 소스 코드가 뒤섞이는 스파게티 소스를 막을 수 있다.

- JSP는 텍스트 파일 구조인데 비해 서블릿은 자바 클래스 구조이다.


사용방법

서블릿 프로그램을 작성하고 실행하려면 먼저 Servlet APO를 빌드 경로에 추가해야한다.

추가하는 방법은 해당 프로젝트에서 우측 클릭후

properties -> Java Build PAth -> Libraris 탭 -> Add External Jars 에 톰캣 설치 디렉토리의 common/lib 폴더에 있는 servlet-api.jar에 추가하면 된다.



- 서블릿에서 추가하는 serialVersionUID는 자바에서 클래스 상태 정보를 그대로 파일로 저장하는 객체 직력화라는 것이 있다. 이를 이용하면 특정 객체의 멤버 변수의 상태와 메서드를 그대로 파일로 만드는것이 가능하며, 필요할 때 다시 객체화해서 메서드를 이용하거나 멤버를  참조할 수 있게 된다. 이때 해당 클래스에 대한 고유값이 serialVersionUID이고 jdk1.5이후부터는 명시해 주어야 한다.



서블릿 클래스 선언

public class HelloWorldServlet extends HttpServlet{

}



httpservlet 클래스 주요 메서드

- getParameterNames() -> 현재 요청에 포함된 파라미터 이름을 enum 형태로 넘겨준다.

- getParameter(name) -> 문자열 name와 같은 이름을 가진 파라미터 값을 가져온다,

- getParameterValues(name) -> 문자열 name과 같은 이름을 가진 파라미터 값을 배열 형태로 가져온다.

- getCookies() 모든 쿠키 값을 javax.servlet.http.Cookies의 배열 형태로 가져온다.

- getMethod() 현재요청이 GET, POST 인지 가져온다,

- getSession() 현재 세선을 가지고온다.

- getRemoteAddr() 클라이언트의 IP 주소를 알려준다.

- getProtocol() 현재 서버의 프로토콜을 문자열 형태로 알려준다.

- setCharacterEncoding() 현재 JSP로 전달되는 내용을 지정한 캐릭터셋으로 변환해준다.(한글사용시 필요)

- setContentType(type) 문자열 형태의 type에 지정된 MIME Type으로 ContentType을 설정한다.

- sendError(status, msg) 오류코드를 설정하고 메시지를 보낸다.

- sendRedirect(url) 클라이언트 요청을 다른곳으로 보낸다,


출저 : 자바 웹 프로그래밍 - 한빛 미디어

+ Recent posts