[SPRING]게시판 만들기

Date:     Updated:

카테고리:

태그:

[22] 게시판 만들기 - URI, JSON, REST API 등

22.1. URI 정의

  URI HTTP메서드  
읽기 /board/read?bno=번호 GET 지정된 번호의 게시물을 보여줌
삭제 /board/remove POST 게시물 삭제
쓰기 /board/write
/board/write
GET
POST
게시물 작성 화면 보여줌
작성한 게시물 저장
수정 /board/modify?bno=번호
/board/modify
GET
POST
게시물 수정하기 위해 읽어옴
수정된 게시물 저장

22.2. log4j

  • 개요
    • 로그 기능을 제공하는 오픈 소스 라이브러리
    • 웹 사이트에 접속한 사용자 정보나 각 클래스의 메서드 호출 시각 등 여러가지 정보를 로그로 출력해서 관리한다.
    • 메이븐에서 프로젝트 생성 시 자동으로 log4j 라이브러리가 설치된다.
  • 태그
    • <apeender></apeender>
      • 로그의 출력 위치를 결정 (콘솔, 파일)함
      • XXXAppender로 끝나는 클래스들의 이름을 보면 출력 위치를 알 수 있음
        • ConsoleAppender : 콘솔에 로그 메시지 출력
        • FileAppender : 파일에 로그 메시지를 출력
        • DailyRollingAppender : 설정한 기간 단위로 새 파일을 만들어 로그 메시지를 기록
    • <layout></layout>
      • 어떤 형식으로 출력할지 출력 레이아웃을 결정한다.
      • PatternLayout 클래스에서 사용되는 출력 속성들
        • %p : debug, info, error, fatal 등 로그 레벨 이름 출력
        • %m : 로그 메시지 출력
        • %d : 로깅 이벤트 발생 시각 출력
        • %F : 로깅이 발생한 프로그램 파일 이름 출력
        • %L : 로깅이 발생한 caller의 라인 수 출력
    • <logger></logger>
      • 로깅 메시지를 appender에 전달한다.
      • 로그 레벨을 이용해 출력여부를 조정할 수 있다.
      • 여러 가지 로그 레벨들
        • FATAL : 시스템 차원에서 심각한 문제가 발생해 애플리케이션 작동 불가능한 경우에 해당하는 레벨
        • ERROR : 실행 중 문제가 발생한 상태를 나타냄
        • WARN : 향후 시스템 오류의 원인이 될 수 있는 경고 메시지를 나타냄.
        • INFO : 로그인, 상태 변경과 같은 운영과 관련된 정보 메시지를 나타냄.
        • DEBUG : 개발 시 디버깅 용도로 사용한 메시지를 나타냄.
        • TRACE : DEBUG 레벨보다 상세한 로깅 정보를 출력하기 위해 도입된 레벨임.

22.3. JSON

  • JavaScript Object Notation
  • 자바스크립트 객체 표기법
    1) {속성명1 : 속성값1, 속성명2 : 속성값2}
    2) [{속성명1 : 속성값1, ... }, {속성명1 : 속성값1, ... }, ... ]                   //객체배열
    3) {키1 : {속성명1 : 속성값1, ... }, 키2 : {속성명1 : 속성값1, ... }, ... }       //Map
    

    23.4. stringify()와 parse()

  • JS객체를 서버로 전송하려면, 직렬화(문자열로 변환)가 필요하다.
    • JSON.stringify()
    • 객체를 JSON 문자열로 변환 (직렬화, JS객체 => 문자열)
  • 서버가 보낸 데이터(JSON 문자열)을 객체로 변환 (역직렬화, 문자열 => JS객체)
    • JSON.parse()
    • JSON 문자열을 객체로 변환 (역직렬화, 문자열 => JS객체)
{name: "codifi", age: 30}                          '{"name" : "codifi", "age":30}'
-------------------------      JSON.stringify()    ------------------------------      
        JS객체               -------------------->              String
                             <--------------------              
                                  JSON.parse()

22.5. JackSON Databind

  • 문자열을 자바객체로 변환해준다.
  • 자바 컨트롤러가 데이터를 받을 수 있다.

22.6. AjaX

  • Asynchronous javascript and XML
  • 요즘은 JSON을 주로 사용한다.
  • 비동기 통신으로 데이터를 주고 받기 위한 기술이다.
  • 웹 페이지 전체(data + UI)가 아닌 일부(data)만 업데이트 가능하다.
  • jQuery Ajax 사용 형식
    $.ajax({
    type: 'post' 또는 'get'
    url: 요청할 URL
    headers :
    dataType : 서버에서 전송받을 데이터타입
    data : 서버로 전송할 데이터
    success : { 정상 요청, 응답  처리 }
    error : { 오류 발생  처리 }
    commplete : { 작업 완료  처리 }
    })
    

22.7. REST

  • 웹 서비스 디자인 아키텍쳐 접근 방식
  • 프로토콜에 독립적이며, 주로 HTTP를 이용해서 구현
  • 리소스 중심의 API 디자인
  • HTTP 메서드로 수행할 작업을 정의

  • |리소스|POST|GET|PUT|DELETE| |:–:|:–|:–|:–|:–| |/customers|새 고객 만들기|모든 고객 검색|고객대량 업데이트|모든 고객 제거| |/customers/1|ERROR|고객1에 대한 세부정보검색|고객1이 있는 경우 세부 정보 업데이트|고객1 정보 제거| |/customers/1/order|고객1에 대한 새 주문 만들기|고객1에 대한 모든주문검색|고객1의 주문에 대한 대량 업데이트|고객1 주문 제거|

22.8. REST API

  • REST 규약을 준수하는 API
  • 작업 URI HTTP메서드  
    읽기 /board/read?bno=번호 GET 지정된 번호의 글을 보여줌
    쓰기 /board/write POST 작성한 게시물을 저장
    삭제 /board/remove POST 게시물을 삭제
    수정 /board/modify POST 수정된 게시물을 저장
    작업 URI HTTP메서드  
    읽기 /comments GET 모든 댓글을 보여줌
    읽기 /comments/{cno} GET 지정된 번호의 댓글을 보여줌
    쓰기 /comments/ POST 새로운 댓글을 저장
    삭제 /comments/{cno} DELETE 지정된 번호의 댓글을 삭제
    수정 /comments/{cno} PUT/PATCH 지정된 번호의 수정된 댓글을 저장

22.9. 댓글 기능 구현 순서

  • DB 테이블 생성
  • Mapper XML 작성
  • DAO 작성 (& 테스트)
  • Service 작성 (& 테스트)
  • 컨트롤러 작성 (& 테스트)
  • 뷰(UI) 작성

SPRING 카테고리 내 다른 글 보러가기

댓글 남기기