이 세가지의 공통점 - 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이다 1. Filter 서블릿 단위에서 실행된다 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있다 스프링 시큐리티에서 서블릿의 DeligatingFilterProxy가 실행되어 FilterChainPorxy에게 요청을 인가하는 것이 필터의 사용 예이다 자원의 처리가 끝난 후 에 응답내용에 대해서도 변경하는 처리를 할 수 있따 실행 메소드에는 inti(), doFilter(), destroy() 가 있다 2. Interceptor 요청에 대한 작업 전/후로 가로채어 실행된다 필터와 달리 스프링의 Disp..
스프링 시큐리티 기초 1. 스프링 시큐리티란 ? 스프링 기반의 어플리케이션의 보안(인증과 인가)을 담당하는 프레임워크 filter 기반으로 동작하므로 spring MVC와 분리되어 관리 및 동작 2. 스프링 시큐리티 주요 용어 Principal(접근 주체): 보호된 대상에 접근하는 유저 Authentication(인증): 현재 유저가 누구인지 확인하는 과정 Autherize(인가): 인증된 유저가 어떤 서비스 또는 페이지에 접근할 수 있는 권한이 있는지 검사 권한: 인증된 주체가 애플리케이션의 동작을 수행할 수 있도록 허락되었는지를 결정 스프링 시큐리티 아키텍처 정리 브라우저에서 로그인 요청이 서블릿 컨테이너로 들어온다 서블릿 필터의 DeligatingFilterProxy 필터가 스프링 빈의 이름을 참조..
Web Server Apache, nginx 정적인 콘텐츠 (html, .css, image)를 제공하는 서버 브라우저에서 요청이 들어오면 웹서버가 요청을 보고 정적컨텐츠인지 동적컨텐츠인지 확인 후 동적컨텐츠라면 WAS로 정적컨텐츠라면 웹 서버에서 직접 응답을 한다 WAS가 있는데 Web Server를 앞에 두어 사용하는 이유는 웹 서버에서 정적인 콘텐츠만을 처리하도록 기능을 분배하여 서버의 부담을 줄이거나, 뒤에 애플리케이션을 두어 보안을 강화하거나 Gateway를 위해 사용되기도 한다. CGI(Common GateWay Interface) 사용자의 폼(입력 데이터)와 요청 url에 따라 동적으로 변하는 페이지를 처리하기 위한 인터페이스 서버와 응용프로그램간에 데이터를 주고받기 위한 방법 (웹서버와 w..
Spring MVC 클라이언트 요청이 들어오면 ViewResolver를 통해 클라이언트에게 text/html 타입의 view 응답을 보낸다. RESTful 클라이언트의 요청이 들어오면 MessageConverter를 통해 application/json이나 text/plain 등 알맞은 형태로 리턴한다. 차이점 : 기존 MVC는 DispatcherServlet을 거쳐 view를 응답하지만 RESTful은 DispatcherServlet을 거치지 않고 json 형식의 데이터를 응답한다.
상속 관계 JpaRepository > PagingAndSortingRepository > CrudRepository PagingAndSortingRepository 는 페이징 처리를 위한 메소드를 제공해준다 아래의 코드는 PagingAndSortingRepository 인터페이스의 내부 구조이다 @NoRepositoryBean public interface PagingAndSortingRepository extends CrudRepository { /** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options */ Iterable findAll(S..
테스트 코드 작성 중 에러발생 cannot deserialize from Object value 가 핵심 에러인 듯하여 찾아보니 Object Mapper로 매핑이 안되었던 것 같아 확인해 본 결과 *)자바의 객체를 json으로 변환하는 작업을 serialize(직렬화), json을 자바의 객체로 변환하는걸 deserialize(역직렬화)라고 한다. 첫번째 오류, 기본 생성자를 만들지 않았다 ,,,, Json를 객체에 파싱할 때 객체의 프로퍼티 정보를 알기 위해서는 객체 생성을 위한 기본 생성자(접근 제한자 무관)가 반드시 존재해야 하고, Getter/Setter/Field 중에 접근 제한자가 위 조건을 만족하는 것이 하나라도 있어야 한다. (Dto에서 Builder 패턴 사용할 때 AllArgsConst..
1. @webMvcTest 를 사용한 스프링 부트 테스트 @RunWith(SpringRunner.class) @WebMvcTest(controllers = HelloController.class) public class HelloControllerTest { @Autowired private MockMvc mockMvc; @Test public void hello() throws Exception { String hello = "hello"; mockMvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(content().string(hello)); } } @RunWith(SpringRunner.class)는 스프링부트 테스트와 Junit 사..
스프링 프로젝트를 진행하며 문든 둘의 차이가 무엇인지 궁금해서 찾아보았다 별거 아닌 내용이지만 나는 몰랐으니까 ㅎㅂㅎ 정리해야겠다!! 1. @RequestParam - 파라메터의 값과 이름을 함께 전달하는 방식으로 게시판 등에서 페이지 및 검색 정보를 함께 전달하는 방식을 사용할 때 많이 사용한다. controller layer에서의 사용법 @GetMapping("/comments") @ResponseStatus(HttpStatus.OK) public GetCommentsResponse getComments( @RequestHeader String accessToken, @RequestParam(required = false, defaultValue = "0", "page") int currentPage..