Spring - 36. RESTful

갓김치·2021년 1월 8일
0

JSP+Spring

목록 보기
39/43

게시판 리팩토링

BoardServiceImpl

BoardRetrieveController

  • return이 void인 경우도 있음
  • coc에 의해 논리적뷰네임이 생략되어있으면 주소에서 뷰네임을 찾음
    • 이것에 의해RequestToViewNameTranslator

Insert

매핑오류잡기


Errors말고 BindingResult도 쓸수있음

Delete

		if(message!=null) RedirectAttributes.addFlashAttribute("message", message); // 세션 알아서 지워줌

세션알아서지워줌

리플라이

REST

  • https://www.restapitutorial.com/lessons/restquicktips.html
  • HTTP 프로토콜의 구조를 잘 써먹자가 base
  • 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반
    • request line의 정보를 잘 써먹자
  • /board/boardInsert.do
    • 로이필딩이 말하는 URL/URI/URN이 자원식별표기방법이라면 정말 자원식별방법만 넣고 행위를 표현하지말자는거
    • 근데 우리는 INSERT라는 행위를 적고있음
    • Line의 메서드(get,post,put,delete)만 잘 식별하면 굳이 url 안에 행위정보 넣지않아도됨

기존 게시판 uri들을 restful uri로 바꾼다면

  • 조회 get
    • 목록 /board
      • 데이터로만 내보내면 됨, ui로 만들고 자시고 할필요없음
    • 상세조회 /board/133
      • @RequestMapping("{bo_no}") 경로변수: 경로의 일부분 데이터
  • 등록 post
    • /board
  • 수정 put
    • /board/133
  • 삭제 delete
    • /board 게시글전체날리기
    • /board/133

문제점

  • 기존 프로젝트를 전부바꾸기에는 바꿀설정이많음
  • 기본적으로 모든 브라우저들이 put, delete를 지원하지않음

reply 리팩토링

  • 오류고쳐야겠다



Spring, mybatis연동

  • 연동 모듈 필요
  • spring-orm, mapper-scanner(3점대이후부터필요)를 가지고 오기위해 mybatis-spring

Configuration.xml을 spring 설정으로 옮기기

  • properties, environments ㅂㅂㅇ

트랜잭션관리


이게없어서 classnotfoundexcep 뜸

aop 맛보기

  • oop만으로는 중복제거가 어려운 상황이 있음

주의

  • transactional때 쓰이는 aop기반기술중하나가 인터페이스 중심의 프록시생성
  • 근데 그렇게 설정된 인터페이스를 받아올때 @Resource(type=ProdServiceImpl.class)이렇게 받아오면 터짐



Spring, JUnit연동

  • 어노테이션 사용해서..잘해봐

순서

1. pom.xml

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
			<scope>test</scope> <!-- src/test 에서만 사용가능 -->
		</dependency>

2. MemberDAOImplTest

@RunWith,
@CustomWebApp

  • 하이어라키
  • web용으로 만들어주기
    @Transaction: 실db 반영 x

이클립스 설정추가하기

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; // 가짜 request
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; // matcher
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; // print

이거 매번 넣기 귀찮으니까
preferences - favorites 에 static import 넣엊귀
new type - browse- 해서 위의 3개 추가

mock mvc

mockito

테스트 프레임워크
트랜잭션관리안해도됨 목객체이용해서 하는 테스트라 알아서 db커밋이 안되나봄??




방명록

--계층형 답글 구조를 갖고 있는 방명록 구현.
--참고 : https://impresident.tistory.com/guestbook

--방명록 기본 CRUD (RESTful URI 방식으로 구현, 데이터는 json 형태로 표현함.)
--전체 방명록 조회 : /guestBook, GET (페이징 처리)
--방명록 작성 : /guestBook, POST
--방명록 수정 : /guestBook, PUT
--방명록 삭제 : /guestBook, DELETE
--방명록 답글 : /guestBook/상위방명록번호, /POST
--
--모든 기능은 하나의 view layer 내에서 비동기로 처리됨.

CREATE TABLE GUESTBOOK(
   GB_NO NUMBER(6), -- 방명록 번호
   GB_WRITER VARCHAR2(30) NOT NULL, -- 방명록 작성자
   GB_PASS VARCHAR2(300) NOT NULL, -- 인증용 비밀번호
   GB_IP VARCHAR2(40) NOT NULL, -- 작성자 IP 
   GB_CONTENT VARCHAR2(200), -- 방명글
   GB_PARENT NUMBER(6), -- 상위방명록번호
   GB_DEPTH NUMBER(1) DEFAULT 1, -- 방명록답글의 깊이(루트글:1 부터 답글이 추가될시 깊이가 증가함. 답글 깊이 제한에 사용.)
       GB_DATE DATE DEFAULT SYSDATE, -- 작성일
   GB_PROFILE BLOB, -- 작성자 프로필 이미지
   GB_SECRET CHAR(1),
   CONSTRAINT PK_GUESTBOOK PRIMARY KEY(GB_NO)
);

ALTER TABLE GUESTBOOK 
ADD CONSTRAINTS FK_GB_GB 
    FOREIGN KEY  (GB_PARENT) REFERENCES GUESTBOOK(GB_NO);
    
    
SELECT 'private '||
       DECODE( DATA_TYPE , 'NUMBER' ,'Integer ', 'String ' )||
       LOWER(COLUMN_NAME)||';'
  FROM COLS
 WHERE TABLE_NAME = 'GUESTBOOK';    

미션

  • aop 수업 전 프로그래밍언어 변천사를 보고오는게 좋다
    • 절차지향방법론 pop -> 함수지향방법론 fop -> 객체지향방법론 oop
    • 변천사가 왜 이렇게 되었는지?
  • 인터페이스를 기반으로 proxy를 생성하는 기술
  • 방명록 완성
  • 알바생관리 스프링
profile
갈 길이 멀다

0개의 댓글