분류 전체보기
-
8월 28일 월요일 TIL 회고록카테고리 없음 2023. 8. 29. 02:45
오늘도 역시 조회수를 적용하기 위해 이 블로그를 참고하며 만들고있다. 만들면서 익셉션이 출력되었다. "java.lang.NumberFormatException: Cannot parse null string " null 문자를 구문분석 할 수 없다는 익셉션이다. 내가 해결하려고 시도했던 방법은 먼저 조회수를 가져오기 위해 Repository에 findByViews 메서드를 만들었다. Optional findByViews(Long boardId); valueOperations.set( key, String.valueOf(boardRepository.findByViews(basicBoardId)), Duration.ofMinutes(3) ); 그 후 조회수를 저장하는 메소드에서 Value 값을 String.v..
-
8월 24일 목요일 TIL 회고록카테고리 없음 2023. 8. 25. 02:15
조회수 구현을 위해.. 레디스를 사용해서 게시글 상세 조회, 수정, 삭제시 캐시를 생성하고, 수정하고, 삭제하는 기능을 만들었었는데.. 생각해보니까 게시글 상세 조회 전체를 캐시로 만들어버리면 문제가 있다는 것을 깨달았다. 같은 게시글을 조회하는 유저 A, 유저 B가 있다고 할 때, 유저 A가 게시글 상세 조회를 하여 캐시가 1분동안 남아있다고 할 때 유저 B가 그 게시글을 상세 조회를 하면?? 레디스에는 아직 캐시가 남아있어서 조회수가 올라가지 않는다. 좋아요도 마찬가지다. 유저가 좋아요를 누르면? 아직 레디스에는 좋아요가 0인 캐시가 남아있어 캐시가 남아있는 동안에는 좋아요가 올라가지 않는다. 이런 문제가 있기에 게시글 상세 조회에 캐시를 생성하지 않기로 일단 결정하였다. 그래서 조회수만 캐시를 사용..
-
8월 22일 화요일 TIL 회고록카테고리 없음 2023. 8. 23. 01:05
게시글 삭제 시 게시글에 달린 댓글도 같이 삭제되도록 수정했다. CommentRepository.class void deleteAllByBoardId(Long boardId); CommentServiceImpl.class @Override public void deleteBoardWithComment(Long boardId) { commentRepository.deleteAllByBoardId(boardId); } BasicBoardServiceImpl.class // 게시글 삭제 @Transactional @Override @CacheEvict(key = "#basicBoardId", value = "boards", cacheManager = "cacheManager") public void delet..
-
8월 21일 화요일 TIL 회고록카테고리 없음 2023. 8. 22. 02:42
금요일에 구현하려고 했다가 포기했었던 레디스를 사용하여 조회수 구현을 하기 위해 먼저 레디스를 사용해서 캐시를 사용하도록 만들었다. 레디스 캐시 사용해보기 금요일에 주석 처리를 했었던 @Cacheable, @CachePut, @CacheEvict 어노테이션을 주석처리를 해제했다. 그 후 포스트맨을 사용해서 게시글을 작성하고 먼저 선택 조회를 하고 터미널에 get boards::{게시글번호} 를 입력해서 Value를 확인한 뒤 게시글 수정을 하고 다시 터미널에 get boards::{게시글번호}를 입력해서 Value를 확인해서 무엇이 문제인지 비교해봤다. 실행 결과 게시글을 처음 작성하고 조회를 해보니 @class : \"com.~~~~BasicBoardResoponse\" 라고 출력된다. 하지만 수정을 ..
-
8월 18일 금요일 TIL 회고록카테고리 없음 2023. 8. 19. 00:01
redis.serializer.serializationexception 에러 문제 게시글을 작성, 작성 후 상세(선택) 조회 까지는 문제 없이 동작하나 게시글을 수정 후 상세(선택) 조회를 하려고 하면 아래와 같은 오류가 출력되면서 조회가 안되었다. 3~4번 새로고침을 하거나 조금 기다리면 오류가 없어지며 상세(선택) 조회가 되기는 하나 오류를 고치고 싶었다. redis.serializer.serializationexception could not read json: cannot construct instance of `org.springframework.http.responseentity 및 InvalidDefinitionException 도 같이 출력 오류를 해결하려 구글링을 하던 중 아래 블로그를 ..
-
8월 17일 목요일 TIL 회고록카테고리 없음 2023. 8. 18. 00:44
스프링 이미지 업로드 API 수정 기존에 사용했던 이미지 업로드 API를 AwsS3Service에서 만든 업로드 API를 사용해서 수정했다. BasicBoardServiceImpl.class // 이미지 업로드 @Override public void upload(List multipartFiles, BasicBoard basicBoard) throws IOException { // 이미지를 담을 uploadImages 리스트 생성 List uploadImages = new ArrayList(); // 이미지가 있는지 확인하는 imageExistCheck 선언 boolean imageExistCheck = false; // 매개변수로 들어온 multipartFiles (이미지 파일들)을 반복문을 들린다. ..
-
8월 16일 수요일 TIL 회고록카테고리 없음 2023. 8. 16. 22:20
AWS S3 를 이용한 파일 업로드 1) S3용 IAM Access Analyzer 활성화 1. AWS Console에서 S3용 IAM Access Analyzer 탭을 눌러 밑에 이미지에 있는 IAM Access Analyzer를 누른다. 2. 누르면 나오는 화면에서 액세스 생성 버튼을 누른다. (사진을 찍지 못했다 ㅠㅠ) 누른 후 액세스를 만들면 아래 화면이 나온다. 2) 사용자 생성 1. 액세스 관리 > 사용자 > 사용자 생성 클릭 S3에 접근하기 위헤서는 IAM 사용자에게 S3 접근 권한을 주고, 액세스 키를 만들어 액세스 키, 비밀 엑세스 키를 접근해야한다. 2. 사용자 이름을 입력한다. 3. 직접 정책 연결을 클릭하고, AmazonS3FullAccess를 선택하고 다음을 클릭한다. 4. 사용자..
-
8월 15일 화요일 TIL 회고록 (AWS EC2, S3 생성)카테고리 없음 2023. 8. 15. 21:44
AWS EC2 인스턴스 생성하기 EC2 아마존 웹 서비스 (AWS)의 여러 서비스 중 가장 먼저 생겨난 서비스 중 하나로, 가장 범용적으로 사용되고 있다. EC2는 독립된 컴퓨터 한대를 임대해서 사용할 수 있게 해주는 서비스이다. EC2의 장점 마우스 클릭 몇 번만으로 컴퓨터 한대를 구성할 수 있다. 원하는 스펙의 가상 서버를 구축하고, 스펙을 사용한만큼의 비용만 지불한다. 스펙을 줄이거나 높이는게 가능하며 방법또한 쉽다. EBS(Elastic Block Store) 볼륨을 구성하여 영구 스토리지로 저장이 가능하다. EIP (Elastic IP Address) 를 사용하여 고정 IP를 할당할 수 있다. EC2 리전 AWS는 나라(리전)별로 데이터 센터를 가지고있다. (모든 나라마다 가지고 있지는 않다.)..