MongoDB Replica Set 구성
개발일지2024. 9. 2. 23:17MongoDB Replica Set 구성

Replica Set 이란?MongoDB는 Replica Set을 생성함으로써 복제를 설정할 수 있다.데이터의 동일한 복사본을 여러 서버상에 보관하여, 안정적인 서버를 구성한다. 예를 들어 만약 서버가 고장이나서 이용 불가능한 상태일 때, 다른 복제본을 이용해서 정상적인 운영이 가능하다. Replica Set 구성 복제 셋은 프라이머리 서버와 , 프라이머리 데이터의 복사본을 갖는 세컨더리 서버 여러대로 이루어진다.프라이머리 서버는 클라이언트의 모든 작업 요청을 대표로 수행한다. 세컨더리 서버는 프라이머리에서 처리된 데이터를 복제하여 일관성을 유지한다. 프라이머리 서버에 장애가 발생하면, 세컨더리 서버는 자신들 중에 새로운 프라이머리 서버를 선출한다.그외, 데이터는 가지지 않고 선출에만 영향을 미치는 아비..

OneToMany
개발일지2024. 8. 21. 16:53OneToMany

학급 반 - 학생 관계를 OneToMany로 표현 OneToMany 단방향 class entity는 반에 속해있는 학생들(Student Entity)을 참조할 수 있다. @Entitypublic class ClassRoom { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; @OneToMany private List students; }@Entitypublic class Student { private String name; @Id @GeneratedValue(strategy = jakarta.persistence.GenerationType.IDENTITY) private int id;}..

서브쿼리를 이용한 조인 쿼리 개선하기(3) - JAVA 병목 원인 찾기
개발일지/문제 해결하기 ~2024. 8. 6. 00:54서브쿼리를 이용한 조인 쿼리 개선하기(3) - JAVA 병목 원인 찾기

https://gani-dev.tistory.com/141 서브쿼리를 이용한 조인 쿼리 개선하기(2) -쿼리 개선기https://gani-dev.tistory.com/140 서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석조인 쿼리 개선하기1. 현재 상황'당장' 서비스에는 모든 유저의 포인트를 조회하는 API가 있는데, 속도가 너무gani-dev.tistory.com지난 글에 이어서, 모든 유저 포인트 조회 기능을 개선해보려고 한다. 이전 상황유저 포인트 조회 기능 성능 향상을 위해 SQL을 개선했다서브쿼리를 이용하여 조인 비용을 줄임 성능테스트 - MTT 는 18초 -> 9초  46.73% 속도 개선됨그러나 아직도 9초나 걸린다는 문제가 있음실행 시간 측정 결과 , DB보다 Java 코드에..

서브쿼리를 이용한 조인 쿼리 개선하기(2) -쿼리 개선기
개발일지/문제 해결하기 ~2024. 8. 1. 01:11서브쿼리를 이용한 조인 쿼리 개선하기(2) -쿼리 개선기

https://gani-dev.tistory.com/140 서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석조인 쿼리 개선하기1. 현재 상황'당장' 서비스에는 모든 유저의 포인트를 조회하는 API가 있는데, 속도가 너무 느려 개선해보려고 한다. ERD이번 글은 , 저번 데드락 해결하기 글과 이어지는데, 아gani-dev.tistory.com 이전 글에서는 현재 쿼리의 분석과 문제점을 파악했다. 현재 상황 분석모든 사용자의 포인트를 조회했을 때,  MTT 는 18초 , TPS는 5.3을 기록했다.쿼리에서 oauth_id를 기준으로 인덱스 타고 있었음에도 불구하고,, 속도가 느린 문제가 발생했다.실행 계획을 통해 원인을 분석한 결과 ,  쿼리가 조인 연산을 대략 24만번 수행하고 있었다.sele..

서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석
개발일지/문제 해결하기 ~2024. 7. 30. 03:36서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석

조인 쿼리 개선하기1. 현재 상황'당장' 서비스에는 모든 유저의 포인트를 조회하는 API가 있는데, 속도가 너무 느려 개선해보려고 한다. ERD이번 글은 , 저번 데드락 해결하기 글과 이어지는데, 아래 ERD에서 User 테이블과 PointHistory 테이블을 확인해 보자User 테이블에는 사용자 정보가 저장되어 있고, PointHsitory에는 포인트 적립 및 사용 내역이 기록되고 있다. 예를 들어, oauth_id가 1인 유저가 혈당을 기록하여 200 포인트를 적립 받았다면, PointHistory 테이블에는oauth_id = 1, 포인트 유형(Product_name) = '혈당 기록' , 날짜시간(created_at) = '2024-08-25 11:26:23' , 반영된 포인트 (change_po..

연속 요청으로 인한 데드락 문제 해결하기
개발일지/문제 해결하기 ~2024. 7. 24. 02:04연속 요청으로 인한 데드락 문제 해결하기

문제 발견현재 ‘당장’ 서비스를 운영하고 있는 중인데, 가끔 point_history 테이블에 대해 데드락 문제나 중복키 문제가 발생했다. 데드락 발생 로그ERROR - Deadlock found when trying to get lock; try restarting transaction ... (생략) 중복키 발생 로그ERROR - Duplicate entry '더블PKID' for key 'point_history.PRIMARY' ... (생략)문제 원인로그를 통해 point_history 테이블에 insert할 때 위의 두 문제가 발생함을 확인할 수 있었다.  발생원인로그를 통해서 동시에 동일한 접속 요청이(같은 유저, 시간,분,초까지 동일한) 2번 있는 것을 확인했다. 말로만 듣던 따닥 (연속) ..

미니프로젝트 회고
개발일지2024. 7. 19. 16:45미니프로젝트 회고

유플러스 - 배달의 민족지금 듣고 있는 유플러스 수업에서 3일동안 jdbc와 Swing UI를 이용한 미니프로젝트를 진행하게 되었다.개인마다 주제를 선택할 수 있는데 , 우리 조는 음식 배달 서비스 ERD를 구성했기 때문에 이를 활용하기로 했다.음식 배달 서비스의 기본적인 기능은 아래와 같다.이번에는 비즈니스 로직보다는 ERD 구성과 효율적인 쿼리처리에 집중해서 프로젝트를 진행했다.기능로그인가게 및 메뉴 불러오기메뉴 (옵션) 선택장바구니주문하기 , 주문취소찜하기 , 전화하기ERD테이블은 아래와 같이 구성했다.실제 서비스를 하기에는 많이 부족한 ERD이지만, 깊이 고민하고 프로그래밍까지 하기에는 시간이 부족했다.지금은 간편하게 만들기 위해 디테일한 기능들을 제외시켰다.Users : 사용자 테이블Store ..

CS/디자인패턴2024. 7. 8. 15:51팩토리 패턴

팩토리 패턴 팩토리 패턴 팩토리 패턴 정의객체 생성 부분을 떼어내 추상화한 패턴, 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다.  팩토리 패턴이 필요한 이유 문제점피자를 생성하는 메서드를 아래와 같이 구현한다면, 피자의 종류가 늘어나거나 줄어들었을 때마다 코드가 변경될 것이다.public class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza = null; // 피자 종류가 바뀔때마다 바뀌는 부분 ========= if(type.equals("cheese")){ pizza = new Cheese..

image