분류 전체보기35 2) Spring Boot Validation - Custom Annotation Annotation을 만들어서 서버에 요청받았을때 유효성 검증을 하고 원하는 메세지를 줄 수 있도록 해보자. 다음은 Pattern Annocation 을 이용하여 원하는 패턴의 정규식만 검증하도록 만든 Annotation 이다. 이름에 대한 유효성 검증으로서 2~15문자수의 한글이나 영문만 가능하도록 적용한 예제이다. 다음과 같이 필드에 적용하여 테스트 해볼 수 있다. 유효하지 않은 요청을 하게 되면 다음과 같이 에러메세지를 준다 ..! 에러메세지의 파라미터들은 필요에따라서 커스텀마이징을 하면 된다.(아래 1번 링크 참조) Pattern이 아니라 직접 구현해서 검증하고 싶다면 @Constraint(validatedBy = {NameValidator.class} ) Annodation 를 사용하고 Cons.. 2019. 12. 2. Spring Boot POST Encoding EUC-KR 한글깨짐(UTF-8)현상 지인이 결제모듈을 붙이는 과정에서 EUC-KR로 응답요청을 받아서 아무리 인코딩 설정을 해도 한글이 깨져서 나온다며 구글링해도 해결되지 않아 도움을 요청했다. 어떻게 처리해야할까? 기본적으로 Spring Boot 에서는 Encoding Filter 가 UTF-8로 기본 설정이 된다. 그렇기 때문에 Controller 에서 요청 파라미터를 받았을때 이미 한글이 깨진형태로 나오기때문에 복구할 수가 없는것으로 보인다. 필자의 해결책은 이렇다. 특정 URL만 UTF-8이 아닌 EUC-KR로 바꿔 사용해야 하기때문에 특정 URL에만 동작하는 필터를 하나더 추가한다. 이렇게 추가하게 되면 필터에 등록되어 매핑된 URL이 들어올때 거치게 된다. 필터 체인 막바지 부분에 EUC-KR 인코딩으로 설정되어 파라미터가 잘 .. 2019. 11. 18. Spring Data JPA 에서 getOne 과 findById 차이점 Spring Data JPA에서 getOne과 findById의 차이점은 무엇일까? 기본 데이터 저장소에서 개체를 검색하는 데 findById()및 getOne()메서드가 모두 사용된다. 그러나 레코드를 검색하는 기본 메커니즘은이 두 메소드에서 서로 다르다. 실제로 getOne ()은 데이터베이스에 충돌하지 않는 Lazy 조작이다. getOne () 메소드 getOne ()은 주어진 식별자를 가진 엔티티에 대한 참조를 반환한다. getOne은 내부적으로 EntityManager.getReference () 메소드를 호출한다. 문서에 따라 이 메소드는 데이터베이스에 충돌하지 않고 항상 프록시를 반환한다. (Lazy지연으로 가져온) 요청 된 엔티티가 데이터베이스에 존재하지 않으면이 메소드는 실제 액세스시 E.. 2019. 10. 25. Spring data jpa Lazy N+1 query / querydsl join 적용하기 일반적으로 불필요하게 리소스를 낭비를 하지 않기 위해 N : 1 or 1: N 관계에 LAZY로 설정합니다. 이에 대한 예시로 Member Entitiy 와 Group Entity로 나누었고, 서로 양방으로 참조하고 있다고 가정하겠습니다. 여기서 Member의 테이블명은 cmember로 하였습니다. 새로 설치한 mysql 버전(8.0.17)에서 member테이블이 예약어로 잡혀있었기 때문에 ..ㅜ) https://dev.mysql.com/doc/refman/8.0/en/keywords.html 보면 8.0.17 부터 예약어가 추가된것을 알수 있습니다. 여기서 간단하게 두개의 테이블을 inner join 하여 select 하는 메소드를 만들었습니다. 다음은 테스트 할 데이터를 넣기 위해 만든 메소드 입니다.. 2019. 10. 12. Spring Data MongoDB Document (Proxy)객체 저장 후 로드 시 에러 발생 session에 document를 레디스를 통해 저장했다가 다른 WAS에서 세션을 로드시 cglib proxy 객체 때문에 다시 로드하지 못하는 이슈를 해결하기 위해 찾아보면서 방법들을 정리해본다. 1. 데이터를 전달해야될경우 시리얼라이즈 하기 위해 DTO에 매핑한다. 2. dbref 어노테이션으로 lazy loading을 했을 경우 해당 필드는 LazyLoadingProxy에 캐스팅할수 있다. //target db ref field if (object instanceof LazyLoadingProxy) { LazyLoadingProxy proxy = (LazyLoadingProxy)object; target = proxy.getTarget(); } 3. spring cglib proxy객체를 생성한것이.. 2019. 8. 14. JPA Lazy Loading 개발환경 : Hibernate 5.3.7 , Spring Data JPA 2.1.5 @ManyToOne, @OneToOne FetchType=LAZY로 설정시 전체 Entitiy를 entitiyManager.find 호출할때 프록시 객체(Hibernate Proxy)가 생성되며 대상필드를 접근할때(get호출) 데이터 조회한다. 이때 데이터베이스를 조회해 실제 엔티티를 생성하는 것을 프록시 객체의 초기화라고 한다. 실제 데이터를 얻기 위해 getName()을 호출했을시 영속성 컨텍스트는 데이터베이스를 조회해서 실제 엔티티 객체를 생성하고, 해당 객체의 참조를 target 변수에 보관한다. 프록시 객체는 target 변수에 저장된 실제 엔티티 객체의 getName()을 호출해서 결과를 반환한다. 1. Mem.. 2019. 8. 6. 이전 1 2 3 4 5 6 다음