본문 바로가기

전체 글143

스프링 Redis로 캐시 처리하기 조회 수, 방문자 수 업데이트 지난 글에서 우리 프로젝트에 개별 상품 조회를 redis로 캐싱 처리했었습니다. 캐시 삭제 주기를 6시간으로 많은 시간을 두고 했었는데 이렇게 설정하게 되면 그 사이에 조회 수가 올라도 이미 cacheable로 캐시에 반영이 되어 있어서 아무리 상품 조회를 많이 해도 조회수가 늘지 않는다는 것입니다. 선택지는 두 가지가 있었습니다. 첫 번째. 조회수 전용 엔티티를 만들어 따로 관리합니다. 상대적으로 적은 어트리뷰트를 가지면서 그에 따른 시간 이득이 있을 수 있으나 인메모리 기반 레디스에 비하면 속도가 현저히 늦을거라고 생각했습니다. 두 번째. redis에 조회수만 담당하는 캐시를 올리자. 본래는 product 엔티티를 전부 올려 그 때마다 데이터를 읽어 조회수 카운트를 올릴 생각이었습니다. 그러나 key.. 2022. 2. 8.
스프링 무한스크롤 페이징 검색 처리 및 동적쿼리 적용하기 목적 프로젝트에서 무한 스크롤 기능과 동적 쿼리를 활용해 카테고리별 정렬, 키워드 검색 등을 수행하기 위해 만들었습니다. 장점 원래 프로젝트에는 /api/product/views,/api/product/time, /api/product/category로 나뉘어져 각 조회마다 다른 기능을 하도록 되어 있었습니다. 그러다 보니 코드의 양도 몇 배가 늘어버리고, 단순히 검색이라는 키워드 안에 여러가지 api가 섞여버려 본래의 목적을 읽어버린 느낌까지 들었습니다. 페이징과, 동적 쿼리를 적용 시키고 난 후엔 검색용 api가 통합되어 알아보기 쉽게 만들어졌고 프론트엔드에서도 쿼리 파라미터에 추가만 하면 되니 사용법이 쉬워진 것 같습니다. 코드의 양적으로 봐도 훨씬 줄어 클린 코드가 만들어지게 됐습니다. 단점은 U.. 2022. 2. 7.
QueryDsl 기본 문법 보호되어 있는 글 입니다. 2022. 2. 7.
스프링 부트 queryDsl 환경 설정하기 사용 환경 스프링부트 : 2.5.9 버전 2.6 이상부터는 에러가 납니다 build.gradle에서 여러가지 추가해야 합니다. 1. dependencies에 추가 //querydsl 추가 implementation 'com.querydsl:querydsl-jpa' implementation 'com.querydsl:querydsl-core' 2. 쿼리 파라미터 로그 남기기 //로그 남길때 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' 3. build.gradle 최 상단에 추가 buildscript { ext { queryDslVersion = "5.0.0" } } 4. plugins에 아래 코드 추가 id "com.e.. 2022. 2. 5.
스프링 Java 8 LocalDateTime 직렬화 역직렬화 오류 해결 방법 Java 8 date/time type java.time.LocalDateTime not supported by default LocalDataTime을 역직렬화하지 못해서 생기는 문제입니다. jackson-datatype-jsr310 종속성을 추가하고 해결해야 됩니다. //자바 역직렬화 문제 해결 패키지 implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' implementation 'com.fasterxml.jackson.core:jackson-databind' 추가적으로 만약 캐시로 사용할 객체에 LocalDateTime 타입의 값이 존재한다면 위처럼 @JsonSerialize, @JsonDeserialize 어노테이션을 기.. 2022. 2. 5.
[Error-Log] ConcurrentModificationException 해결법 @OnetoMany에서 collection 삭제할 때 에러 해결 방법 프로젝트에서 상품 이미지를 수정하려고 할 때 이미지를 새로 올리도록 설정해놨습니다. 그렇기 때문에 기존 이미지 url들을 삭제한 후에 이미지를 업로드하는 로직으로 구성하는 와중에 생긴 에러입니다. orphanremoval 설정을 해두어 url쪽의 FK만 null로 설정해줘도 연관 관계가 끊기게 되고 자동으로 해당 url 엔티티는 delete가 됩니다. 그러나 일반적으로 for을 사용해서 삭제를 진행하게 되면 삭제될 때마다 index가 바뀌어 제대로 삭제가 진행되지 않으면서 ConcurrentModificationException 에러를 띄우게 됩니다. for(Url url : productById.getUrlList()) { url.s.. 2022. 2. 4.
맥북으로 스프링에서 Jmeter로 성능 테스트해보기 1. Jmeter를 먼저 깔아줍시다. Apache JMeter - Download Apache JMeter Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava jmeter.apache.org zip 파일을 받고 압축을 풀어주도록 합니다. 2. 별도 설치 필요 없이 터미널에 접속하고 압축 푼 폴더 안의 /.. 2022. 2. 4.
스프링 레디스 redis cache 프로젝트에 적용하기 실행 환경 mac air m1 몬터레이 spring boot: 2.6.2 redis: 6.2.6 Docker Desktop: 4.4.2 스프링에서 레디스를 사용하기 위해서 도커에 redis 컨테이너가 실행 중인 상태로 두신 상태를 전제로 진행하겠습니다. 1. build.gradle에 implementation 추가하기 data-redis와 cache manager 사용을 위해 두 가지 모두 추가해줍니다. implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-cache' 2. @EnableCaching 추가 프로젝트에서 캐.. 2022. 2. 4.
맥북으로 도커에 redis 설치하고 실행해보기 레디스 받기 터미널에서 docker pull redis로 다운로드 받습니다. 받고 docker images 해보면 리스트에 추가됩니다. 도커로 컨테이너 생성 - test-redis docker run --name test-redis -p 6379:6379 -d redis 로 컨테이너에 올립니다. 그 후 docker ps 하시면 도커 위에 올라간 컨테이너 목록이 보입니다. docker exec -it test-redis /bin/bash 명령어로 redis 환경으로 들어갑니다. 그 후에 redis-cli를 치면 client 환경에 접속하게 됩니다. Redis Docker 컨테이너 시작 & 정지 & 재시작 Redis-cli 명령어 알아보기 Keys * 현재의 키값들을 확인할 수 있습니다. set key / .. 2022. 2. 3.
맥북으로 도커에 postgresql 설치하고 실행하기 도커가 깔려있다는 전제하에 진행하겠습니다. 터미널에 접근해서 아래 코드를 입력하되 password는 원하시는 걸로 바꾸시면 됩니다. docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD="your password" -d postgres 입력하면 다운로드가 이뤄지고 자동으로 postgresql이 도커 이미지에 띄워지게 됩니다. 기존 프로젝트에선 윈도우에 postgresql을 설치해두고 진행했지만 맥북에선 도커에 이미지를 올리는 것만으로 구동을 할 수 있습니다. 추가적으로 기존 프로젝트 적용을 위해서 database를 만들어야 합니다. 터미널에서 sudo docker exec --user="root" -it AGER "bash" 입력해줍니다. 중간에는 .. 2022. 2. 2.
맥북 M1 도커 설치하기 우선 도커 이미지를 다운받아줍니다. 애플 칩을 선택! 도커 다운로드 하기 Docker Desktop for Mac and Windows | Docker Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows. www.docker.com 도커를 정상적으로 설치하고 나면 터미널에서 여러가지 명령어들을 실행해볼 수 있습니다. //도커에 받은 이미지들을 출력 docker images //도커에서 실행중인 리스트들을 출력 docker ps 2022. 2. 2.
맥북 m1 터미널 꾸미기 한번에 끝내기 iterm2 설치 - 터미널 역할을 해주는 iterm2 다운로드 해주고 설치해주세요 iTerm2 - macOS Terminal Replacement iTerm2 by George Nachman. Website by Matthew Freeman, George Nachman, and James A. Rosen. Website updated and optimized by HexBrain iterm2.com homebrew 설치 - 인스톨을 편하게 해주는 프로그램 iterm2를 키고 아래 코드를 그대로 입력하고 비밀번호 입력합니다. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 그 .. 2022. 2. 2.