스프링 프로젝트/DND

MongoDB는 데이터 정합성이 낮은 대신, MySQL보다 빠른 읽기/쓰기 속도를 제공한다.그렇기 때문에 채팅처럼 입출력이 많을 때 사용하기 적합하다. 이번 글에서는 채팅 메시지를 MongoDB에 저장한 후, 채팅방별 최근 메시지를 조회해볼 것이다. MongoDB 컬렉션 매핑하기MySQL이 table을 사용한다면, MongoDB는 collection을 사용한다.@Document로 MongoDB의 collection을 매핑하였다. JPA Auditing을 사용하지 않으므로 createdAt을 직접 넣어주었다.그런데 DB에서는 시간이 UTC 기준으로 저장되어서 불편했다.이에 UTC로 변환된 값을 DB에 저장하고, 데이터를 가져올 때 다시 KST로 변환하는 코드를 추가하였다. collection이 제대로 매핑..
쿼리 성능 테스트를 위해 대용량 데이터를 삽입해야 했다.평소에는 데이터 삽입 시 saveAll()을 사용했는데, batch insert를 사용하면 빠르게 삽입할 수 있다. 이번 글에서는 batch insert로 대용량 데이터를 삽입해 보고, saveAll()과의 성능 차이를 비교해 보려고 한다. 그전에 batch insert에 대해 간략히 알아보자.Batch insertbatch는 대량의 작업을 한 번에 처리한다는 뜻이다.batch insert는 여러 SQL 명령을 그룹화하여 단일 네트워크 호출로 DB 서버에 전송한다. batch insert는 JPA, JDBC 두 방식으로 구현할 수 있다. JPA로 batch insert 구현JPA 사용 시 아래처럼 batch size 설정을 추가해 배치를 구현할 수 ..
배경저는 진행 중인 프로젝트에서 채팅 기능을 담당하고 있습니다.기획에 따르면, 일주일이 지난 채팅 요청은 자동 거절되어야 합니다. 이를 구현하기 위해 스케줄러를 돌려 채팅 요청들의 상태를 bulk update 해주었습니다. 채팅요청 상태가 대기중이고, 현재 시간을 기준으로 생성된 지 일주일이 지났을 때채팅요청 상태를 거절됨으로 변경해 주는 코드입니다.public void updateChatInquiryStatusRejected() { queryFactory.update(chatInquiry) .set(chatInquiry.status, InquiryStatus.REJECTED) .where( chatInquiry.status.eq(InquiryStatus..
배경AWS는 각 Public IPv4 주소에 대해 시간당 0.005달러의 과금을 부과한다.따라서 과금을 줄이기 위해서는 Public IPv4 사용을 최소화해야 한다. 나는 아래의 목적으로 EC2, RDS에 대해 각각 public ip를 사용했었다.- EC2: 배포한 서버에 탄력적 IP 매핑- RDS: intellj와 DB 연결하여 편리하게 DB 수정 및 조회 다행인 점은 EC2는 IPv4 사용이 무료이다.그래서 RDS 인스턴스만 Public IPv4를 사용하지 않도록 바꾸면 된다. 내부 네트워크로 RDS에 접근하면 IPv4 없이도 RDS 인스턴스에 연결할 수 있다.아래 그림처럼 외부에서 EC2 public subnet으로 접근하고 이를 통해 다시 RDS private subnet으로 접근한다. RDS 생..
hyun_12
'스프링 프로젝트/DND' 카테고리의 글 목록