Skip to content

Instantly share code, notes, and snippets.

@dlxotn216
dlxotn216 / Auditing.md
Last active April 26, 2024 07:48
Spring data jpa의 Audit 기능과 Spring data envers

Application을 구현하면서 대부분 요구사항에 명시되는 기능이 변경사항 추적이다. 이때 변경 사항을 추적하기 위해 필요한 데이터는 누가 언제 생성하였으며, 누가 언제 변경하였는지 그리고 해당 데이터의 시점에 따른 변경 이력이다.

전통적인 Mybatis를 이용하는 Spring MVC와 같은 프레임워크에선 AOP를 이용한다던지 또는 Mapper에서 Insert, Update, Delete 쿼리를 실행할 때마다 History table에 Insert하는 쿼리를 같이 실행 하도록 처리하는 등의 방법이 있다. 이러한 방법을 사용할 때 생각보다 개발 일정을 지연시키는 요소가 많다.

예를들어 History 테이블의 PK를 잘못 지정하여 발생하는 예외나 DBMS마다 상이한 다량의 쿼리문 실행 문법 등이다. 전자는 개발 단계보다 UAT 기간 등에서 발견하기 쉬울 뿐더러 모든 대상 테이블을 돌면서 Schema를 변경해야 하는 번거로움이 있다.

@dlxotn216
dlxotn216 / gist:cb9fe1e40c7961da9d7147d9ebc876d6
Last active May 26, 2023 07:10
Spring 다국어(i18n) 지원을 위한 Locale Resolver 설정

1. 다국어 프로젝트를 마주하며

처음 다국어 프로젝트를 진행했을 때 요구사항은 아래와 같았다.

  • 다국어 값에 대한 관리는 DB로 진행 할 수 있도록 할 것.

  • 기존 솔루션의 경우 properties 파일을 통해 다국어를 관리했는데 번역이 잘못된 부분이 있을 때마다 다시 릴리즈를 해야 했고 운영중인 서비스에 다국어로 인한 재배포는 부담이 있다고 한다.

  • 서비스 중 다국어로 인해 오류가 나는 일이 없도록 할 것.

  • 기존 솔루션에 다국어 처리 중 새로운 언어 셋이나 새로이추가 된 다국어 값이 있을 때 문제가 많았기 때문

@dlxotn216
dlxotn216 / gist:e233adfb8b8ca43f3ac2405401d9ef39
Last active May 4, 2018 15:32
jQuery 브라우저 뒤로가기 예제 코드

$(document).ready(function($) {
	initPage();
});

/**
 * Page init script
 */
function initPage(){
	if (window.history && window.history.pushState) {
@dlxotn216
dlxotn216 / gist:dcbda379eec4b785a1670edd70441bfb
Last active May 4, 2018 15:41
CommonsMultipartResolver와 StandardServletMultipartResolver의 설정값 파헤치기

ComonsMultipartResolver를 사용할 때 아래설정을 넣을 수 있다

- 한 요청 당 최대 업로드 크기

maxUploadSize : default -1 (no limit)

- 파일 당 최대 업로드 크기

maxUploadSizePerFile     : default -1 (no limit)

- 디스크에 저장하지 않고 메모리에 유지하도록 허용하는 최대 크기

maxInMemorySize : default 10240

@dlxotn216
dlxotn216 / gist:18622dd08ee430f0cb9610fb0e60c5ba
Last active January 3, 2020 03:42
CommonsMultipartResolver와 StandardServletMultipartResolver

1. 사건의 발단

Spring 4.0.4 기반 프로젝트 진행 중 multipart/form-data 형태로 전송할 때 파일 외의 파라미터의 인코딩이 깨지는 현상 발생 WAS: JBoss 6.2, Spring: 4.0.4, Spring Security ACL 사용 중

한글, 중국어, 일본어가 깨지는 것을 확인 후 테스트 중 아래 코드로 정상 처리 됨을 확인했다.

String decodedToUTF8 = new String(encodedWithISO88591.getBytes("ISO-8859-1"), "UTF-8");

JSP 시절 request.setcharacterencoding( utf-8 )으로 처리 하지 않았을 때 해결 법으로 기억하여 Spring Security의 필터가 CharacterEncodingFilter를 방해하는 것인가 판단하였으나