728x90

전체 글 199

CAP 이론

일관성(Consistency), 가용성(Availability), 분할 내구성(Partition tolerance)의 세 가지 특성을 설명하는 분산 시스템의 이론입니다. 이 이론은 분산 시스템이 어떻게 동작해야 하는지에 대한 가이드라인을 제공합니다. 일관성(Consistency) 모든 노드가 동일한 순간에 동일한 데이터를 볼 수 있어야 합니다. 어떤 노드에서 데이터가 갱신되면, 이 변경 사항은 다른 모든 노드에 즉시 반영되어야 합니다. 가용성(Availability) 모든 요청은 성공 또는 실패로 완료되어야 하며, 응답이 없는 상태는 없어야 합니다. 어떤 노드가 실패하더라도 시스템은 계속해서 작동할 수 있어야 합니다. 분할 내구성(Partition Tolerance) 네트워크의 일시적인 분할(네트워크 장..

Server 2024.02.03

Timline 읽어오는법 ( pull/push Model )

TimeLine Follow 같은 구조일 경우 Follow 된 User의 Post 까지 가져오는 2가지 방식을 설명 1. Pull Model(Fan Out On Read) 시간 복잡도 log(Follow 전체 레코드) + 해당회원의 Following * log(Post 전체 레코드) 단점 사용자가 매번 홈에 접속할때마다 부하가 발생한다.(사용자 Follow를 매번 OR 조건으로 검색해야 한다.) 사용 하는 업체 : FaceBook 기술적 한계 로 인한 정책 Facebook에서 최대 5000명의 친구를 보유할수 있습니다. 5000명 이상의 사람들과 연결해야 하는 경우 개인 계정을 Facebook 페이지로 변경하세요. 다른 친구 요청을 보내려면 먼저 누군가와 친구 관계를 끊어야 합니다. 2. Push Mod..

BackEnd 2024.02.03

커버링 인덱스

커버링 인덱스 검색 조건이 인덱스에 부합하다면, 테이블에 바로 접근 하는 것 보다 인덱스를 통해 접근하는 것이 매우 빠르다.(절대적이진 않다.) 그렇다면 테이블에 접근하지 않고 인덱스로만 데이터 응답을 내려줄 순 없을까? -> 커버링 인덱스 (인덱스로만 커버 하겠다) 예 Index Table 나이 id 19 3 27 2 32 1 45 4 회원 Table id 이름 성별 나이 직업 1 홍길동 남 32 경찰 2 김천사 여 27 목사 3 이순신 남 19 어부 4 김철수 남 45 개발자 1. 아래 쿼리를 실행하게 된다면..? SELECT 나이 FROM 회원 WHERE 나이 < 30 Index Table에서 나이가 19, 27을 찾게 된다. 이후 회원 Table 에서 나머지 정보를 찾게 된다.하지만 원하는 정보는..

BackEnd 2024.01.25

페이지 네이션 방식(오프셋, 커서) 장단점

페이지 네이션 오프셋 방식 장점: 간편하고 직관적인 구현이 가능하다. 특정 페이지로 쉽게 이동할 수 있다. 단점: 대량의 데이터에서 성능이 저하될 수 있다. 페이지를 건너뛸 때마다 모든 이전 데이터를 가져와야 하므로 비효율적이다. 데이터베이스에 새로운 항목이 추가되거나 삭제될 때 문제가 발생할 수 있다. 커서 방식 장점: 대량의 데이터에서 효과적으로 작동한다. 페이지의 일부만 가져오므로 성능이 향상된다. 데이터베이스에서 변경이 발생해도 영향을 받지 않는다. 단점: 특정 페이지로 직접 이동하기 어렵다. 이전 페이지로 돌아가거나 특정 페이지로 이동하려면 추가적인 로직이 필요하다.

BackEnd 2024.01.25

Index 주의 할점

인덱스를 다룰대 주의해야 할점 0. Cardinality가 높은 컬럼에 사용 중복이 적으면 카디널리티가 높다. ex) 마트 품목(소고기/돼지고기/닭고기/콜라/사이다/햇반/어묵 등등....) 중복이 많으면 카디널리티가 낮다. ex) 성별(남/여)1. 인덱스 필드 가공 잘못된 예제 // age는 int 타입 SELECT * FROM Member WHERE age * 10 = 1 // 1. BTree 형태 이므로 가공 하면 Index 비교가 되지 않는다 WHERE age = '1' // 2. age는 int 타입이므로 Index 비교가 되지 않는다 2. 복합 인덱스 예제 1. 단일 과일 PK Apple 1 Banana 4 Banana 5 Butter 3 예제 2. 복합 과일 원산지 PK Apple USA 1 ..

카테고리 없음 2024.01.21

Index Hint

Mysql Index Hint Query문을 실행하면 Mysql 에서 Index를 판단하여 실행하게 된다. 하지만 Mysql이 판단하는 Index는 매번 최적의 성능 실행 할순 없다. 그래서 Index Hint를 사용한다. 종류 참고 FORCE INDEX(인덱스명) 강제로 특정 Index를 사용하게 한다. USE INDEX(인덱스명) 특정 Index를 우선적으로 사용하지만 다른 Index가 더 좋다고 판단하면 다른 Index를 사용한다. IGNORE INDEX(인덱스명) 특정 Index를 제외 하고 사용한다. 예 SELECT createdDate, memberId, count(id) AS count FROM POST use index(POST_memberId_createDate_IDX) WHERE mem..

DB 2024.01.20

[간단한 성능 테스트] 간단한 성능 테스트_1 (DB Insert)

개요 프로젝트 개발을 하다가 원하는 성능이 나오지 않으면 성능 최적화 작업을 한다. 하다 보면 원하는 성능이 나오는데 프로젝트 말고 그냥 평소에 개념으로 어느것이 더 빠르고 느린지는 알고있지만 실질적으로 몇배나 차이나는지 확실하게 알지 못하는 내용이 있었다 이 [간단한 성능 테스트]는 이러한 개념을 알지만 확실하게 알지 못하는 성능차이를 테스트 하기 위해 글을 작성 하였다. 테스트 전 모든 시간 차이는 내 노트북 기준 입니다. 비교 Spec 내용 : DB Insert 10000(만)건 Insert DB : Mysql 조건 forEach() Insert stream().parallel().forEach() Insert parallelStream().forEach() Insert Bulk Insert 테스트..

BackEnd/Spring Boot 2024.01.20

Mysql Trigger

Mysql Trigger 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행되는 것을 말한다 사용법 변경 전 또는 변경 후의 행은 OLD, NEW라는 가상 줄 변수를 사용하여 읽을 수 있다 old - 예전 데이터 즉, delete 로 삭제 된 데이터 또는 update 로 바뀌기 전의 데이터 new - 새 데이터 즉, insert 로 삽입된 데이터 또는 update 로 바뀐 후의 데이터 -- Trigger 리스트 출력 SHOW TRIGGERS; -- Trigger 삭제 DROP trigger trigger_test; -- Trigger 생성 DELIMITER $$ -- 구분선과 같은것 CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE| DELET..

DB 2023.12.06

Propagation

트랜잭션 전파 (Propagation) 트랜잭션 전파는 스프링에서 트랜잭션 메서드가 이미 실행 중인 트랜잭션을 어떻게 처리해야 하는지를 제어하는 속성입니다. 스프링은 @Transactional 어노테이션을 사용하여 트랜잭션 전파를 설정할 수 있습니다. 트랜잭션 전파 옵션 Propagation.REQUIRED 메서드가 이미 실행 중인 트랜잭션이 있는 경우 해당 트랜잭션을 재사용하고, 트랜잭션이 없는 경우에는 새로운 트랜잭션을 시작합니다. Propagation.REQUIRES_NEW 메서드가 항상 새로운 트랜잭션을 시작하고, 이미 실행 중인 트랜잭션은 일시 중단됩니다. Propagation.SUPPORTS 메서드가 이미 실행 중인 트랜잭션을 재사용하고, 트랜잭션이 없는 경우에도 트랜잭션 없이 실행됩니다. P..

BackEnd/Spring Boot 2023.09.07

구독 QueryDSL 및 Redis 사용 개발

참고 Broadcaster_api 방송 API Entity 기본 설명 API API BroadcastController POST /broadcast 방송국 등록 (미 등록시 일반 User) GET /broadcast/{id} 방송국 상세 조회 GET /broadcast/users/{id} 방송국 Fan 상세 조회 GET /broadcast 방송국 리스트 조회(페이징) PUT /broadcast (DJ가 사용자를 Block) 방송국 데이터 수정 FollowController POST /follow 방송국 Follow 하기 PUT /follow Follow Block (사용자가 DJ를 Block) Sign POST /sign/up 회원 가입 POST /sign/in 로그인 테스트 BroadcastContro..

BackEnd/Spring Boot 2023.08.27
728x90