본문 바로가기

spring

AOP 설정을 root-context 와 servlet-context 에 했을 때의 차이점 AOP 설정을 root-context 와 servlet-context 에 했을 때의 차이점 AOP 적용을 위해 구현한 Advice 를 component-scan 을 통해 불러와야 한다. component-scan 은 root-context 와 servlet-context 에 할 수 있는데, 위 두 context 간 계층이 존재하기 때문에 설정시 주의해야 한다. 1. root-context 에서 scan 하여 추가된 component 는 servlet-context 에서 scan 하여 추가된 component 를 사용할 수 있다. 2. 반대로 servlet-context 에서 추가된 component 는 root-context 에서 추가된 component 를 사용할 수 없다. 따라서 아래와 같은 상황에서.. 더보기
[Spring] 현재 HttpServletRequest 가져오기 현재 HttpServletRequest 가져오기 Service나 Dao단에서 현재 요청된 HttpServletRequest 가져오기 RequestContextListener 설정 web.xml org.springframework.web.context.request.RequestContextListener 현재 HttpServletRequest 객체 가져오는 함수public static HttpServletRequest getCurrentRequest() {ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); HttpServletRequest servletRequest .. 더보기
[Spring] @ResponseBody 리턴시 Timestamp 깨짐 현상 @ResponseBody 리턴시 Timestamp 깨짐 현상 Spring MVC에서 리턴 타입 앞에 @ResponseBody를 명시할 경우 사용되는 Jackson 라이브러리는 Oracle의 DATE 타입의 데이터를 수용하는 java.sql.Timestamp 타입을 정상적으로 변환하지 못하여 View에서 값이 비정상적으로 출력되는 현상. 해결 방법으로는 커스터마이징된 ObjectMapper상속 클래스를 구현하고 DispatcherServlet에 등록하면 View에서 값이 정상적으로 출력된다고 한다. CustomObjectMapper.javaimport java.text.SimpleDateFormat;import org.codehaus.jackson.map.ObjectMapper;import org.code.. 더보기
[Spring] @RequestParam @RequestParam @RequestParam은 HTTP Request 파라미터를 받을 수 있는 어노테이션으로 파라메터와 변수명을 일치 시킨면 자동으로 값이 1:1 매핑 된다. public String selectBoard(@RequestParam("board_no") String board_id) { } RequestParam은 default로 반드시 값이 존재해야 하도록 설정되어 있다. 이 설정은 required 옵션으로 필수 값에서 제외 시킬 수 있다.public String selectBoard(@RequestParam(value="board_no", required=false) String board_id) { } defaultValue 로 기본값을 지정할 수 있다.public String .. 더보기
[Spring] @RequestBody @RequestBody POST, PUT 등 body를 읽어와야 하는경우 BufferedReader를 이용하여 받아와야 하지만,스프링에서는 @RequestBody를 이용하여 받아올 수 있다. 이 애노테이션이 붙은 파라미터에는 HTTP 요청의 본문 body 부분이 그대로 전달된다. AnnotationMethodHandlerAdapter에는 HttpMessageConverter 타입의 메시지 변환기message converter가 여러 개 등록되어 있다. @RequestBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어 타입과 파라미터의 타입을 먼저 확인한다.(servlet-context.xml 에서 태그 내에 선언하는 에서 확인). 메시지 변환기 중에서 해당 미디어 타입과 파라미터 타입을 처리할 수 .. 더보기
[Spring] @PathVariable @PathVariable Spring으로 REST API를 구현하면서 알게되었다.@PathVariable은 스프링3 부터 지원되는 기능이라고 한다. @RequestMapping의 URL에 {}로 들어가는 패스 변수(Path Variable)를 받는다.기본적으로 user_id가 seongilman이라는 사용자를 조회할 때 아래처럼 작성을 한다. 기본적인 GET 방식http://url/user?user_id=seongilman @RequestMapping(value = "/user", method = RequestMethod.GET)public ResultVO getUserInfo(HttpServletRequest request, HttpServletResponse response){String user_i.. 더보기
[Spring] @PathVariable 사용시 주의점 @PathVariable 사용시 주의점 현재 프로젝트에서 Spring REST API 형식을 사용하고 있다. 아직 @PathVariable에 관한 오류는 나지 않지만 돌아다니다 보니 사용시 주의점에 관한 글이 있어서 얼른 수정했다. 내용은 일반적으로 @PathVariable 사용시 (나도 이렇게 사용중) @RequestMapping(value = "/user/{user_id}", method = RequestMethod.GET)public ResultVO getUserInfo(@PathVariable String user_id){...return resultVO;}우선은 위의 코드처럼 사용시 오류없이 잘 실행이 되지만컴파일러 옵션을 변경한 상태에서 컴파일&실행을 하게되면 오류가 난다고 한다. 오류 내용은.. 더보기
[Spring] Spring + MyBatis(iBatis) + MySQL(Oracle) 연동 Spring + MyBatis(iBatis) + MySQL 연동 Spring jdbc, MySQL Connector Maven dependencySpring JDBC Libraryorg.springframeworkspring-jdbc3.2.3.RELEASE MySQL Connector Librarymysqlmysql-connector-java5.1.25 Oracle Connector Library com.oracleojdbc1410.2.0.4.0 오라클의 경우 빨간줄 에러가 나면 상단에 아래와 같이 명시mesir-repohttp://mesir.googlecode.com/svn/trunk/mavenrepo MyBatis Maven dependencyorg.mybatismybatis3.2.2 org.myba.. 더보기
[Spring] 스프링 트랜잭션 적용하기 (Spring + MyBatis + MySQL) AOP를 이용한 Transaction 적용 (Spring + MyBatis + MySQL) 스프링 트랜잭션은 설정 파일이나 Annotation을 이용해서 트랜잭션의 범위, 롤백 규칙 등을 정의한다. 태그를 이용한 트랜잭션 처리@Transaction Annotation을 이용한 트랜잭션 설정 나는 AOP를 이용한 트랜잭션을 적용하였는데, 먼저 확인해봐야 할 것은인터페이스 코드 유무 확인 스프링의 트랜잭션 AOP는 기본적으로 서비스 계층의 Interface를 JDK Dynamic Proxy 기술을 이용하여 AOP를 지원한다고 한다. 하지만 Interface가 없다면 CGLib를 이용하여 클래스 Proxy를 생성해야 한다고 한다. aspectj dependencyorg.aspectjaspectjweaver1... 더보기
[Spring] @ResponseBody와 jackson을 이용하여 JSON 사용하기 @ResponseBody와 jackson을 이용하여 JSON 사용하기 @ResponseBoady란?메서드에 @ResponseBody Annotation이 되어 있으면 return되는 값은 View를 통해서출력되는 것이 아니라 HTTP Response Body에 직접쓰여지게 된다. MessageConverter의 종류- StringHttpMessageConverter- FormHttpMessageConverter - ByteArrayMessageConverter- MarshallingHttpMessageConverter- MappingJacksonHttpMessageConverter내가 사용할건 MappingJacksonHttpMessageConverter 다. 다른건 나중에 알아봐야지.. jackson .. 더보기
[Spring] 어노테이션 Component-scan 분리하기 어노테이션 Component-scan 분리하기 어노테이션이 적용된 class(@Controller, @Service, @Repository 를 포함한 class)를 로딩 base-package로 부터 스캔을 할 때 Controller 타입은 제외 시킨다.제외 시키는 이유는 spring mvc에 관련된 설정 파일은 dispatcher-servlet.xml 에서 스캔 하기 때문이다. application-context.xml scoped-proxy 는 아래의 3가지를 지정할 수 있다.no : default, proxy를 생성하지 않는다.interface : JDK Dynamic Proxy를 이용한 Proxy 생성targetClass : CGLIB(code generator library)를 이용한 Proxy.. 더보기
[Spring] 게시판 페이징 게시판 페이징 여러 페이징 방법들이 있는 것 같다. query SELECT COUNT(*) CNT FROM NOTICE_BOARD WHERE USE_YN = 'Y' ORDER BY SEQ DESC SELECT *FROM (SELECT ROWNUM AS RNUM, A.* FROM (SELECT SEQ, ACCOUNTID, NAME, TITLE, CONTENTS, IMAGE_PATH, IMAGE_NAME, ATTACH_PATH, ATTACH_NAME, VIEWCOUNT, CREATE_DATE, USE_YN, UPDATE_ACCOUNTID, UPDATE_DATA FROM NOTICE_BOARD WHERE USE_YN = 'Y' ORDER BY SEQ DESC ) A ) BWHERE B.RNUM BETWEEN .. 더보기