Spring 11

CustomRepository의 PropertyReferenceException

작업하면서 오랜만에 QueryDsl을 사용하기위해 커스텀 레포지토리를 만들어서 작업하는동안 발생한 오류를 정리해보려고 한다. 발생했던 오류메시지의 맨 아랫부분은 아래와 같고, 위쪽도 찬찬히 읽어보니 의존성, 빈생성을 실패했다는 걸 알 수 있었다. 당시 코드 구성은 대략 다음과 같았다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 // 글 내용을 간략하게 위해 한 페이지에 모두 서술 // Spring Data의 JpaRepositor..

SPRING FRAMEWORK 2023.04.28

Eescape된 HTML 태그를 JAVA에서 Unescape

개발을 하던 도중 html태그와 text내용이 섞여있는 데이터를 DB저장 한 뒤 뿌려줄 일이 있었는데, 프론트단에서 보낸 html태그 들이 서비스단을 통과하면서 html 엔티티로 변경되어 저장되는 문제가 발생했다. 본래 서비스단에서 html 엔티티로 변경되는 이유는 보안적인 이슈(XSS) 때문에 변경되게 설정이 잡혀있는 것으로 알고 있었는데, 일단 기능 구현하려는 페이지는 내부적으로 사용하는 페이지였기 때문에 그냥 html 엔티티로 escape 되는 부분을 바꿔줘야 했다. 일단 고민해본 방법으로는 html 엔티티로 바뀌어져 들어오는 부분을 정규식을 이용해서 replace하는 방법이 있었는데, 정규식의 경우 눈에 잘 안들어 오기도하고 모든 html 엔티티에 대한 정규식을 작성하는 것에도 어려움이 있어, 찾..

JAVA 2021.03.03

@Transient 어노테이션 사용해보기

최근 개발을 하던 중 특정 테이블에서 조회를 해올때 외래관계가 없는 테이블에서의 값을 조회한 다음 하나의 객체로 클라이언트단으로 전달해주고 싶은 상황이 생겼다. 그래서 최초 조회를 하는 테이블의 엔티티에 변수를 선언해서 SET을 하면 되겠다라는 생각까진 했으나, 한 가지 문제가 있었다. 엔티티(모델) 클래스 내에 선언되어 있는 변수는 JPA에서 테이블의 컬럼이 된다는 것인데, 어떻게 하면 컬럼으로 처리되지 않고 무시되게 할 수 있을까하며 찾아본 결과 @Transient라는 어노테이션을 찾을 수 있었다. 대충 공식 문서를 찾아보니 @Transient이 선언되어있는 경우 해당변수(메소드)는 임시데이터로 보고 테이블과 매핑을 하지않는다는 것 같다. 이제 코드로보면 나는 다음과 같이 사용했다. 123456789..

SPRING FRAMEWORK 2021.01.15

개발중 발생했던 @Autowired 관련 이슈 정리

여태까지 @Autowired 어노테이션은 의존성을 주입해주는 기능을 하는것으로 알고 있었는데, 최근 백엔드쪽 작업을 하다가 보니 A라는 클래스에서 B라는 클래스 내의 메소드의 기능을 사용하는 부분을 구현해야 했는데, 왜인지 모를 NullpointerException이 발생했었다, 대략 코드는 다음과 같이 작성했었는데, ※ Spring 의존성 주입(Dependency Injection) : 타 객체를 Spring bean을 통해 사용할 수 있게 해주는 것 (필자의 방식대로 한 줄로 정리한 내용이기때문에 그냥 그렇구나 하고 참고만 하기를 권장) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Service @Transactional publi..

SPRING FRAMEWORK 2021.01.07

Spring JPA에서 @Query를 사용하는 방법.

Spirng JPA는 EntityRepository를 이용해 CRUD(생성,조회,수정,삭제)를 쉽게 할 수 있게 지원하지만, 떄떄로 개발을 하다보면 서로 연관관계가 없는 테이블을 조인을 통해 핸들링 해야할일이 꽤나 빈번하게 있다. 위와 같은 상황이 발생할 때 고민해볼만한 방법은 QueryDsl를 이용하거나(이 경우는 DTO가 필요) @Query 어노테션을 이용해 sql문을 작성하는 방법이 있는데, 오늘은 @Query 어노테이션을 이용하는 방법을 아주 간단하게 정리하려고 한다. 딱히 어려운 부분은 없을 것 같아서 코드로 정리하자면 다음과 같다. 12345678910// import 생략// QuerydslPredicateExecutor은 QueryDsl을 사용하기 위해 상속해 둠public interfac..

SPRING FRAMEWORK 2020.09.22

스프링 부트(Spring boot) + 그레들(Gradle) 개발 환경설정

오늘은 스프링부트와 그레들을 이용하는 개발환경을 설정하는 글을 정리하려고 한다. 먼저 환경은 스프링 사이트에서 다운받을 수 있는 Spring Tools를 이용해서 설정할 것이다. (이클립스를 이용해도 상관없음) 먼저 스프링 사이트에 접속해서 스프링 툴 4를 OS에 맞는 것을 설치해준다. (나의 경우 window) Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Stud..

SPRING FRAMEWORK 2020.07.06

HttpResponse와 Unirest를 이용한 외부 데이터 요청

최근 개발하면서 외부 API를 이용해서 데이터를 요청해야할 일이 생기게 되어 HttpResponse와 Unirest를 사용해서 개발을 해보았는데, 오늘은 그 내용을 정리해보려고 한다. 일단, 회사에서 개발한 내용이였고, 기본적인 maven에 dependency설정은 잡혀있는 상태로 개발을 했는데, Spring으로 개발을 하고 maven을 이용해서 프로젝트 관리를 하고있다면 pom.xml에 다음 내용들을 추가해주면 된다. com.mashape.unirest unirest-java 1.4.9 org.apache.httpcomponents httpasyncclient 4.1.3 org.apache.httpcomponents httpmime 4.5.8 org.apache.httpcomponents httpcor..

JAVA 2020.06.17

JPA annotation @DynamicUpdate?

오늘은 테이블에 대한 Entity를 만들 떄 항상 선언해 주었던 @DynamicUpdate에 대해서 정리해본다. 기본적으로 @DynamicUpdate는 Spring JPA에서 제공하는 기능이다. (JPA, Hibernate, Spring JPA가 같은 의미는 아님) 개발을 하면서 @DynamicUpdate 어노테이션이 무슨역할을 하는지도 모른채 대부분의 Entity에 선언해줬었는데, 최근들어 왜 선언해야하는지 궁금증이 생겨서 조금 조사해봤다, 간단하게 정리하면 다음과 같다. JPA는 서버가 실행될 때 CURD에 관한 SQL문을 캐싱해놓는데, 여기서 UPDATE문에 UPDATE 대상이 모든 열로 선언되어 있다는 거다, 컬럼(필드)가 20개라면 20개 컬럼에 대한 업데이트문이 선언되어 있는 것이다. (upd..

SPRING FRAMEWORK 2020.05.07

JPA의 엔티티에서의 카운팅(@Formula)

JPA를 이용해 개발하다보면 모호한 부분이 많은 것 같은데 대표적인게 JPA, Hibernate, Spring JPA인 것 같다. 여기서 정리 할 내용은 아니지만 간단히 설명하면 JPA는 기술명세, Hibernate는 인터페이스, Spring JPA는 Hibernate를 스프링 프레임워크에서 쉽게 사용할 수 있게 모듈화? 해놓은 것이라는데 이게 무슨소린지 아직도 좀 어렵다. 이 이야기를 하는 이유는 오늘 설명한 @Formula는 Hibernate의 기능이기 때문이다. 현재 내가 개발하면서 @Formula를 사용하는 경우는 조건절로 사용하거나, 집계된 데이터가 필요할 때 사용하고 있는데, 이외의 경우에도 사용할 수 있는지는 파악해보고 있다. 먼저 @Formula에 대해서 간단한 설명을 하자면, 데이터베이스..

SPRING FRAMEWORK 2020.05.03

Querydsl에서 DTO를 사용하는 방법

개발을 하고 있는데, 서로 연관 관계가 없는 테이블간에 데이터를 가져와야 할 일이 있었다, 각 Entity들에 @OneToMany나 @ManyToOne 어노테이션을 이용해 데이터를 가져오는 방법도 고려해보았으나, 위 방법은 제일 간단한 방법이였지만, 서로 연관관계도 없는 Entity에 @ManyToOne나 @OneToMany을 이용하는 건 코드품질상, 관리적 측면에서 올바르지 않다고 판단되었다, 따라서 querydsl을 이용해 데이터를 가져오기로 했으나, 막상 코드를짜서 실행해보니, 맨 앞에 선언되어있는 엔티티의 데이터만 가져오고 조인된 나머지 데이터들을 가져오지 못하는 문제가 발생했다. DTO를 이용해 데이터를 받아야겠다는 생각까지는 도달했으나, 당최 JPA서는 DTO를 어떻게 사용해야하는지 감이 안잡..

SPRING FRAMEWORK 2020.03.04