java 30

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

Java의 UnsupportedOperationException (feat array, List)

개발을 하던 와중에 Arrays의 asList를 이용해서 리스트를 선언과 초기화를 해준 뒤 다음 이후에 리스트를 추가하거나 삭제하려고 했더니 UnsupportedOperationException이 발생했다. 에러 메세지만 보면 내가 작성한 코드가 지원할 수 없다는 내용인데, 이유를 찾아보니 Arrays.asList는 배열을 리스트로 그냥 덮어씌운상태(래핑)로 변경되고, 변경된 상태의 데이터들은 배열을 이용하고 있고 asList자체가 타겟으로 들어온 배열의 길이를 고정된 값으로 리턴하기 때문에, add나 remove를 사용할 수 없다는 것 같다. 다만 set을 이용하면 데이터 교체는 가능하다. 결론적으로 asList를 이용해서 내가 원하는 결과(List로 리턴받아 add, remove)를 수행하려면 다음과..

JAVA 2021.12.08

Java 클래스의 변수명 가져오기

오늘은 Java Class에서 변수명, 어노테이션의 정보를 가져오는 방법을 정리해보려고 한다. 해당내용은 내가 작업하면서 사용했던 내용은 아니지만, 동료 직원이 고민했던 문제를 같이 고민하면서 찾게 되었기에 정리해본다. 대략 아래와 같은 클래스가 있을떄(보통 모델이나 뷰오브젝트 클래스) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //Lombok을 이용하여 Getter, Setter를 생략 @Getter @Setter public class TestClass { private Long id; private Integer seq; private String name; private String address; private String type; private Doubl..

JAVA 2021.11.23

Java 실수형 자료 계산하기

백준문제들을 풀다보면, 실수로 결과 값이 나오고 특정 소수점자리에서 반올림하는 문제들이 종종 있는데, 회사에서 개발을 할 때는 안정적인 BigDecimal 자료형을 이용해서 계산했는데(보통 회사에서 무언가를 계산하는 경우에는 정확한 값이 필요하기때문에 필수적으로 BigDecimal을 이용해야함) BigDecimal을 이용하면 속도가 느리다는 소리를 들은 것 같아서 알고리즘 문제를 풀때는 Double이나 Float을 이용하게 된다. (찾아보니 BigDecimal은 함수를 이용하여 계산하기 때문에 더 느리다고한다. / Number클래스를 상속받은 자식 클래스니까..) 여튼 문제에서는 결과 값을 소수점 셋째자리에서 반올림한 결과를 출력하라 였는데, 나는 떠올랐던 생각이 Math.round를 이용하는 것 이였기..

JAVA 2021.06.08

Java를 처음부터 다시 살펴본 후기

한 달 전 인프런에 Java 인강이 무료로 풀렸길래, 이 기회에 처음부터 다시 보는 것도 괜찮을 것 같아서 처음부터 다시 살펴보았는데, 처음 자바를 배울때에는 생각하지 제대로 이해하지 못했던 개념들(상속, 인터페이스, 추상메서드)를 이번 기회에 이해할 수 있게되었다. 강의를 듣다보니 실무를 하면서 어떻게하면 효율적이고, 객체지향적으로 짤 수 있을까라는 고민을 할 수 있게되는 기회였던 것 같다. 강의 내용이 짧아서 조금 부족한 부분들은 구글을 통해 검색하거나, API문서를 보면서 학습했는데 이 부분도 도움이 되었던 것 같다. 실제로 Java를 사용하여 개발을 하고 있어도 Java인강을 다시 들어보는 것도 좋은 것 같다. 아래는 이번에 Java 인강을 들으면서 정리했던 내용을 기록했던 github주소이다. ..

JAVA 2021.05.21

IntelliJ(인텔리제이) & 이클립스 유용한 단축키

지금까지 인텔리제이를 계속 사용해오고 있지만, 인텔리제이에 대한 강의나 설명같은건 듣지 않고 대략적으로 아는기능만 사용했었는데 최근에 인프런에서 인텔리제이 입문 가이드 인터넷강의 영상을 구매해서 보게되어 알게된 단축키들을 정리해보려고 한다. 일단 나는 인텔리제이 기본 설정키를 사용하는게 아닌 이클립스 버전으로 변경해서 사용하는데 그 이유는 보통 팀단위로 개발을 하게되는데, 사용하는 IDE가 다를경우 생길 수 있는 문제들 떄문이다(라이브러리 import나 환경설정, 코딩 인벤션 등) 현 회사에서는 인텔리제이를 사용해도 문제가 없어서 사용하고 있지만, 다른 회사에서는 문제가 있을수도 있기때문에 이클립스 단축키에도 익숙해지기 위해 이클립스 단축키로 사용하고 있다. * 설치의 경우 직접설치하는 것 보다 Inte..

OTHERS 2021.04.01

JAVA의 Optional 정리 (Java 8 기준)

오늘은 Java의 Optional에 대해서 정리해보려고 한다. Optional class는 Java 8 부터 도입된 클래스로 공식 API 설명에 따르면 "null이 아닌 값을 포함하거나 포함하지 않을 수있는 컨테이너 객체" 라고 한다. 마이바티스나 아이바티스를 쓴다거나 Java 8버전 이하로 개발을 한다면 익숙해지기 어려운 개념인 것 같은데, 나의 경우는 회사에서 JPA를 사용하고 있고, Spring JPA의 JpaRepository의 findOne, findById.. 등의 결과 값이 Optional로 돌아오기 때문에 익숙해질 수 밖에없다. 여기서는 내가 주로 사용하는 Optional의 메소드만 코드로 정리 할 예정이고, 이외의 메소드는 아래표나 공식 문서를 참조하는 것이 좋을 것 같다. (아래 표도 ..

JAVA 2021.03.22

Eescape된 HTML 태그를 JAVA에서 Unescape

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

JAVA 2021.03.03

Stream.filter()을 이용해 하나의 원소만 리턴받기

오늘은 stream클래스의 filter 메소드를 사용하고 있던중, 필터링 되어 리턴되는 결과값이 한 개만 되도록 하고싶을떄 사용할 수 있는 방법을 정리하려고 한다. 본 내용은 글로써 서술하는 것보다 코드를 보며 정리하는게 좋을것같아 바로 코드를 보려고한다. 코드는 다음과같다. 123456789101112131415161718192021222324252627282930/* Member이라는 테이블(Entity)가 존재하고 모든 Member의 리스트중에서 유니크한 값을 이용해 필터링하는 상황을 가정 class 중략..*/ public testMethod(Long id) { List members = memberRepo.findAll(); Member resultMember = new Member(); // ..

JAVA 2021.01.26

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

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

SPRING FRAMEWORK 2021.01.15