본문 바로가기
반응형

Development/Java72

[Spring Security]간단 Spring Security Spring Security 를 적용하는 내용을 처음부터 차근차근 정리를 해보려고 한다. 목표는 Spring Security 를 공부하면서 각각의 기능들을 적용해보는것이다. 진행하다보면 Spring Security 뿐만 아니라 다른 내용들도 점점 추가될것 같다. 다 만들고 나서는 git에 소스를 공유할 생각이다. ^^;; 언제가 될지는 잘 모르겠다. 환경 : java 1.8, Spring Boot 1.5.3 Release, Maria DB, JPA, gradle build.gradle12345678910111213141516171819202122232425262728293031323334buildscript { ext { springBootVersion = '1.5.3.RELEASE' } reposito.. 2017. 6. 27.
[Spring]Controller Test 하기 테스트케이스를 만들어서 작업을 하면 소스코드가 수정될 경우 코드를 테스트 해보기가 참 수월하다. 그런데 이 테스트 케이스 작성하는게 생각보다 만만치는 않다. 실제 DB 를 읽어서 테스트를 해야 하는지. 아니면 Mock 객체를 정의를 해서 사용을 해야 하는지. 실제 DB 를 사용할 경우 저장된 data 가 변경이 되어서 구현했을 당시 테스트 케이스는 Pass였지만 나중에 빌드 시점에 테스트 케이스가 실행될 경우에 Fail 이 나면 어떻게 할것인지. 생각해보면 그냥 서비스 구현해서 화면 띄우고 버튼 눌러서 테스트 하는것이 더 편할지도 모른다는 생각이 들기도 한다. 작성할 때마나 서비스 테스트, repository테스트, 컨트롤러 테스트에 대해서 구글링 하면서 작성을 하다보니 뭔가 남는게 없는것 같아서 샘플을.. 2017. 6. 12.
[Spring]Jasypt 를 이용한 properties 암호화 프로젝트 내부에는 설정파일들이 많이 있다. 대표적인 항목이 DB 접속 정보가 있다. 그런데 이 접속정보에는 ID, PASSWORD 가 항상 존재 한다. ID는 상관이 없지만 PASSWORD 정보가 파일 내부에 평문으로 적혀있으면 외부에 노출될 위험이 있다. 그래서 암호화를 해야 한다. Jasypt를 이용하면 이런 항목들을 쉽게 암호화 할 수 있다. 먼저 라이브러리를 다운로드 받는다. http://www.jasypt.org/download.html 사이트에 들어가보면 상단에 DOWNLOAD JASYPT 라는 링크가 있다. 그 걸 누르면 라이브러리를 다운로드 받을 수 있다. 이 글을 쓰는 시점의 버전은 1.9.2 이다. 다운로드 한다음 사용 방법은 간단하다. 압축을 푼후에 bin 폴더로 이동한다. 그리고 콘.. 2017. 4. 25.
[SpringCloud]Spring Config.. myapplication 이라는 이름을 가지고 있고 sample 이라는 profile을 설정했을경우 우선순위는 다음과 같다. 1. myapplication-sample.yml2. myapplication.yml3. myapplication.properties 2016. 1. 26.
spring Cache @Cacheable캐시할 메서드를 지정한다. 위 어노테이션을 사용한 메서드는 결과를 캐시에 저장하기 때문에 뒤이은 호출에서는 실제로 메서드를 실행하지 않고 캐시에 저장된 값을 반환한다. @CachePut메서드 실행에 영향을 주지 않고 캐시를 갱신해야 하는 경우.메서드를 항상 실행하고 그 결과를 캐시에 보관 한다. @CacheEvict캐시에 데이터를 제거하는 트리거로 동작하는 메서드 이다. 2015. 12. 5.
Spring propagation MANDATORYSupport a current transaction, throw an exception if none exists.시작된 트랜잭션이 있으면 support, 없으면 예외 발생 NESTEDExecute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else.시작된 트랜잭션이 있으면 중첩해서 트랜잭션을 실행한다. NEVERExecute non-transactionally, throw an exception if a transaction exists.트랜잭션이 있으면 예외 발생 NOT_SUPPORTEDExecute non-transactionally, suspend the .. 2015. 12. 1.
[JPA]Persistence Context Persistence Context 특징- 1차 캐시- 동일성 보장- 트랜잭션을 지원하는 쓰기 지연 (transaction write-behind)- 변경감지(dirty checking)- 지연로딩 조회- 조회시에 1차캐시에서 식별자 값으로 entity 조회. 없으면 DB에서 조회 등록- persist 를 실행하면 1차 캐시에 저장 되고 transaction writer-behind에 쿼리를 저장해둔다.- commit 시점에 transaction writer-behind에 있는 쿼리를 실행함. 수정 - 1차 캐시에 Entity가 저장될 시점에 최초상태의 스냅샷을 같이 저장한다. - transaction writer-behind 에서 flush 시점에 스냅샷과 entity를 비교해서 변경된 entity를 .. 2015. 8. 25.
[JPA]Entity 생명주기 1. new/transient : persistence context와 무관2. managed : persistence context에 저장된 상태3. detached : persistence context에 저장되었다가 분리된 상태4. removed : 삭제된 상태 2015. 8. 12.
Mybatis 동적쿼리 사용시 NuberFormatException:For input String 해결방법 Mybatis에서 동적 쿼리 사용시 아래와 같이 비교구문을 작성하게 되면 NuberFormatException이 발생한다. 이유는 'Y'를 문자열이 아닌 문자(Char)형태로 인식해서 숫자로 인식하기 때문이다. -_-; 해결방법은 아래 처럼 표기해주면 된다. 1. 쌍따옴표와 홑따옴표 위치 변경2. 쌍따옴표를 HTML 코드로 변경 3. toString() 함수를 사용해서 String형으로 변환 2014. 10. 30.
util.Date vs sql.Date 차이 쓰다보면 별 생각없이 사용했던 Date 클래스. 심지어 util.Date 인지 sql.Date인지도 생각도 안하고 썼는데.. (있는지도 잘 몰랐네 -_-) 그런데 이런 차이점이 있었다.. 일단 sql 패키지의 Date 클래스는 java.util.Date 클래스를 상속 받는다. 그런데.. 문제는 이게 값을 가져올때이다. 오버라이딩한 toString을 찾아보면 public String toString () { int year = super.getYear() + 1900; int month = super.getMonth() + 1; int day = super.getDate(); char buf[] = "2000-00-00".toCharArray(); buf[0] = Character.forDigit(year.. 2014. 7. 1.
JSP 용량초과? 65535 bytes limit 개발을 하다가 갑자기 특정 페이지에 들어가는데 이클립스 로그창에 이런 메세지가 나오더니 페이지 에러가 났다. -_-;The code of method _jspService(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) is exceeding the 65535 bytes limit 구글링을 해보니 JVM의 Method Size 는 64K로 제한이 된다고 글들이 써있었다.일단 해결 방법은 서버에 있는 web.xml에 아래와 같이 설정해주면 된다. jsp org.apache.jasper.servlet.JspServlet mappedfile false JVM spec : Limitations of the Java Vi.. 2013. 11. 21.
Reflection 활용한 값 비교 가끔 DB에 입력할 값하고 기존에 있던 값하고 비교해야 할 상황이 생긴다. 그럴때마다 객체에 있는 수많은 getter 메소드를 소스 코드에 써줘야 한다면 코드가 참 지저분할것 같다. 그래서 사용한 방법이 Reflection 이다. Class에 있는 정보를 읽어와서 실제로 메소드까지 실행 가능하니.. 라인수를 확 줄일 수 있다. ^^import java.lang.reflect.Method;public class ReflectionTest { public static void main(String[] args) throws Exception { // DB에 입력하려는 DATA TestVO test = new TestVO(); test.setId("test"); test.setName("kim"); test... 2013. 11. 13.
728x90
반응형