1. @RequestBody - : 요청 메시지의 Body에 포함되어 있는 순수한 데이터( XML, JSON)를 끄집어 내어, Rest 컨트롤러의 헨들러 메소드의 매개변수에 넣어주는 역할을 수행 2. Interceptor - Spring Interceptor Class는 반드시 HandlerInterceptor Interface를 implements 해야 된다. [ 1. ResponseEntity ] (****) [ + 테스트 ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.controller; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.spri..
1. Restful 방식의 서비스 개발 - 1 ) 최종 목적 - : MVC 패턴에서 View는 수행하지 않고, 순수한 데이터( JSON, XML )를 응답으로 제공 - 2 ) @RestController 어노테이션을 사용하여 컨트롤을 개발한다. - 3 ) HTTP method - : GET, POST 외의 여러가지의 추가적인 전송방식을 활용한다. - 4 ) Request Mapping - : C ( Create ) -> PUT - : R ( Read ) -> GET - : U ( Update ) -> POST - : D ( Delete ) -> DELETE - : URI ( URI 자체가 비즈니스 적인 의미를 가진다. ) - Ex. 게시물 삭제요청 [ DELETE, /board/bno/77 ] - Ex...
1. 페이징 처리에 필요한 3가지 - 1 ) 현재 페이지 번호 ( currPage ) - 2 ) 한 페이지의 게시물 개수 ( amount ) - 3 ) 페이지 번호 목록의 길이 ( pagesPerPage ) [ 1. 게시판 - 페이징 처리 ] [ 1 - 1. 페이징 처리에 필요한 기준 정보를 지닌 클래스 생성 - domain ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.domain; import lombok.Data; @Data //+ 페이징 처리를 위한 2가지 기준 정보를 가지는 클래스 public class Criteria { // + 현재 페이지 번호 private int currPage = 1; // + 한 페이지에 보여지는 양 private int amount= ..
[ 1. Oracle 힌트 ] 더보기 [ + 코드 보기 ] -- 테이블의 구조 확인 DESC tbl_board; -- ============================================== -- 오라클 힌트 : -- + 문법 : /*+ Oracle_Hint */ -- + ex : /*+ index_desc(테이블 인덱스명) */ -- + ex : /*+ index_desc(테이블) */ -- + ex : /*+ index_desc(tbl_board SYS_C0035593) */ -- + ex : /*+ index_asc(테이블 인덱스명) */ -- + ex : /*+ index_asc(테이블) */ -- + ex : /*+ index(테이블 인덱스명) */ -- + ex : /*+ index..
[ 1 . MockMVC ] (*****) 더보기 [ + 코드 보기 ] package org.zerock.myapp.controller; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.L..
[ 1. 게시판 만들기 - 비지니스 계층 만들기 : Service ] [ + Mapper은 전 게시물의 mapper을 그대로 사용하였습니다. ] [ 1 - 1. Service Interface 만들기 ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.service; import java.util.List; import org.zerock.myapp.domain.BoardVO; import org.zerock.myapp.exception.ServiceException; // + 롬복은 인터페이스에서 사용이 불가능하다. // + 비지니스 로직은 Service에서 구현되어야 한다. public interface BoardService { // + 1. 게시파 전체 목록을 조회하여 리..
[ 1. 게시판 만들기 - 영속성 계층 ] (*****) [ 1 - 1. VO 클래스 만들기 ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.domain; import lombok.Value; @Value public class BoardVO { private Integer bno; private String title; private String content; private String writer; } // end class [ 1 - 2. CRUD 기능을 할 Mapper만들기 ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.mapper; import java.util.List; import org.apache.ibatis.annotation..
[ 1. ROWNUM / ROW_NUMBER ] (*) [ 2. TOP-N Query ( 상위 N개의 행을 출력하는 쿼리 ) ] (***) 더보기 [ + 코드 보기 ] -- ---------------------------------------------- -- 1. Top-N Query ( 상위 N개만 추출하는 쿼리 ) -- ---------------------------------------------- -- + 우리가 1 페이지에 10개 씩만 보여주게 하려고 할 때, -- + 상위 10개씩 끊어야 하는데, 이때 사용한다. -- ---------------------------------------------- -- ----------------------------------------------..
[ 1. Controller에서 발생하는 예외 처리하기 ] [ 1 - 1. Controller에서 예외 발생하기 ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.controller; import java.sql.SQLException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import lombok.NoArgsConstructor; import lombok.extern.log4j.Log4j2; @Log4j2 @NoArgsConstructor @RequestMapping("/sample3/") // 기본 URI ( b..
1. Spring MVC에서 파일 업로드에 필요한 것 - 1 ) 파일 업로드 처리용 라이브러리 설정 ( pom.xml – dependency ) - 2 ) 스프링 설정 파일에서 Multipart Request를 핸들링 할 수 있는 Bean 설정 ( Servlet-context.xml ) - + spring-webmvc sub framework가 빈 클래스를 제공해 준다. - + 이를 빈으로 등록하면, 이 Bean이 Multipart 처리를 위해 commons-fileupload 라이브러리를 이용한다. 2. 파일 업로드시 UUID를 사용하는 이유 - 1 ) 업로드된 파일을 저장할 시, 원본 파일명으로 저장해서는 안된다. (***) - + 불특정 다수가 파일 업로드를 수행가능하기에, 원본 파일명이 동일하게 ..