Languages | Frameworks
[Redis] springboot + Redis cache(조회)
💡문득 똑같은 데이터를 페이지 호출 시 마다 DB에 접근해서 가져온다면, 성능 이슈가 있을 수 있지 않을까? 라는 생각이 들었다.(데이터 수가 많을 때) 그래서 In-memory 기반의 데이터베이스인 Redis를 사용해서 데이터를 저장하고 불러온다면 성능 개선을 할 수 있을 것 같았다. (TTL 설정을 통한 휘발성 데이터 저장) 또한, Springboot에서는 Redis와 연동하기 위한 library도 지원해주고, cache 기능도 지원한다고 한다. Springboot에서 Redis를 활용하여 cache 기능을 설계하기 위한 전략은 [Redis] 캐시 설계 전략 지침을 참고하자. 이제 아래를 통해 Spring boot에 Redis를 연동하고, cache도 사용해보도록 하자! 1. 레디스 연동하기(의존성 ..
[QueryDSL] N + 1 현상 해결 과정
문제점 poi_basic 테이블 만을 조회하려했는데, 아래와 같이 N + 1 현상이 일어나고 있었다. 현상황 poi_basic 테이블과 poi_facility 테이블은 OneToOne관계이다. Entity로 DB 조회 테이블 조회 코드 고찰 그렇다면 왜 OneToOne관계에서 N+1 문제가 생기는지 생각해보았다. 분명 양쪽 테이블에 지연로딩(Lazyloading)을 설정했었는데, 지연로딩이 제대로 적용되지 않았던 것이다. 자 그럼 왜 N+1이 발생하는지 알아보자. N+1이 발생하는 이유는 프록시 초기화가 일어났기 때문이다. 예를들어, 아래와 같은 테이블 연관관계가 있다고 하자. Q. [Order_Item]테이블을 조회하는데 [Order]테이블과 [Product]를 항상 함께 조회해야 하나? 답은 “No”..
Java) 2차원 배열 오름차순 정렬(Arrays.sort 람다식)
Java Array Sort 자바에서 1차원 배열을 오름차순 하기위해서는 Arrays.sort() 메서드에 인자로 배열을 넣어서 사용하면 되지만, 2차원 배열을 오름차순 하려면 Arrays.sort에서 람다식을 이용하여 구현할 수 있다. 1차원 배열(int) 정렬 - 오름차순, 내림차순 여기서 잠깐 1차원 배열(정수형) 오름차순, 내림차순 정렬하는 방법에 대해 코드로 간단히 알아보자. # 오름차순 정렬 int[] arr = {1, 26, 17, 25, 99, 44, 303}; Arrays.sort(arr); >>>>>결과: [1, 17, 25, 26, 44, 99, 303] 1차원 int형 배열의 오름차순 정렬은 비교적 간단하지만, 내림차순 정렬은 상당히 까다롭다. int형 배열이 아니라면, 아래와 같이..
Java) HashMap의 computeIfAbsent에 대해(feat. getOrDefault)
getOrDefault 우리가 흔히 알고 있는 map의 메서드중 getOrDefault 메서드는 키값이 없으면 두번째 인자를 반환하는 것으로 알고있다. 평소에 코딩 문제를 풀때, Map 같은 map에 key, value를 넣어줄 때 해당 메서드를 이용해, key가 존재한다면 해당 key의 value를 가져와서 +해주고, key가 존재하지 않는다면 default값에 + 해서 값을 넣어줬다. 예시 map.put("key", map.getOrDefault("key", "default값") + "더해줄 값"); 하지만 value가 문자열 또는 정수형이 아닌 리스트일 때는 어떻게 값을 추가해줘야 할까? Map strListMap = new HashMap(); // 기본값 넣기 List list = strListM..
도커 타임존(timezone) 변경
도커 컨테이너 내의 timezone(default: UTC)를 변경해주기 위해서는 docker run할때 -e TZ=Asia/Seoul 옵션으로 변경해 줄 수도 있지만, tzdata를 이용해 쉽게 변경 할 수 있다. export TZ=Asia/Seoul 컨테이너 내에서 위의 명령어를 입력하고, date명령어로 시간을 확인해보면 에서 로 변경된 것을 볼 수 있다. 위와 같이 했는데도, 컨테이너를 나갔다가 들어왔을때 적용이 안되어있다면 아래와 같은 방법으로 해보는 것을 추천한다. -컨테이너 접속 후 # dpkg-reconfigure tzdata - 한국 서울 기준 6(Asia) -> 69(Seoul) 선택 # date로 변경된 시간 확인 후 docker 재시작 추가> DB TimeZone 변경하기 http:..