전체 글
[Mybatis] PostgreSQL ilike 구현하기(feat. Criteria 커스텀하기)
Mybatis Generator를 이용하여 만든 Example에는 원하는 연산자가 없을 수 있습니다. Example클래스 내에 Criteria를 커스텀해서 원하는 연산자를 사용하는 방법을 알아보겠습니다. 사실 Generator를 사용하여 만들어지는 Mapper와 xml등은 mybatis-config.xml에 설정되어 있는대로 만들어지는데, 확실한 방법은 원하는 연산자를 사용할 수 있는 Criteria를 만들어주는 plugin을 구현하 것이 추후에 반복적으로 코딩하지 않아도 될 것입니다.(generator할 때 만든 plugin을 통해서 원하는 메소드를 자동으로 생성 할 수 있기 때문) 그러나 이 포스팅에서는 당장 plugin은 만들기 어렵고, 프로젝트 내에서 간단히 해결하고 싶을 때 어떻게 작업했는지 작..
[PostgreSQL] VIEW vs MVIEW(Materialized View)
Meterialized View(MVIEW) 란? MVIEW는 말 그대로 VIEW입니다. 하지만 일반 VIEW는 가상으로 존재하는 논리적 테이블이고, MVIEW는 실제 존재하는 TABLE처럼 물리적으로 존재하는 테이블입니다. 데이터가 물리적으로 존재하기 때문에 쿼리 실행 시간의 수행속도를 향상 시킬 수 있습니다. 그리고 SUM, MIN, MAX, AVG, COUNT등 그룹 함수를 미리 계산해 놓을 때 많이 사용하고, INDEX를 사용할 수 있다는 것도 장점이 됩니다. VIEW와 Materialized View의 차이점 VIEW Materialized View disk에 저장되지 않는 가상 테이블 기초 테이블을 물리적으로 복사를 하며 디스크에 저장 기초 테이블이 업데이트 될 때마다 VIEW도 업데이트 됨 ..
[POI] 대용량 엑셀 다운로드 SXSSFWorkbook
Java에서 엑셀을 다루기 위해서는 POI 라이브러리를 사용합니다. POI에는 HSSF, XSSF, SXSSF 세가지 방식을 지원하는데, 대용량 엑셀 다운로드를 구현하기 위해서는 SXSSF방식으로 구현해야합니다. HSSF : EXCEL 2007 이전 버전(.xls) - 65535 라인까지 사용가능 XSSF : EXCEL 2007 이후 버전(2007포함 .xlsx) - 65535 라인 이상 사용가능 SXSSF : XSSF의 Streaming Version으로 메모리를 적게 사용 - 65535 라인 이상 사용가능 XSSF는 파일을 다운로드 시 메모리에 파일 데이터를 쌓아두었다고 다운로드 받는 방식이면, SXSSF는 임시 파일을 생성해 중간중간 임시파일에 작성하여 메모리를 적게 사용합니다. Dependency..
[OpenCSV] Output Stream에 OpenCSV 쓰는 방법
Dependency 추가 com.opencsv opencsv 5.6 Example Code public void downloadCsv(HttpServletResponse response) throws IOException { // 출력 파일명 : 한글 깨짐 방지를 위해 UTF-8 인코딩 String outputFileName = URLEncoder.encode("테스트.csv", "UTF-8"); response.setContentType("text/csv;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=\""+outputFileName +"\""); OutputStream outputStream = null..
![[Spring Data JPA] 유연한 조회 API만들기(Specification)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdYkbN%2FbtrJAH4VqpR%2FSHecNqApFmRSHydeFvuk1k%2Fimg.png)
[Spring Data JPA] 유연한 조회 API만들기(Specification)
저번 포스터에서 Query를 사용하는 여러가지 방법에 대해서 알아 봤습니다. 데이터를 조회하는 API를 구현할 때, 다양한 검색 조건을 처리할 수 있어야 합니다. 이렇게 유연하게 처리할 수 있게 도와주는 JPA Specificcation에 대해서 알아봅시다. 1. JPA Specification 이란? JPA Spectification은 DB 쿼리의 조건을 Spec으로 작성하여 요청할 수 있게 해줍니다. 다양한 조건이 계속 추가 될 수록 Spec으로 관리하게 되면 코드가 깔끔해지고 유지보수가 좀 더 용이해집니다. 2. Specification 구현 준비 JPA Specification을 구현하기 위해서는 Repository에 JpaSecificationExecutor를 추가로 상속 받아야합니다. publ..
![[PostgreSQL] JSON 컬럼에 특정 값만 추출해서 Index를 걸어보자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEindw%2FbtrJANiDl4t%2Fow0NsF1r7ujaomSAr2dGzk%2Fimg.png)
[PostgreSQL] JSON 컬럼에 특정 값만 추출해서 Index를 걸어보자
JSON 데이터를 PostgreSql에 저장할 때 data type을 json으로 하여 저장을 합니다. 프로젝트를 진행 하던 중 json 데이터의 특정 값만 찾아서 Index를 걸어야 하는 경우가 발생하여 처리 방법을 작성하고 성능까지 비교해보겠습니다. JSON 연산자 PostgreSql에서 data type이 json인 컬럼에 where절을 사용할 때 아래와 같이 쿼리를 사용합니다. -- info column(json data) : { "customer": "Lily Bush", "items": {"product": "Diaper","qty": 24}} -- json data에서 items의 product가 Diaper인 데이터 조회 쿼리 SELECT info ->> 'customer' AS custo..
![[Spring Data JPA] Query를 사용하는 여러가지 방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWhn6t%2FbtrJwubRF1U%2FjGO7M0Ta8fClvqTrIyhh6K%2Fimg.png)
[Spring Data JPA] Query를 사용하는 여러가지 방법
Spring Data JPA에서 Query를 사용하는 방법은 여러가지가 있습니다. 1. Query Method 2. @Query 어노테이션 3. Query by Example 이제 각각 쿼리 사용 방법의 예제 코드를 보면서 어떻게 사용하는지 알아보겠습니다. 1. Query Method 일반적으로 JPA에서는 쿼리 메소드를 사용하여 쿼리를 만들 수 있습니다. 우리는 앞서 DB에 쿼리 요청을 하기 위해서 Repository 인터페이스를 만들었습니다. Repository에 메소드를 작성함으로써 정의된 메소드에 따라 쿼리를 자동으로 만들어서 요청 할 수 있게 됩니다. public interface MemberRepository extends JpaRepository { // MEMBER 테이블의 name col..
[Spring Security] 두개의 로그인 페이지(Multiple Login Pages)
Spring Boot 프로젝트 진행 중 두개의 로그인 페이지(User, Admin)를 각각 구현해야 하는 이슈가 발생해서 정리하고자 합니다. 1. Maven Dependencies 추가 org.springframework.boot spring-boot-starter-security 2.7.2 org.springframework.boot spring-boot-starter-web 2.7.2 org.springframework.boot spring-boot-starter-test 2.7.2 org.springframework.security spring-security-test 5.7.2 마지막 버전 확인 spring-boot-starter-security spring-boot-starter-web spri..