프로젝트 (Java)

멀티 모듈 아키텍처를 적용한 프로젝트에서 각 모듈 간의 통신을 위해 Spring의 WebClient를 사용하는 것은 비동기적이고 논블로킹 방식으로 서비스 간 통신을 가능하게 하여, 시스템의 전체적인 반응성과 성능을 개선합니다. 이러한 접근 방식은 특히 마이크로서비스 아키텍처(MSA)에서 선호되며, 각 서비스가 독립적으로 개발 및 배포될 수 있도록 지원합니다. Newsfeed 모듈과 Activity 모듈 Newsfeed 모듈과 Activity 모듈은 사용자의 활동(예: 게시물 생성, 댓글 달기, 좋아요 클릭)과 관련된 데이터를 관리하고, 이를 바탕으로 사용자의 뉴스피드를 생성합니다. 두 모듈 간의 통신은 내부 API를 통해 이루어지며, WebClient를 사용하여 구현합니다. Newsfeed 모듈 Acti..
프로젝트를 마이크로서비스 아키텍처(MSA)로 전환하는 과정은 시스템의 유연성, 확장성 및 유지보수성을 향상시키는 중요한 단계입니다. 기존 모노리스 서비스를 여러 개의 독립적인 모듈로 분리함으로써, 각 모듈은 서로 독립적으로 개발, 배포 및 확장될 수 있습니다. 이러한 구조는 팀 간의 협업을 용이하게 하고, 기능별로 서비스를 빠르게 반복하고 업데이트할 수 있게 합니다. 멀티 모듈 아키텍처 구성 프로젝트는 myshop-core, myshop-user, myshop-activity, myshop-newsfeed의 4개 모듈로 구성됩니다. myshop-core 모듈은 다른 모듈들이 공통으로 의존하는 기능(예: JWT 처리, 공통 도메인 모델 등)을 포함하며, 이를 통해 코드의 중복을 줄이고 모듈 간의 결합도를 ..
배경 및 문제 발생 프로젝트의 보안 강화를 위해 JWT 토큰 기반 인증 시스템에 Redis를 도입하여 토큰의 만료 시간 관리를 계획했습니다. 목표는 JWT 토큰의 만료와 동시에 Redis 내에 저장된 토큰 정보도 자동으로 삭제되도록 하는 것이었습니다. 그러나 초기 구현 후, 예상치 못하게 토큰이 만료된 이후에도 Redis 내 토큰 정보가 지속적으로 남아 있는 문제에 직면했습니다. 문제 진단 "아, 왜 Redis에서 토큰 정보가 계속 남아있지?"라는 의문으로부터 시작된 트러블슈팅 과정은, 처음에는 Redis의 설정 누락을 간과하고 있음을 발견하는 것이었습니다. Redis에 JWT 토큰과 동일한 만료 시간을 설정하는 중요한 단계가 빠져 있었기 때문에, 토큰은 만료되었으나 Redis 내에는 그 정보가 계속 남..
프로젝트에 Swagger를 추가하는 것은 API 문서화를 자동화하고, API의 사용 및 테스트를 편리하게 만드는 중요한 단계입니다. Swagger를 통해 개발자는 API의 엔드포인트, 파라미터, 응답 등의 세부 사항을 쉽게 이해할 수 있으며, API를 직접 시험해볼 수 있는 인터페이스를 제공받게 됩니다. 이 과정은 API 개발 및 테스트 과정을 간소화하고, API 사용자와의 커뮤니케이션을 개선하는 데 도움을 줍니다. Gradle 설정 build.gradle 파일에 springdoc-openapi-ui 의존성을 추가하여 프로젝트에 Swagger를 통한 API 문서화 기능을 활성화합니다. // swagger implementation 'org.springdoc:springdoc-openapi-ui:1.6.1..
프로젝트에 토큰 검증 시 로그 확인 기능을 추가하는 것은 보안과 디버깅 측면에서 매우 유용합니다. JwtAuthenticationFilter에 로그 출력 기능을 추가하여, 토큰 검증 과정에서 발생하는 다양한 시나리오를 로그를 통해 확인할 수 있게 합니다. 이를 통해 토큰의 유효성 검증, Redis에 저장된 토큰의 존재 여부 확인 등의 과정에서 발생하는 이슈를 신속하게 파악하고 대응할 수 있습니다. JwtAuthenticationFilter 수정 JwtAuthenticationFilter 클래스에서는 doFilter 메소드 내에서 토큰 처리 과정에 대한 로그를 출력합니다. 토큰이 유효하고 Redis에 존재하는 경우, 사용자에 대한 인증이 성공적으로 설정되었다는 로그를 출력합니다. 반면, 토큰이 Redis에..
프로젝트의 뉴스피드 조회 기능을 리팩토링하는 것은 성능 최적화 및 코드의 가독성을 향상시키는 중요한 과정입니다. 사용자가 팔로우하는 다른 사용자들의 최신 활동(알림)과 게시물을 효율적으로 조회하기 위해 NotificationRepository와 PostRepository에 새로운 메소드를 추가하고, FollowService에서 이를 활용하는 방식으로 리팩토링을 진행했습니다. NotificationRepository 수정 NotificationRepository에 findByFromUserIdIn 메소드를 추가하여, 특정 사용자 ID 목록에 해당하는 발신자(fromUser)를 가진 모든 알림을 조회할 수 있습니다. 이를 통해 특정 사용자가 팔로우하는 사용자들이 생성한 알림을 효율적으로 가져올 수 있습니다...
hihyuk
'프로젝트 (Java)' 카테고리의 글 목록 (4 Page)