- [트러블 슈팅] 갑자기 사라진 Redis2025-02-03 12:06:04기존에 잘 동작하던 개발 서버에서 Redis와 관련된 API 들이 동작하지 않는 것을 확인하게 되었다.오류를 확인해보니 Redis 오류인 것을 확인하였다.2025-02-03T01:31:34.427Z ERROR 1 --- [Eighteen_BE] [http-nio-8080-exec-22] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.data.redis.RedisConnectionFailureException: Unabl..
- 뱃지 시스템 적용2025-01-15 22:42:58뱃지 종류다양한 업적들이 추가되도 문제되지 않게 확장성을 고려해 만드려고 한다.첫 발자국앱에 최초 가입 시 얻을 수 있는 뱃지이다.완벽한 첫 인상프로필 사진, 개인 정보, 자문자답 모두 입력 시 얻을 수 있는 뱃지이다.첫 인사첫 채팅 메시지를 보내면 얻을 수 있는 뱃지이다.하트 전도사다른 사람의 프로필에 좋아요 50번 이상 누르면 얻을 수 있는 뱃지이다.첫 승리토너먼트에서 첫 승리 시 얻을 수 있는 뱃지이다.새싹(10개) - 유명인(100개)자신의 좋아요 수 10개 달성하면 얻을 수 있는 뱃지이다.요구사항업적을 달성하면 뱃지를 받을 수 있다.- 달성하는 순간 받아진다.업적을 달성하면 보상을 받을 수도 있다.- 보상은 아직 미정마이페이지에서 나의 뱃지의 개수를 볼 수 있고, 클릭 시 최대 9개의 뱃지가 보..
- [트러블슈팅] 랜덤 Pagination 너무 쉽게 봤다.2025-01-09 23:44:38처음 페이지로 회원을 나눌 때 회원을 전체 조회 후 Shuffle을 한 뒤에 해당 리스트를 페이징하는 방법을 생각했었다.하지만 페이지네이션 특성 상 api를 호출할 때마다 다음 페이지를 요청해야하는데 이때 기준이 되는 회원 리스트는 DB에 저장되어 있는데 회원 테이블을 기준으로 하게 된다. 그렇기 때문에 기존에 생각했던 방식은 회원 전체 조회 후 랜덤하게 섞은 리스트를 계속 유지시켜야지만 구현이 가능한 것이다.이 방식은 회원이 많아지면 많아질 수록 api를 호출할 때마다 부담이 된다고 판단하여 다른 방안을 찾아봤다.대책 1. 페이지 마다 랜덤하게 섞기public List getUserProfilePage(Pageable pageable){ Slice users = userService.findPag..
- [트러블 슈팅] 회원 상세 조회 문제 발생(2025.01.06)2025-01-07 17:17:04회원 상세 조회 api 호출 시 다음과 같은 에러 발생org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.st.eighteen_be.user.domain.UserInfo.userQuestions: could not initialize proxy - no Session 에러 내용을 살펴보면 org.hibernate.LazyInitializationException은 Hibernate에서 발생하는 이벤트이다.이 오류는 영속성 컨텍스트가 종료되어 버려서, 지연 로딩을 할 수 없어서 발생하는 오류이다. JPA에서 지연로딩을 하려면 항상 영속성 컨텍스트가 있어야 한다. 보통 트랜잭션 밖에서 조..
- [트러블 슈팅] redis 관련 문제 발생(2025.01.03)2025-01-03 23:34:41IOS 개발자 분들에게 문제 상황을 들었다. 현재 발생한 문제는 좋아요 & 좋아요 취소와 회원 상세 조회 api 의 응답값이 401 에러가 온다는 것이었다. 1. 좋아요 & 좋아요 취소 문제현재 좋아요 로직은 현재 사용자 아이디 값(= userId)과 좋아요할 회원 아이디(= likedId) 두 가지 값이 필수 값이다.userId를 key값으로 하고 value 값으로 likedId 로 Redis에 저장하고 있다. 만약 이미 좋아요 되어있는데 좋아요 api를 호출하거나if (Boolean.TRUE.equals(likeCountRedisTemplate.opsForSet().isMember(userLikesKey,likedId))) { throw new IllegalStateException("Alrea..
- [트러블 슈팅] 요청 값 Dto에 어떻게 매핑되는가2024-11-15 14:39:43문제 상황Controller@PostMapping("/save")public ApiResponse save(@RequestBody FcmTokenSaveRequestDto requestDto, @AuthenticationPrincipal UserDetails userDetails) { return ApiResponse.success(HttpStatus.OK, fcmTokenMemberService.save(requestDto, userDetails.getUsername()));} 문제 발생 DTO@Getter@RequiredArgsConstructorpublic class FcmTokenSaveRequestDto { private final ..
- [트러블 슈팅] JwtFilter와 Security Config의 동작 순서2024-10-16 15:08:461. 문제 상황첫 번째 문제: 현재 JwtFilter에서 헤더에 토큰 유무와 유효성 검사를 통해 예외 처리를 하는 코드를 작성하였는데Security Config에서 설정한 화이트 리스트 api 들도 JwtFilter를 거치면서 토큰이 없는데 유효성 검사가 동작하게 되면서헤더에 토큰이 없는 회원 가입 상태에서도 에러가 던져졌다.해결 시도.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider,objectMapper), UsernamePasswordAuthenticationFilter.class)인증필터 전에 JwtFilter를 실행시키도록 설정해서 그런가 하고 .addFilterAfter()로 실행해 보아도 결과는 같았다. 1. addFilterAfte..
- [트러블 슈팅] S3 HTTPS(443) 접근 문제2024-10-13 22:45:17문제상황S3에 올려둔 이미지 파일에 접근하는 로직을 구현 했었는데 개발서버에서는 접근이 안되는걸 확인로컬에서 테스트 결과 접근이 되는 것을 확인 추측현재 개발 서버가 라이트세일 내부에 구성되어 있음, 해당 라이트세일은 다른 팀원분이 관리하지만 s3는 내가 관리 중, 그렇기 때문에 혹시 EC2 보안그룹 설정에서 아웃바운드 규칙에 443 포트에 접근 허용이 안되어 있을거라 판단-> 하지만 얘기를 들어보니 라이트세일 자체에서 방화벽으로 모든 포트를 접근 허용해놨기 때문에 문제가 없다고 판단 해결도커 컨테이너를 한번 바꾼적이 있는데 이전에 쓰던 서버 컨테이너를 호스트모드가 아니라 브릿지네트워크로 컨테이너끼리 묶어놓기만해서 외부 api 호출이 안되었던 것-> 브릿지 네트워크로 묶어놓기만 했던 이유는 컨테이너 내부..