현재 진행중인 특가 항공권 프로젝트에서는 해당 항공권이 판매 시작 시간이 되었을 때, 많은 트래픽이 몰릴 것으로 예상하였고,이 때문에 항공권의 남은 좌석 수에 대한 동시성 처리가 필요했습니다.이를 해결하기 위해 다양한 방법을 테스트 해보았습니다.테스트 환경테스트는 동시성 문제를 일으키기 위해 어느정도의 부하가 필요했기 때문에 부하 테스트 툴인 k6 를 사용하였습니다.스크립트현재 프로젝트에서는 로그인한 사용자만 예매가 가능했기 때문에, 우선 로그인을 진행한 후 예매를 진행하는 방식으로 스크립트를 구성하였습니다.약 400 RPS(로그인 + 예매) 를 고정적으로 유지하기 위해 constant-arrival-rate executor 및 이를 유지하기 위한 vuser 의 수를 200 보다 큰 값인 400 정도로..
분류 전체보기
현재 진행중인 프로젝트에서, 항공권 예매시 동시성 문제를 해결하기 위해 여러 방법을 테스트 하던 중, 너무 오랜 시간이 소요되는 것을 발견하였습니다.테스트 환경테스트는 동시성 문제를 일으키기 위해 어느정도의 부하가 필요했기 때문에 부하 테스트 툴인 k6 를 사용하였습니다.스크립트현재 프로젝트에서는 로그인한 사용자만 예매가 가능했기 때문에, 우선 로그인을 진행한 후 예매를 진행하는 방식으로 스크립트를 구성하였습니다.약 400 RPS(로그인 + 예매) 를 고정적으로 유지하기 위해 constant-arrival-rate executor 및 이를 유지하기 위한 vuser 의 수를 200 보다 큰 값인 300 정도로 설정하였습니다.import http from "k6/http";import { sleep, ch..
현재 진행하고 있는 프로젝트에서, 항공권 조회 API 를 개발하던 중, 조회 쿼리에서 과도한 시간이 걸리는 것을 확인하였습니다.조회 테이블 구조조회 쿼리항공권 조회시, 출발지와 도착지 및 출발 날짜를 검색 조건을 걸어주었고,해당 내용을 포함하여 조회 쿼리에서는 다음의 조회 조건으로 작성하였습니다.1. 출발지와 도착지2. 출발 시간3. 삭제 여부4. 할인 진행 여부SELECT flights_info.id, flights_info.departures, flights_info.arrivals, flights_info.departure_time, flights_info.arrival_time, flights_info_option.original_price, flights_..
라우팅이란, 네트워크에서 데이터(패킷)을 보낼 때 최적의 경로를 선택하는 과정이며, 라우터가 수행합니다.라우터라우터는 네트워크 사이에서 데이터를 전달하는 장치입니다.일반적으로 별개의 네트워크 사이에 위치하고, 라우팅 테이블을 통해 최적의 경로로 데이터를 전달합니다.라우팅 테이블라우팅 테이블은 IP 주소를 기반으로하며, 최종 목적지와 여러 경로 내의 다음 목적지(홉)의 주소를 담고 있습니다.내부 구성Network DestinationNetmaskGatewayInterfaceMetric101.25.67.0255.255.255.010.0.0.2eth31Network Destination(목적지)- 최종 목적지의 IP 주소를 담고 있습니다.Netmask(서브넷 마스크)- 최종 목적지 네트워크를 식별하는데 사용되..
DNS 는 인터넷 도메인 이름과 IP 주소를 매핑해주는 시스템입니다.실제 네트워크 상의 논리적 주소를 식별하기 위해서는 IP 를 사용해야 하지만, IP 를 직접 다루는 것은 실수할 여지가 많기 때문에 도메인 주소와 IP 주소를 매핑하고, 도메인 주소를 통해 목적지를 식별할 수 있도록 함으로서 사용편의성이 증가하게 됩니다.또한, 해당 서버의 IP 가 변경되었을 경우 클라이언트에서는 이를 식별해야 하는데, 이 과정 또한 추가적인 비용이 들기 때문에도메인을 사용하여 서버측에서는 IP 를 변경하여도 클라이언트에서는 도메인 주소를 그대로 사용할 수 있습니다.DNS 서버도메인 주소를 살펴보면 www.naver.com / www.google.com 등의 . 을 기준으로 연결된 형태를 띄고 있습니다.이를 체계적으로 ..
·스프링
스프링에서는 트랜잭션 로직을 추상화시켜 JPA, JDBC 등 기술에 의존적이지 않고 트랜잭션을 편하게 사용할 수 있도록 지원합니다.특히, @Transactional 어노테이션은 AOP 를 이용하여 더욱 트랜잭션을 쉽게 사용할 수 있도록 도와줍니다.PlatformTransactionManager스프링 트랜잭션 추상화의 핵심 인터페이스 입니다.TransactionManager 를 상속받으며, 하위 다양한 구현체들이 기술에 맞게 구현되어 있습니다.트랜잭션 관련 기능- 트랜잭션 획득 : getTransaction(...)- 트랜잭션 커밋 : commit(...)- 트랜잭션 롤백 : rollback(...)리소스(커넥션) 동기화 기능트랜잭션을 유지하기 위해서는 데이터베이스와의 연결인 커넥션이 필요합니다.트랜잭션을..
·JPA
EntityManager는 Entity 의 생명주기를 관리하며, 쿼리를 실행하는 등의 기능을 담당합니다.이 때, 영속성 컨텍스트라는 공간을 통해 이러한 기능을 지원하게 됩니다.영속성 컨텍스트영속성 컨텍스트란, Entity를 저장하고 관리하기 위한 논리적인 공간입니다.Entity 의 생명 주기 - 상태비영속영속성 컨텍스트 에 저장되어있지 않으며, 저장되었던 적이 없는 상태를 의미합니다.즉, 영속성 컨텍스트와 전혀 무관한 상태를 의미합니다.영속현재 영속성 컨텍스트에서 관리되고 있는 상태를 의미합니다.준영속이전에 관리를 받았지만, 잠시 관리를 벗어난 상태를 의미합니다.삭제영속성 컨텍스트에서 제거된 상태를 의미합니다.EntityManager 의 메서드를 통한 Entity 의 상태 관리참고em.merge() 는 ..
·JPA
JPA(Java Persistence API) 란, 자바 진영의 ORM 기술 표준 명세로서 객체지향 언어인 자바와 관계형 데이터베이스 간 데이터를 다루는 방식의 차이점으로 인해 발생하는 문제점을 해결해주고,이에 더해 자바 코드로 SQL을 다룰 수 있도록 함으로써, SQL 의존적인 개발에서 벗어나 객체지향 언어인 자바 중심의 개발을 할 수 있도록 도와줍니다.JPA 는 표준 명세이기 때문에 다양한 구현체가 존재하며, 대표적으로 hibernate, eclipse link 등이 존재합니다.JPA 의 사용 이유패러다임의 불일치자바에서는 객체를, 데이터베이스에서는 테이블을 기준으로 설계가 진행되며, 데이터를 다루는 방식 또한 다릅니다.주요한 차이점은 다음과 같습니다.[연관된 데이터]객체에서는 각 객체들간의 관계를 ..