전체 글 썸네일형 리스트형 MySQL 성능 개선 프로젝트 5 하나의 트리거안에 여러가지 작업을 실행시키는것보다 작업들을 각각의 프로시저로 만든다음 전체를 실행시켜주는 프로시저로 나누었다. 이렇게 한 이유에는 한 트리거안에 복잡한 작업들이 여러개 실행된다면 성능저하가 우려되고, 또한 그 중 한가지 작업이라도 에러가 발생한다면 모두 롤백되기 때문이다.이를 프로시저로 바꾼다면 성능저하도 해결할 수 있고, 또한 트랜잭션을 관리해줌으로써 중간에 에러가 발생하더라도 꼭 필요한 데이터에 대한 작업은 실행이 될것이다.delimiter //DROP procedure if EXISTS insert_delivery_processing;CREATE PROCEDURE insert_delivery_processing(in updated_order_id BIGINT)BEGIN DECLARE.. 더보기 MySQL 성능 개선 프로젝트 4 배송 주문이 생성될 때 해당 주문의 총 가격에 따라 보험상품을 가입해야 하는 기능이 있다.어떤 배송건이 어떤 상품을 가입했는지와 해당 상품들에 대한 테이블을 새로 만들어야했다. 그리고 지난번에 만든 배송 주문 통합 프로시저 안에 관련된 프로시저를 생성해 추가하면 될것이다.delimiter //DROP PROCEDURE if exists insert_delivery_insurance;CREATE PROCEDURE insert_delivery_insurance(new_dv_order_id BIGINT)BEGIN DECLARE selected_order_id BIGINT; DECLARE selected_total_price DECIMAL(10,2); DECLARE selected_product_id bigi.. 더보기 MySQL 성능 개선 프로젝트 3 자동으로 주문에서 배송기사를 할당해 배숭 주문 테이블에 데이터를 생성하는 배송 주문 할당 기능을 구현해야 한다.결제완료에서 상품준비중으로 상태가 변경되면 배송 주문 테이블에 데이터가 생성되어 배송기사가 배송을 시작하면 배송중으로 바뀌는 것이다.이때 배송기사와 고객간의 채팅 채널도 생성되어야 한다delimiter //DROP PROCEDURE if EXISTS insert_delivery_order;CREATE PROCEDURE insert_delivery_order(pm_order_id bigint)BEGIN DECLARE selected_storage_id BIGINT; DECLARE selected_delivery_type VARCHAR(255); DECLARE selected_worker_id BI.. 더보기 MySQL 성능 개선 프로젝트 2 배송에 관한 이벤트와 장비의 데이터가 들어가있는 두 테이블이 있다.여기서 각각 활성화 여부, 점검 필요 유무 컬럼은 다른 컬럼과 오늘의 날짜를 비교해 컬럼의 상태가 변해야 한다.이 과정을 자동으로 처리해주기 위해서 처음에는 Generated Columns를 활용해볼 생각이었다.delivery_event 테이블을 예로들자면 `is_active` TINYINT(1) AS ( CASE WHEN `start_date` NOW() AND ( `end_date` IS NULL OR `end_date` >= NOW() ) THEN 1 ELSE 0 END) STORED와 같이 컬럼을 구성하였다.하지만 이와 같이 짠다면 에러가 발생한다. 그 이유는 Generated Column에 NOW()와.. 더보기 MySQL 성능 개선 프로젝트 1 주문 배송 시스템에 대해 데이터베이스 설계부터 성능 개선까지를 목표로하는 프로젝트를 시작했다. 요구사항에 맞춰 기능명세서를 작성하고 필요한 테이블들을 구성했다. 도메인은 고객, 상품, 주문, 배송으로 나눠져 있으며 기능이 많아 DB의 크기가 생각보다 크게 설계되었다. 내가 맡은 배송부분의 기능 중에 배송 우선순위를 정하는 프로세스가 가장 난감했는데, 이 프로젝트는 DB만으로 진행되는 프로젝트라서 우선순위를 정하기 위한 위치정보와 거리계산이 어려울 것 같았다. 고민끝에 두가지 방법을 생각해봤는데,첫번째는 고객의 주소가 입력될 때 위도와 경도를 같이 입력하여 이를 활용한 거리계산을 하는것이다. 이 방법을 쓰면 정확한 거리계산을 통해 우선순위를 정할 수 있겠지만 상당히 복잡한 데이터들이 들어가야 하고 입력.. 더보기 20240125 SSE를 통해 알림 기능 구현 @RestController @RequiredArgsConstructor @RequestMapping("/api/notification") public class NotificationController { private final NotificationService notificationService; public static Map sseEmitters = new ConcurrentHashMap(); @GetMapping( "/subscribe") public SseEmitter notification(@AuthMember Member member) { SseEmitter sseEmitter = notificationService.subscribe(member.getId.. 더보기 20240118 세션 기반의 인증방식은 클라이언트의 인증정보를 서버측에서 저장하고 관리한다. 이때 세션을 식별하기위한 Session ID를 기준으로 정보를 저장하고 해당 Session Id는 쿠키로 저장된다. 장점으로는 상대적으로 안전하고 서버에서 로그인 상태확인이 굉장이 유용하다는 점이 있지만 단점으로는 유저들의 세션에 대한 정보를 서버 메모리에 들고 있기 때문에 이를 조회하는 과정이 이용자가 많아질 경우 부담이 갈 수 있다는 점이있다. 토큰기반의 인증방식은 유저가 로그인 후 서버에서 정보를 기록하는 대신에 토큰을 발급한다. 클라이언트는 발급받은 토큰을 저장해 요청마다 Header에 토큰을 담아 보내고 서버에서는 해당 토큰을 확인한다. 장점으로는 서버 메모리에 부담이 되지않는다는 점이 있지만 반대로 데이터자체의 길이가.. 더보기 20240116 GET 데이터를 조회할 때 사용되는 방식으로 URL을 통해 파라미터를 전달한다. 따라서 주소창에 파라미터가 노출되기 때문에 보안상 중요한 정보를 다루면 안 된다. 여러 번 같은 요청을 보내도 결과가 달라지지 않는다. POST 데이터를 생성할 때 사용되는 방식으로 Http Body에 데이터를 포함해서 전달한다. 브라우저에 파라미터가 노출되지 않는다. 여러 번 요청을 보낸다면 데이터가 계속 생성되므로 결과가 달라진다. OSI 7계층이란 네트워크 통신이 일어나는 과정을 7단계로 나는 것을 말한다. 1. 물리 계층 전기적 신호가 나가는 물리적인 장비를 뜻한다. 데이터를 전기적인 신호로 변환해서 주고받는 기능만 한다. 2. 데이터 링크 계층 정보의 오류와 흐름을 관리해 안전한 정보의 전달을 수행할 수 있도록 도와.. 더보기 이전 1 2 3 4 5 ··· 10 다음