본문 바로가기

JPA7

[커뮤니티 서비스] 포럼 조회시 페이징 반환 Slice로 처리 커뮤니티 서비스의 포럼 채널FitTrip의 커뮤니티 서비스에는 서버가 존재한다.서버 안에는 또 여러 개의 채널들이 존재한다. 채널채팅 채널음성 채널포럼 채널 여기서, 포럼 채널은 사용자의 일상, 챌린지 등 다양한 사진과 함께 간단 포스팅이 가능한 채널이다.(서버에 접속한 사람들끼리의 채팅도 가능하다.) 인스타그램, 페이스북 포스팅이라고 생각하면 간단할 것이다.  포럼 채널 페이징포럼 채널에는 카테고리마다 수많은 포럼이 존재할 수 있기 때문에 굉장히 많은 포럼들이 존재한다.따라서, 커뮤니티 서비스는 해당 포럼 채널을 적절히 페이징 처리를 해서 보내줘야 한다. 페이징을 해야하는 이유수많은 데이터가 DB에 있을 때 페이징 처리를 하지 않으면 데이터들을 DB로 가져오는데 너무 많은 비용과 시간 소모많은 데이터를.. 2024. 7. 18.
[FitTrip] DELETE IN을 사용한 배치 처리로 얻을 수 있는 성능 향상 DELETE시 IN 사용트러블 슈팅에서 DELETE IN 사용에 관한 내용을 다뤘다.하지만, 해당 작업이 실제로 의미가 있는지가 중요하다. 따라서, 직접 서비스 구동시 DB에 데이터를 추가하여 성능이 얼마나 향상되었는지 확인하기 위한 작업을 진행했다. 작업 대상으로 삼은 API는 채널 삭제 API이다.포럼 채널에 속해있는 포럼 100개각 포럼과 연관되어 있는 파일 100개포럼 100개, 파일 10000개로 구성  서비스 구동시 DB Init 코드@Slf4j@Component@RequiredArgsConstructorpublic class BatchTest { private final UserRepository userRepository; private final ServerRepository .. 2024. 7. 2.
[QueryDSL] QueryDSL이란? QueryDSL이란? 우선, DSL은 Domain Specific Language의 줄임말이다. 뜻은 특정 영역에 특화된 언어이다. 그렇기 때문에 QueryDSL은 쿼리 생성에 특화된 프레임워크이다. 우리가 QueryDSL를 사용하면 좋은 점이 무엇이 있을까? 그것에 관한 설명을 하기 전에 JPA와 JPQL에 관한 문제점에 대해 잠깐 알아보자. JPA JPA는 객체지향 어플리케이션과 RDBMS 사이의 패러다임 불일치를 해결해주는 역할을 하는 프레임워크이다. JPA 덕분에 우리는 객체지향 관점으로 개발할 수 있게 되고 JPA 프레임워크는 자동으로 SQL 쿼리문을 생성해준다. SQL문이 JPA에 의해 자동으로 생성되기에 개발자는 SQL 관점에서 프로그래밍을 하지 않아도 된다. 하지만, 그렇다하더라도 완전한 .. 2024. 3. 30.
Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 7 이번 포스팅에서는 AWS S3에 사용자의 프로필 이미지를 CRUD(?)한 과정을 담는다. AWS S3가 뭘까? AWS Simple Storage Service의 줄임말로 Object Storage 개념이 적용되었다고 생각하면 된다. 파일을 저장하고 불러오는 작업이 RESTful API를 통해 간단하고 뛰어난 보안성을 자랑한다. 장점 거의 무제한에 가까운 용량이다.(물론 용량 제한도 설정할 수 있다.) 보안성이 아주 좋다. 저렴한 비용 플랫 구조를 사용한 빠른 탐색 높은 객체 가용성 개인적으로 AWS S3는 학부연구생을 하며 Object Storage 개념의 Ceph에 관한 논문을 작성했기에 친숙했다. Object Storage 관련해서는 아래 포스팅을 참고 바란다. https://hdbstn3055.ti.. 2024. 2. 26.
Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 5 이번 글에서는 Order, Item에 관한 CRUD 구현과 관련 통합 테스트를 담은 내용이다. 하지만, 시작하기전에 앞 글에서 수정한 내용이 있다. 1. SecurityConfiguration 수정 주문과 관련된 사항들은 이메일 인증이 된 사용자들이 이용하는게 좋을 것 같다는 생각이 들어 관련하여 적용했다. public class SecurityConfiguration { ... @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ ... http.authorizeHttpRequests( authorize -> authorize.requestMatchers(EXCLUDE_URL.stream() .map(AntPa.. 2024. 2. 22.
[SpringBoot] OSIV와 성능 최적화 OSIV는 Open Session In View의 약자이다. OSIV는 Spring에 spring.jpa.open-in-view: true 기본값으로 설정되어 있다. OSIV 전략은 최초 데이터베이스 커넥션 시작부터 API 응답(View에 전송 및 DTO 반환 등)이 끝날 때 까지, 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 그렇기 때문에 View Template 또는 Controller에서 지연 로딩이 가능하다. 따라서, 개발자로 하여금 어느 곳에서도 데이터베이스 커넥션을 신경쓰지 않고 개발할 수 있게 해준다는 장점이 있다. 하지만, 해당 전략은 너무 오랜시간동안 데이터베이스 커넥션을 사용하기 때문에 실시간 트래픽이 중요하고 많은 애플리케이션에서는 커넥션 쓰레드 풀이 모자랄 수 있다. 이는 곧 .. 2024. 2. 1.