Development (155) 썸네일형 리스트형 [Diary] 300만 데이터 전체 조회 성능 개선기 (projection, 테이블 최적화) 이 글에서는 프로젝트를 진행하면서 간단한 방법으로 성능 개선을 수행했던 방법들을 소개하고자 합니다. 테스트 데이터는 300만개 입니다.소프트 삭제 정책에 따른 삭제 테이블 분리하기소프트 삭제(Soft Delete)란 데이터베이스에서 실제로 데이터를 삭제하지 않고, 대신 해당 데이터가 삭제된 것처럼 처리하는 방식입니다. 이를 위해 보통 데이터 테이블에 is_deleted와 같은 플래그(삭제 여부를 나타내는 필드)를 추가하고, 해당 값이 true로 설정된 경우에는 해당 데이터를 "삭제된" 것으로 간주합니다. 따라서 매 조회 쿼리 마다 is_deleted = false라는 조건을 추가해야 하는데, 조건을 추가한다는건 결국엔 DBMS가 추가적으로 작업을 시키게 됩니다. 모든 조회 쿼리에 이 조건을 추가하는 것은.. [Diary][Spring]GitHub Actions로 단위 테스트 환경 구성하기 (Github Service Container) MSA 프로젝트에서 테스트는 특히 외부 의존성을 많이 사용하게 될 경우 복잡해집니다. Redis, DB, Kafka 등 외부 리소스가 있다면, Mocking이나 다수의 서버 및 컨테이너 구동이 필수적이라, 테스트를 생략하고 PR을 진행하는 경우도 빈번하게 발생합니다. 이 글에서는 GitHub Actions를 통해 실제 개발 환경을 자동으로 구성하여 테스트를 자동화하는 방법을 소개합니다.문제 상황: gradle build -x test초기 CI 구성 시에는 gradle build -x test 명령어로 테스트를 건너뛰었다. 외부 Redis, DB, Kafka 등의 의존성이 테스트 중 연결되어야 하는데, 이로 인해 테스트 시 에러가 발생하기 때문이다. 그러나 이렇게 테스트를 생략하면, 서버 실행 후 발생할 .. [PS] 프로그래머스 [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 java 풀이 (14번에서 틀린 이유) https://school.programmers.co.kr/learn/courses/30/lessons/340212?language=java 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr초기 문제 접근level 값을 때려 맞춰야할 것 같으니 이분 탐색을 떠올렸다.문제 시나리오 대로, diff diff가 더 높으면 i가 0 일 경우 total += (long) (diff - level) * timeCur + timeCur;i가 0보다 클 경우 total += (long) (diff - level) * (times[i - 1] + timeCur) + timeCu.. [Diary] Apache Cassandra에서 MongoDB 전환기 저는 이커머스 개발 프로젝트에서 배송 도메인의 대한 데이터베이스로 Apache Cassandra를 처음에 선택했는데요, 얼마 지나지 않아 MongoDB로의 마이그레이션을 결정했습니다.이 글에서는 데이터베이스를 선택하면서 했던 고민들을 작성합니다.일단, 왜 NoSQL?쓰기 성능 최적화NoSQL은 설계상 많은 양의 쓰기 작업에 대해 높은 성능을 발휘하도록 최적화되어 있다. NoSQL의 쓰기 성능이 RDBMS보다 빠른 이유는 데이터 일관성 요구 사항을 완화하고, 복잡한 스키마 및 트랜잭션 처리를 배제한 설계 덕분에 쓰기 시 오버헤드가 적기 때문이다.유연한 스키마와 데이터 모델링배송 경로가 자주 추가, 업데이트된다면 NoSQL의 유연한 스키마가 적합하다. NoSQL에서는 구조가 고정되지 않아 데이터를 효율적으로.. [Reflection] Kafka를 활용한 이벤트 기반 아키텍처 구축 #우아콘2023 #우아한형제들 Kafka를 활용한 이벤트 기반 아키텍처 구축 #우아콘2023 #우아한형제들 (youtube.com)위 동영상을 회고하는 글 입니다.이벤트 기반 아키텍처를 왜?배달 시스템의 복잡도 증가배달 시스템이 커지면서 단순 배달 기능 외에 통계, 알림, 쿠폰 발급, 배달 시간 관리 등 다양한 기능이 요구되고 있습니다. 배달 시스템은 단순히 배달만 잘 수행하길 원했지만, 고객에게 실시간 알림을 제공하고 통계를 위한 데이터를 수집하며 쿠폰을 발급하는 등 복잡도가 크게 증가하고 있습니다. 이런 상황에서 이벤트 기반 아키텍처를 도입하면 시스템 복잡도를 낮추면서도 기능별로 유연하게 확장할 수 있습니다. 이벤트 기반 아키텍처는 핵심적인 배달 흐름과 부가 기능을 분리해 배달의 일관성에 영향을 주지 않고도 통계나 알림 같은 부가.. [Diary] Domain Driven Design에서 Spring Data Repository 의존성 역전하기 개발을 진행하면서 Repository는 데이터베이스와의 연동을 담당하는 핵심 구성 요소로 사용됩니다.일반적으로 Spring Data JPA를 사용하여 JpaRepository가 있죠. 이를 상속받아 필요한 DB CRUD 기능을 구현하게 됩니다.그렇다면 Domain Driven Design(DDD)에서는 이러한 Repository 클래스들이 어느 계층에 위치해야 할까요? 그리고 어떤 구조로 구현하는 것이 이상적일까요?이 글에서는 Repository에 대한 의존성 역전(DIP)을 구현하는 방법과 그 이유에 대해 자세히 다루고자 합니다.RepositoryRepository는 애플리케이션에서 데이터 접근 계층을 담당하는 핵심 구성 요소이다.데이터베이스와의 상호 작용을 추상화하여 비즈니스 로직이 데이터 저장소의 .. [PS] 프로그래머스 level 2 마법의 엘레베이터 java 풀이 코딩테스트 연습 - 마법의 엘리베이터 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr초기 문제 접근처음엔 백트래킹? BFS? 등 완전 탐색을 생각했다.근데 그건 말이 안 된다. 너무나 많은 경우의 수가 존재한다.그리디인가? 동전 거스름돈처럼 큰 수부터 나누면 되는가?근데 음수도 존재해서 이것도 아니다.직접 if 문으로 조건을 따져야 하는 건가? 현재 자릿수가 6이면 10에서 빼는 거로 하고..그러면 올림의 경우, 앞자리에 1을 더해야 하는데.. 만약 더하는 게 더 많은 돌을 필요로 하면..? (머릿속이.. [PS] 백준 14940 쉬운 최단거리 java 풀이 (자꾸 3%에서 틀리네) 14940번: 쉬운 최단거리 (acmicpc.net)문제 접근전형적인 BFS 문제 같다.시작점부터 시작해서 BFS 시작그런데 자꾸 3%에서 틀렸다 나오길래 질문게시판을 찾아보았다.메모리 초과다시 같은 곳을 방문하지 않도록 방문 표시를 해주어야 한다. 안 그러면 Queue에 많은 좌표가 가득차게 된다.틀렸습니다도달할 수 없는 곳은 -1로 출력을 해야 한다. 이 처리를 안 해주면 3퍼에서 틀렸다고 나온다.따라서 필자는 방문 표시를 isVisited 배열을 만드는 대신 방문한 곳은 map 값을 -1로 바꾸어주었고, 도달하지 못한 곳은 이 값이 아직 1로 남아있기 때문에 이를 처리해주었다.코드import java.io.BufferedReader;import java.io.IOException;import jav.. 이전 1 2 3 4 5 ··· 20 다음