반응형

web

    Tomcat에서 war 사이에 session 공유

    회사 프로젝트에서 같은 톰캣 컨테이너를 사용하는 war 애플리케이션 사이에 session을 공유해야 하는 경우가 있었다. 한참을 구글링하던 도중에 사용방법에 대해 알게 되었고, 나중에 사용하기 위해서 정리해보았다. [설정방법] 1. context.xml 수정 -> 각 war에 위치한 context.xml에 crossContext와 rootPath를 적어준다. 1234 WEB-INF/web.xmlcs 2. tomcat의 server.xml의 Connector에 emptySessionPath 속성을 추가한다.1cs 3. 공유할 세션의 속성 지정12// wedulPos war의 세션 속성 설정request.getSession().getServletContext().setAttribute("id", userId..

    Spring Interceptor와 Filter에서 POST 방식으로 전달된 JSON 데이터 처리하기

    이번 회사 프로젝트에서 진행할 때 parameter값이 아니라 Josn 데이터가 필요할 때가 있었다. 이를 위해서는 HttpServletRequest에서 InputStream으로 데이터를 추출해야한다. 하지만 HttpServletRequest에서 InputStream을 한번 추출하게되면, Controller에서 parameter를 매핑하려고 데이터를 바인딩할 때 다음과 같은 오류가 발생한다. 이는 톰캣에서 막아놓았기 때문이다. [에러내용] 12java.lang.IllegalStateException: getReader() has already been called for this requestorg.springframework.http.converter.HttpMessageNotReadableExcept..

    Java Json Library Jacson Annotation 소개

    restFul API를 만들다 보면, 어떤 항목을 serialize 제외하거나 null인 항목은 제외하거나 하는 작업이 필요로 할 때가 있다. 이를 Jackson 라이브러리의 Annotation을 사용하여 하는 방법을 확인해보자. [Maven 셋팅] 1234567891011 2.9.2 com.fasterxml.jackson.core jackson-databind ${jackson.version} Colored by Color Scriptercs 예제로 사용될 Student Dto 클래스이다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package com.wedul.common.dto; /** *..

    스프링 DispatcherServlet 설정 방법

    DispatcherServlet Spring MVC는 dispatcherServlet을 사용하기 위해서는 web.xml에 정의를 해주었어야 했다. 하지만 web.xml에 설정하지 않고도 다른 Java 파일로 설정할 수 있는 방법이 있다. 기존의 web.xml에 설정방식은 다음과 같다. 12345678910111213141516 dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/dispatcher-config.xml 1 dispatcher /Colored by Color Scriptercs XML에 정의한 서블릿 설명은 다음과 같다. 1. 이름은 dispatcher 이다. 2. o..

    Spring Context 종류 및 특성

    Spring Context 종류 및 특성 Spring 프로젝트를 처음 생성할 시 root-context.xml과 servlet-contex.xml 두 개가 생성됩니다. 이 두개가 각각 하는일이 지정되어 있는데 무심코 사용하는 경우가 많습니다. 이 둘의 차이점에 대해서 설명하겠습니다. spring은 multi context 환경을 제공해주는데 기본적으로는 root context와 servlet context로 구분됩니다. 1. servlet-context web application의 client의 요청을 받기 위한 entry point 입니다. 따라서 해당 context의 설정에는 요청에 대한 처리를 해줄 controller의 매핑설정(handler mapping)과 요청처리 후 view처리를 어떻게 할..

    Spring Rest Client Feign 소개

    Feign는 넷플릭스에서 개발된 HTTP 클라이언트다. Feign은 HTTP API 클라이언트를 간단하게 제공한다. Feign을 사용하기 위해서는 인터페이스를 선언하고, 어노테이션화 하면 이를 런타임에서 실제 구현을 제공된다. Feign 라이브러리 추가 - feign-okhttp는 request를 만들기 위해서 내부적으로 Square OkHttp 클라이언트를 사용하기 위해 사용 - feign-gson은 JSON 처리기로서 Google Gson을 사용하기 위해 로드 - feign-slf4j는 request들을 로깅하기 위해서 라이브러리 사용 123456789101112131415 io.github.openfeign feign-okhttp 9.3.1 io.github.openfeign feign-gson 9..

    스프링 CacheManager Ehcache

    스프링에는 데이터를 캐시로 보관할 수 있는 캐시 기능을 제공한다. 그 중 대표적으로 사용되는 Ehcache(ehcache-spring-annotation)에 대해 알아보자. 이를 사용하는 가장 대표적인 이유는 다음과 같다. 1. 꾸준하게 동일한 데이터 2. 조회하여 데이터를 가지고 오는데 비용이 많이 소모되는 경우 [설정방법] pom.xml 123456net.sf.ehcacheehcache2.10.4Colored by Color Scriptercs applicationContext.xml 수정 applicationContext-cache.xml 추가 1234567891011121314151617181920212223 Colored by Color Scriptercs Ehcache 설정 파일 생성12345..

    /과 /*의 차이점을 포함한 url-mapping 정리

    web.xml에서 servlet-mapping 설정 시 url-pattern을 설정하는 것에 대해 정확한 정리가 되어 있지 않아서 정리해보았다. [url-pattern별 의미] 1. "/"로 시작하고 "/*"로 끝나는 패턴은 path로 인식 -> /wedul/list, /wedul/user 등 모든 URL 패턴을 매칭 2. "*."으로 시작하는 경우 확장자 매칭 -> 과거 확장자 *.do 또는 *.ajax와 같은 패턴 매칭 3. "/"만 정의한 경우 디폴트 서블릿 의미 -> default servlet은 servlet mapping에 걸리지 않은 나머지 매핑요소들을 처리한다. 4. 그 외의 경우는 정확하게 일치하는 매칭 /* Dispathcher servlet을 /*으로 했을때의 문제/*으로 매핑하였을 ..

    Spring 비동기 프로세스 Callable, DeferredResult, SseEmitter

    Callable Spring MVC 3.2는 Servlet 3를 기반으로한 비동기 요청 프로세스를 공개했다. 이 프로세스는 보통 값을 바로 반환하는 것 대신에 컨트롤러는 java.util.concurrent.Callable를 먼저 반환하고, Spring에서 관리하는 별도의 Thread에서 값을 반환한다. 위의 과정을 진행하는 동안 주요 Servlet Container Thread는 해당 요청에서 벗어나서 다른 Request를 받을 수 있게 벗어난다. 그리고 Spring MVC는 TaskExecutor의 도음으로 각각에 Thread에서 Callable 작업을 실행한다. 그리고 Callable 작업이 종료된 후 Callable 객체를 반환한다. 그럼 다시 요청이 Servlet container로 돌아가게 되..

    Mabatis #, $ 차이점

    Mabatis 사용 시 #, $의 차이점을 정확하게 정리하지 않아 헷갈렸다. [차이점] 1. select * from member where id = #{dto.id} 2. select * from member where id = ${dto.id} 1번 방식(#)은 select * from member where id = ? 다음과 같이 진행되어 바인딩 되어 실행되기 때문에 SQL Injection 대비가 가능하다. 2번 방식($)은 ${dto.id} 영역에 데이터로 값을 치환해서 텍스트 자체로 사용한다.

반응형