뭔가 이것저것 해보려다가 아무것도 못한 사람됨....울적해지지말고 많이 보고 배우면서 힘내자 🐳🐳🐳 오늘 한 일 -ec2 rds 에 dummy 데이터 넣어보기 -> 인텔리제이에서 쿼리 콘솔을 처음 사용해봤다! 쿼리 보낸 내역과 그 결과를 한 눈에 볼 수 있는게 신기했다! (mysql 은 다운받았다가 인텔리제이랑 연결이 잘 안돼서 일단 삭제함) -캐시 흐름 이해하기 + 스케줄러 기능 -ElasticCache 가 무엇인가 🫧 팀원의 캐시관련 스케줄러 코드 // keyword 캐시 10분 단위로 db에 저장 후 삭제 @Transactional @Scheduled(fixedDelay = 1000 * 60 * 10) fun flushAllCache() { // 캐시에서 순위 정보 가져옴 zSetOperations..
전체 글
🔥값이 쌍따옴표와 함께 저장됨 => Serialization 문제를 해결하기 위해 잠깐 적용해봤었던 GenericJackson2JsonRedisSerializer 으로 인한 현상이었다. 저장된 캐시를 가져올 때 생겼던 SerializationException: Could not read JSON: Cannot construct instance of "org.springframework.data.domain.SliceImpl" 직렬화 과정에서 SliceImpl 생성자가 없는 문제?? 직렬화/역직렬화 문제는 SliceImpl 을 구현한 CustomSliceImpl 을 팀원이 직접 만들어서 해결했다. class CustomSliceImpl @JsonCreator(mode = JsonCreator.Mode.PRO..
문제 redis value에 쌍따옴표가 같이 들어감 -> 재설치 해보고도 안되면 request param 으로 받기 문제 keyword search 시 직렬화예외발생 => 페이지네이션+ 문제같음 내 문제 ngrinder 테스트 ec2 환경에서 ngrinder 실행 어떻게 한거지?? 프로젝트를 따라가고있지 못하는 것 같다.... 내일 할 일 redis 삭제 재설치 하고 저장되는거 다시 확인
인텔리제이에서 스프링 부트와 Redis 를 연결하고 Sorted set 자료구조를 이용해 인기 검색어 순위를 저장하고 조회하는 테스트를 해봤다. spring boot kotlin redisTemplate Redis 설정 1 설치 redis 설치가이드 2 dependencies implementation ("org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE") 3 인텔리제이 데이터베이스 연결 4 application.yml 설정 (로컬) spring: data: redis: port: 6379 // 기본 포트 host: localhost 5 RedisConfig package com.sparta.bubbleclub.global.co..
맨날 다 끝난 후에야 내용 캡쳐해놓을것을 후회하다...🥲 문제 pageable 의 pagesize 를 10으로 고정했는데도 불구하고 테스트환경에서 pagesize가 1로 디폴트 된 값이 나왔다. 그로 인해 우리 프로젝트에서 원하는 10size 로 매번 변경해주어야 했다. 해결과정 1 yml 파일로 설정 spring: data: web: pageable: default-page-size: 10 아무런 변화가 없다. 2 PageRequet 클래스의 of 메서드로 pageable 객체 생성 방법을 찾는 도중 우리는 커서기반으로 한 무한스크롤 페이지가 나오는 프로젝트만들고 있는데 굳이 pagesize 와 pagenumber을 입력받을 필요가 없다는 것을 깨달아서 아예 입력받는 request 를 제거하였다. of..
커서 기반 페이지네이션 참조 : https://jojoldu.tistory.com/528?category=637935 대용량 트래픽 프로젝트에서 트위터를 모방한 애플리케이션을 구현하기 위해 cousor 기반으로 페이징을 시도했다. 페이지네이션 책의 페이지처럼 데이터를 묶음으로 분리 왜? offset 기반과 coursor 기반의 차이점 offset 은 조건에 해당하는 모든 데이터를 가져온 뒤 페이지사이즈를 기반으로 페이징을 한다. 예를 들어 SELECT * FROM items WHERE 조건문 ORDER BY id DESC OFFSET 10000 LIMIT 20 이라 하면 10000부터 20개의 데이터를 가져오는 과정에서 1부터 10000까지의 10000개의 행을 버려야하는데도 불구하고 읽어와야 한다. 이..
내배캠 13주차 대용량 트래픽 프로젝트 240214-240223 S.A. https://www.notion.so/A1-295a5b79d2bf44b8b9c50974e0fb59a6 A1조 | Notion ❤ 우리 팀 프로젝트 소개 adorecamus.notion.site 중점사항 => Cache 를 이용한 트래픽 관리 필수 구현 : spring 의 @Cache 기능 활용 선택 구현 : redis 이용 대용량 트래픽을 어떻게 관리하느냐가 중심이라서 기본 CRUD 기능은 간단하고 빠르게 끝내고 최대한 빨리 cache 를 적용하기로 하였다. 오늘 구현 사항 : bubble CUD / 예외처리 spring cache 참조 https://bcp0109.tistory.com/385 https://jiwondev.tis..
Service 테스트코드 작성 문제 service 테스트 코드 작성 중 존재하지 않는 post 저장했을 때 예외는 잘 통과하는데 존재하는 post 를 저장했을 때 실행하면 NullPointerException 과 함께 실패한다. 코드 package org.example.todolist.domain.post import io.kotest.assertions.throwables.shouldThrow import io.kotest.core.spec.style.BehaviorSpec import io.kotest.extensions.spring.SpringExtension import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe impor..
aws s3 이미지 업로드 MultipartFile 업로드 방식 참조 : ( https://techblog.woowahan.com/11392/ , https://varjm.tistory.com/79 , https://growth-coder.tistory.com/114, https://chb2005.tistory.com/200 ) https://chb2005.tistory.com/200 클라이언트에서 첨부파일로 이미지를 업로드하면 스프링부트에서 이미지 파일을 MultipartFile 객체로 변환, S3 에 파일업로드, 클라이언트에 이미지 url 을 반환 aws s3 버킷 생성 IAM, 정책 설정 S3Service 더보기 package org.example.todolist.infra.aws import co..
test 코드 작성 중 LocalDateTime 관련 에러 PostControllerTest 더보기 @SpringBootTest @AutoConfigureMockMvc // mock 빈 등록 @ExtendWith(MockKExtension::class) class PostControllerTest @Autowired constructor( private val mockMvc: MockMvc, private val jwtPlugin: JwtPlugin ): DescribeSpec({ extension(SpringExtension) //Junit5 확장 afterContainer { clearAllMocks() } val postService = mockk() describe("GET/posts/{postI..