분류 전체보기 8

[Java] Stream 생성하는 방법들

들어가면서오늘은 Stream 생성하는 방법에 대해서 정리하겠습니다.1. 컬렉션(List, Set등)으로 스트림 생성2. 배열로 스트림 생성3. Stream.of, Stream.ofNullable(java 9)로 스트림 생성4. 무한 스트림(iterate)으로 스트림 생성5. 무한 스트림(generate)으로 스트림 생성6. 스트림 빌더로 스트림 생성7. 빈스트림으로 스트림 생성8. Stream 연결로 스트림 생성9. 기본형 특화 스트림(Int, Long, Double)으로 스트림 생성컬렉션(List, Set등)으로 스트림 생성List, Set등 Collection을 상속받은 객체에서 사용할 수 있는 방법입니다.// Collection 인터페이스에 정의됨default Stream stream() { ..

Java 2025.05.06

Querydsl 다중 where 조건 만들기

들어가면서Querydsl의 장점 중 하나는 쿼리를 Java로 쿼리를 만들 수 있다는 것입니다.그래서 where문에 사용되는 다양한 조건을 메서드화하여 조립하여 만들어 가독성도 높아집니다.특정 조건같은 경우는 다양한 조회에서 사용할 수 있기 때문에 재사용성도 높아집니다.사용방법간단하게 User를 조회할 때 이메일과 이름으로 조회하는 경우로 사용법을 작성하겠습니다.// 메서드화하지 않은 버전 이메일 and 이름 조건 User user = queryFactory.selectFrom(user) .where(user.email.eq("test@test.com") ,user.name.eq("홍길동")) ..

DB 2025.04.23

EXISTS 연산자에 대해서(Feat: querydsl)

들어가면서EXISTS 연산자에 대해서 기본인 조건에 존재하는 것이 있으면 'True' 결과 전달한다는 내용만 알고 어떤 상황에서 사용하는지를 정확하게 몰랐다고 생각됩니다.그냥 INNER JOIN이나 OUTER JOIN을 주로 사용해서 exists를 거의 사용하지 않았습니다.최근 쿼리를 개선하다보니 join이 아닌 exists를 사용하여 속도 개선이 많이 발생한 내용을 공유드립니다.exists는 언제 사용해야할까?위에서 적은 것처럼 존재하면 'True'로 반환하기 떄문에 조건에 따라 데이터를 걸러내어 결과를 조회할 때 사용되고 있습니다.사실 IN 연산자를 이용하여 조회해도 동일한 결과를 얻을 수 있지만 서브쿼리 결과가 100개 이상 나올 가능성이 있으면 IN 연산자를 사용할 수 없습니다.IN 연산자가 SE..

DB 2025.04.13

[Spring] Factory Method Pattern 사용하기 (Feat: injecting Collections)

Factory Method Pattern이란?팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 구현체의 인스턴스를 만들지는 구현체 클래스에서 결정하게 만드는 패턴입니다.결합도를 낮추고 캡슐화와 추상화를 통해 유지보수성을 높이기 위해서 사용됩니다.Factory Method Pattern의 역할생성 과정을 캡슐화하여 생성 과정의 변경 사항은 호출자에게 투명성을 가집니다.생성 과정을 재사용할 수 있습니다.복잡한 생성 과정을 캡슐화하므로, 호출자는 객체 생성 방벙을 알 필요가 없습니다.생성 과정과 사용 과정을 분리하여 복잡한 코드를 간결하게 바꿀 수 있습니다.injecting Collections이란?Spring에서 선언됨 Interface에 여러개의 구현체가 있을 경유 List, S..

Spring 2025.03.23

[JPA] 엔티티 값을 변환하여 저장, 조회하기(Feat: @Converter)

어떤 값을 저장할 때 데이터베이스에 저장할 때 원하는 값으로 저장하고 조회할 때도 원하는 값이나 타입으로 반환할 때 사용합니다.예를 들어 개인정보의 암호화하여 저장해야하거나 Boolen 타입일 때 Y, N 값으로 데이터베이스에 저장하는 등 다양한 경우에 사용될 수 있습니다.AttributeConverter란AttributeConverter 클래스는 프로퍼티의 값을 저장하거나 읽을 때 사용할 수 있는 인터페이스입니다.public interface AttributeConverter { // 엔티티의 데이터를 데이터베이스 컬럼에 저장할 데이터로 변환한다. Y convertToDatabaseColumn(X attribute); // 데이터베이스에서 조회한 컬럼 데이터를 엔티티 데이터로 변환한다...

DB 2025.03.10

PDF에 글자가 뒤집혀서 들어가는 이유(Feat: Microsoft Print to PDF)

최근 발생했던 문제에 대해서 회고하기 위해 작성한 글입니다.pdfBox를 이용하여 PDF에 텍스트나 이미지를 넣는 작업을 진행 중이였는데 특정한 파일에서 글자나 이미지가 180도 뒤집혀서 PDF에 입력되는 현상이 발생했습니다.MS Office나 한글파일에서 내보내기나 다른 이름으로 작성으로 만든 PDF는 정상적으로 위치가 맞게 입력되었습니다. 해당 이미지의 PDF 생성자에 "Microsoft Print to PDF" 라고 적혀 있는 파일만 pdfBox를 이용한 텍스트 및 이미지 삽입할 때 위치가 이상하고 좌표가 뒤집히는 것을 발견했습니다.알고보니 Microsoft Print to PDF으로 만드는 이미지는 PDF 좌표계(좌표 원점을 왼쪽 하단(0,0))가 아닌 Windows의 GDI(Graphics De..

기타 2025.03.01

java Optional 문법 정리

Optional 문법은 java 개발자의 NullPointerException을 방지 해주기 위한 문법입니다.Optional 문법에 대해서 알아보겠습니다.Optional 생성 (of, ofNullable, empty)Optional.of는 값이 있는 상태에서 Optional을 객체로 감싸기 위해 사용됩니다.만약 값이 null인 경우 NullPointExcetion을 발생합니다.Optional value = Optional.of("value");Optional nullValue = Optional.of(null); // NullPointExcetion 발생Optional.ofNullable은 값이 null인 경우도 있을 경우 사용할 수 있습니다.Optional value = Optional.ofNullab..

Java 2025.03.01

ORA-01502: 인덱스 인덱스 이름 또는 인덱스 분할영역은 사용할 수 없는 상태입니다.

Select는 정상적으로 가능한데 Insert를 하는 과정에서 ORA-01502 오류가 발생했습니다.생각해보니 컬럼 중 CLOB 컬럼을 테이블스페이스로 변경하는 작업을 진행하였고 해당 작업으로 인해서 발생한 문제인듯 싶습니다.해당 오류는 DDL 작업 또는 직접로드로 인해 인게스 또는 인덱스 파티션을 엑세스할 수 없다는 오류입니다.(이미지 참조) 인터넷에 검색하는데 대부분 인덱스를 리빌드하여 문제를 해결하는 내용은 있는데 확인하는 과정이 잘 안나와서 찾기 힘들었습니다. SELECT INDEX_NAME, STATUS, OWNER FROM ALL_INDEXESWHERE OWNER = '소유자'AND INDEX_NAME = '인덱스 이름'해당 쿼리를 실행하면 STATUS가 UNUSABLE로 나옵니다. ALTER..

DB 2025.02.18