Spring
[SpringCache] 쪼금의 개념 설명과 Caffeine maximumSize 옵션 테스트
DB I/O 트래픽을 고려해야하는 api 개발을 진행하게되었다. 1. 조회는 빈번하지만 2. 업데이트는 빈번하지 않은 조건을 가지고 있었기 때문에 스프링캐시가 적합하다고 생각되어 적용해서 개발하게되었다. 해당 포스팅은 개발을 진행하면서 로컬 캐시인 카페인 캐시의 특정 옵션에 대한 여러가지 테스트를 기록하기위해 작성했다. 1. 스프링캐시가 뭔데? 캐시 처리중에서는 Redis, Memcached 등 추가적인 memoryDB 를 이용하거나 application 레벨에서 사용가능한 EhCache 등이 사용되는데 이 중 application 레벨에서 사용가능한 캐시를 말한다. 스프링 캐시는 스프링의 특징처럼 Cache 기능의 추상화를 지원하고, EhCache, Couchbase, Redis 등의 추가적인 캐시 저..
[40] spring web security를 이용한 로그인 처리 - 로그인과 로그아웃 처리
스프링 시큐리티의 내부 구조는 상당히 복잡하지만 실제 사용은 약간의 설정만으로도 처리가 가능하다 1. 접근 제한 설정 security-context.xml에 아래와 같이 접근 제한을 설정한다. 특정한 URI에 접근할 때 인터셉터를 이용해서 접근을 제한하는 설정은 를 이용한다. 은 pattern이라는 속성과 access라는 속성을 지정해야만 한다. pattern 속성은 말 그대로 URI의 패턴을 의미하고, access의 경우는 권한을 체크한다. 위의 경우 '/sample/member'라는 URI는 'ROLE_MEMBER'라는 권한이 있는 사용자만이 접근할 수 있다. access의 속성값으로 사용되는 문자열은 1) 표현식과 2) 권한명을 의미하는 문자열을 이용할 수 있다. 는 기본 설정이 표현식을 이용하는 ..
[39] spring web security를 이용한 로그인 처리 - spring web security 란?
스프링 시큐리티의 기본 동작 방식은 서블릿의 여러 종류의 필터와 인터셉터를 이용해서 처리된다. 필터는 서블릿에서 말하는 단순한 필터를 의미하고, 인터셉터는 스프링에서 필터와 유사한 역할을 한다. 필터와 인터셉터는 특정한 서블릿이나 컨트롤러의 접근에 관여한다는 점에서는 유사하지만 결정적인 차이를 구분하자면 필터는 스프링과 무관하게 서블릿 자원이고, 인터셉터는 스프링의 빈으로 관리되면서 스프링의 컨텍스트 내에 속한다는 차이이다. 스프링 시큐리티를 이용하게되면 인터셉터와 필터를 이용하면서 별도의 컨텍스트를 생성해서 처리된다. 스프링 시큐리티는 현재 동작하는 스프링 컨텍스트 내에서 동작하기 때문에 이미 컨텍스트에 포함된 여러 빈들을 같이 이용해서 다양한 방식의 인증 처리가 가능하도록 설계할 수 있다. 1. Sp..
[38] 파일 업로드 처리 - 잘못 업로드된 파일 삭제 (Quartz 라이브러리)
Ajax를 이용해서 첨부파일을 사용하면 사용자가 게시물을 등록하거나 수정하기 전에 미리 업로드 시킨 파일들을 볼 수 있다는 장점이 있지만, 다음과 같은 문제를 남긴다. 첨부파일만을 등록하고 게시물을 등록하지 않았을 때의 문제 - 파일은 이미 서버에 업로드되었지만, 게시물을 등록하지 않았으므로 의미 없이 파일들만 서버에 업로드된 상황 게시물을 수정할 때 파일을 삭제했지만 실제로 폴더에서 기존 파일은 삭제되지 않은 문제 - 데이터 베이스에는 기존 파일이 삭제되었지만, 실제 폴더에는 남는 문제 위 상황의 공통적인 문제는 사용자가 Ajax로 어떤 작업을 한 후에 비정상적으로 브라우저를 종료하거나 페이지를 빠져나가는 문제이다. 이 문제를 해결하는 핵심은 정상적으로 사용자의 게시물에 첨부된 파일인지 아니면 사용자가..
[37] 파일 업로드 처리 - 게시물의 수정과 첨부파일
게시물 수정에서 첨부파일은 수정이라는 개념보다는 삭제 후 다시 추가한다는 개념으로 접근해야 한다. 1. 화면에서 첨부파일 수정 게시물의 수정은 views 폴더 내에 /board/modify.jsp에서 이루어진다. 게시물의 수정은 게시물의 조회화면과 유사하지만 1) 원본 이미지 확대나 다운로드 기능이 필요하지 않다는 점. 2) 게시물 조회와 달리 삭제 버튼이 있어야 하는 점이 다르다. 1-1. 첨부파일 데이터 보여주기 modify.jsp 파일에서 페이지가 로딩되면 첨부파일을 가져오는 작업을 먼저 처리한다. 첨부파일을 보여주는 부분의 를 추가하고, get.jps에서 사용한 Files jQuery의 $(document).ready()를 이용해서 첨부파일을 보여주는 작업을 처리한다. $(document).rea..
org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: 해당 위치에 지원되지 않는 SQL92 토큰: 31
스프링에서 delete 작업을 하던 중이었는데 갑자기 500 에러가 떴고... 지원되지 않는 토큰?? 이라 떠서 코드들을 자세히 살펴보니...... 아래와 같이 #{bno}라고 해야하는데 {#bno}라고 되어있었다... 오타좀 내지말자!!! ㅜㅜ