이전 글에서는 채팅 기능에 WebSocket, Kafka, MongoDB를 사용하는 이유에 대해 작성해보았다.이번에는 채팅 기능에서 사용되는 도메인 설계에 대해 작성해보려 한다. 도메인 설계채팅 기능에 사용되는 도메인과 저장되는 저장소 목록은 다음과 같다.채팅방(ChatRoom): RDBMS채팅 메시지(ChatMessage, Message): MongoDB채팅 알림(ChatNotification, Notification): RDBMS채팅방 입장 상태 (ChatRoomParticipant): REDIS 채팅방(ChatRoom)채팅방은 사용자들이 서로 메시지를 주고받을 수 있는 공간으로, 관계형 데이터베이스(RDBMS)에 저장된다. 채팅방 정보는 사용자 정보와 긴밀히 연결되어 있어, 조회 시 사용자 정보를 ..
성장🪜CI/CD 환경 구축, 모니터링 시스템 구축, 기본적인 CRUD 작업, AOP 구현 등 여러 기술을 활용한 프로젝트를 경험해봤다.이러한 경험을 바탕으로 새로운 기능을 구현해봄으로써, 더 넓은 경험을 쌓고 싶다는 목표를 세웠다.그 과정에서 관심을 끈 것이 바로 채팅 기능이었다.채팅 기능 구현을 위해 필요한 WebSocket<span style="color: #333333; text-align: start..
Refresh Token 문제 및 해결 과정 현재 상황 현재 시스템은 JWT(JSON Web Token)를 활용한 인증 방식을 사용한다. 사용자가 로그인을 통해 인증을 요청하면, 서버는 사용자의 인증을 처리하고 Access Token과 Refresh Token을 발급한다. Access Token에는 사용자의 pk와 역할(role)이 포함되어 있으며, 이는 사용자의 웹 브라우저에 쿠키 형태로 저장된다. 이 Access Token을 활용해 사용자는 서버에 인증이 필요한 데이터 요청을 할 수 있다. 그러나 Access Token에는 사용자에 대한 정보가 포함되어 있기 때문에, 이 토큰이 탈취되면 사용자의 정보 유출의 위험이 있다. 이를 방지하기 위해 서버에서는 Access Token의 유효 시간을 30분으로 ..
AWS 보안 그룹 설정 현재 EC2 인스턴스 하나와 RDS 하나를 생성한 상태이다. 각각은 별도의 보안 그룹을 사용한다. 이번 글에서는 각각의 보안 그룹에 대해 자세히 알아본다. EC2 보안 그룹 SSH (Secure Shell): SSH는 원격 컴퓨터를 안전하게 제어하기 위한 프로토콜이다. 이를 통해 사용자는 네트워크를 통해 다른 컴퓨터에 로그인하고, 명령어를 실행하며, 파일을 전송할 수 있다. SSH는 기본적으로 TCP 22번 포트를 사용한다. 이 규칙을 추가하면 사용자는 인터넷을 통해 EC2 인스턴스에 SSH 접속을 시도할 수 있게 된다. HTTP (Hypertext Transfer Protocol): HTTP는 웹 서버와 클라이언트 간에 정보를 주고 받기 위한 프로토콜이다. 웹 브라우저를 통해 웹..
AWS RDS 생성 및 설정 다음은 내가 작성한 RDS 생성 정리글이다. https://yenjjun187.tistory.com/886 배포V4 RDS 생성 및 접속 yenjjun187.tistory.com 데이터베이스 생성 방식 선택 엔진 옵션 프로젝트에서 사용하고자 하는 데이터베이스 엔진을 선택한다. To계곡 프로젝트에서는 데이터베이스로 MariaDB를 사용한다. 템플릿 설정 DB 인스턴스 식별자: tovalley-rds 마스터 사용자 이름: 마스터 암호: 연결 Virtual Private Cloud(VPC)는 기존에 생성한 VPC임을 확인해야 한다. 해당 VPC 내부에 RDS가 생성된다. 퍼블릿 액세스: 예 VPC 보안 그룹: 원하는 보안 그룹 To계곡 프로젝트에서는 RDS 보안 그룹으로 EC2 인..
문제 해결 과정 Github Actions 빌드, 테스트 문제 😢 문제점 프로젝트를 Github Actions를 사용하여 배포한다. Github Actions 파일의 내용을 살펴보면 다음과 같이 서버를 빌드하는 부분이 포함되어 있다. - name: Build With Gradle working-directory: ./tovalley-server run: ./gradlew build 빌드 시 발생하는 문제점은 두 가지였다. yml 파일을 찾지 못한 빌드 실패 test 실패 모두 로컬 환경에서는 정상적으로 동작하였지만 Github Actions를 통해 빌드를 수행하면 에러가 발생했다. 🧐 원인 GitHub Actions는 빌드 과정에서 프로젝트의 루트 디렉토리에 있는 파일들만 접근할 수 있다. 만약 appl..
AWS EC2 생성 및 설정 다음은 내가 작성한 EC2 생성 정리글이다. https://yenjjun187.tistory.com/847 배포V1 EC2 서버 생성 및 고정IP 설정 yenjjun187.tistory.com 이름 및 태그 태그에는 웹 콘솔에서 표기될 태그인 Name 태그를 등록한다. 태그는 해당 인스턴스를 표현하는 여러 이름으로 사용될 수 있다. EC2의 이름을 붙인다고 생각하고 넣으면 된다. 여러 인스턴스가 있을 경우 이를 태그별로 구분하면 검색이나 그룹 짓기 편하므로 여기서 본인 서비스의 인스턴스를 나타낼 수 있는 값으로 등록한다. AMI 인스턴스를 생성하는 첫 단계는 AMI(Amazon Machine Image, 아마존 머신 이미지)를 선택하는 것이다. AMI는 EC2 인스턴스를 시작..
구성 이해 우선 프로젝트 배포 구성에 대해 먼저 소개해보려 한다. 프로젝트는 서버로 Spring Boot를, 클라이언트 환경으로는 React를 사용하여 구성되어 있다. React는 사용자와의 상호작용을 담당하며, Nginx를 통해 서비스된다. Spring Boot는 사용자 인증과 데이터 처리 등의 비즈니스 로직을 처리하고, 그 결과는 AWS RDS(MariaDB)에 저장된다. Nginx는 AWS EC2 인스턴스에 위치하여, 클라이언트의 요청을 서버로 전달하고, 정적 자원을 제공하는 역할을 한다. 배포 과정에서는 Docker, EC2, 그리고 Github Actions을 사용한다. Nginx, React, Spring Boot, Redis는 모두 Docker를 통해 배포된다. Docker를 사용하기 위한 ..
소개 현재 우리 프로젝트의 전체 시스템 구조는 위 이미지와 같다. 내가 직접 배포하며 경험했던 난관들과 함께 배포 과정을 블로그로 정리해보려고 한다. 글 구성은 다음과 같다. [Spring Boot + React]배포#1. 소개 [Spring Boot + React]배포#2. 구성 이해 [Spring Boot + React]배포#3. AWS EC2 생성 및 설정 [Spring Boot + React]배포#4. AWS RDS 생성 및 설정 [Spring Boot + React]배포#5. AWS 보안그룹 설정 [Spring Boot + React]배포#6. Docker Hub Repository 생성 [Spring Boot + React]배포#7. Docker 관련 파일 작성 [Spring Boot + Re..
테스트하고자 하고자 하는 Repository 코드는 다음과 같다. BoardRepositoryImpl public class BoardRepositoryImpl implements BoardRepositoryCustom { private final JPAQueryFactory queryFactory; public BoardRepositoryImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } @Override public Page findPagePostList(RetrievePostListCondition retrievePostListCondition, Pageable pageable) { JPAQuery query = query..