1. AOP ( 관점 지향 프로그래밍 ) - AOP = Aspect Oriented Programming ( 관심 지향 프로그래밍 ) - 1 ) Aspect - : 개발할 때의 관심사( 성능 / 속도, 자원사용효율성, 트랜잭션( All or Nothing ), 로깅 ) - : 추상적인 의미이다. - 2 ) Target - : 핵심 비즈니스 로직이 구현된 서비스 객체 ( 비즈니스 계층의 서비스 ) - : @Service( 비즈니스 계층의 서비스 ) -- > 관심사들을 적용할 대상 - 3 ) JoinPoint - : Target 객체가 가지고 있는 메소드들 ( ex. transfer 메소드 - 계좌이체 ) - 4 ) Advice - : 횡단 관심사( Cross-Concern )를 실제로 구현한 객체 ( ex..
1. 자동로그인(Remember-Me)의 처리 결과 1 ) Login 수행시 ( LoginInterceptor ) - 자동로그인 쿠키 생성 - 쿠키의 유효기간(즉, 자동로그인 유효설정기간 의미) 설정 - 응답메시지의 `Set-Cookie` 헤더에 자동로그인 쿠키 설정 - tbl_user 테이블에 자동로그인 쿠키정보 기록 2 ) 웹브라우저를 죽이고 다시 수행시켜 접속하는 경우 ( AuthInterceptor ) - 자동로그인 쿠키를 이용하여, Session Scope 에 인증정보(UserVO) 복원 - 무사통과(로그인 창으로 이동시키지 않고, 요청 처리) 3 ) 명시적인 로그아웃 수행시 ( LogoutInterceptor ) - 자동로그인쿠키(remembermeCookie) 삭제 - tbl_user 테이블..
[ 1. 인터셉터 - 세션 트레킹 ( 로그인 / 로그아웃 / 인증 / 인가 / 자동 로그인 처리 ) ] (******) [ + DTO는 전의 게시물 LoginDTO를 그대로 사용합니다. ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.domain; import lombok.Data; @Data public class LoginDTO { private String userid; private String userpw; // + 참조타입의 기본값은 NULL이다. // + 따라서 체크박스의 check 여부의 기본값은 false로 지정하는 것이 좋다. private Boolean rememberMe = false; } // end class [ + SharedScopeKeys는 공유..
[ 1. 인터셉터 ] [ 1 - 1. 인테셉트 당할 URI 생성 ] 더보기 [ + 코드 보기 ] package org.zerock.myapp.controller; import java.util.Locale; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.we..
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. 게시파 전체 목록을 조회하여 리..