[ICTicket] - Redis 분산 락을 걸때 발생한 Transaction 문제
문제 상황 좌석 선택 기능에 분산 락을 적용한 후 테스트를 진행했는데, 좌석 상태가 DB에 정상적으로 업데이트되지 않는 문제가 발생했다. 원인을 확인해본 결과, 트랜잭션이 제대로 적용되지 않은 것을 발견했다. 왜 트랜잭션이 안걸렸을까? 아래 그림의 outerMethod는 분산 락을 획득하고, 해제하는 역할을 하고, innerMetho...
문제 상황 좌석 선택 기능에 분산 락을 적용한 후 테스트를 진행했는데, 좌석 상태가 DB에 정상적으로 업데이트되지 않는 문제가 발생했다. 원인을 확인해본 결과, 트랜잭션이 제대로 적용되지 않은 것을 발견했다. 왜 트랜잭션이 안걸렸을까? 아래 그림의 outerMethod는 분산 락을 획득하고, 해제하는 역할을 하고, innerMetho...
문제 상황 분산 락을 적용하고 key를 하나로 관리하는 상태임을 발견. 이는 Seat 테이블 자체에 락을 거는 느낌으로, 요청들이 서로 다른 공연의 좌석을 선택하려고 하더라도 모두 하나의 key를 기다리는 상황이라 비효율적이라고 판단 해결 방법 공연의 회차별로 하나의 Key를 공유하게 설정하여, 같은 회차의 좌석 예매에 대...
1. Array vs ArrayList Array 배열은 크기가 고정되어있어, 선언 시 크기를 지정해야 하며, 이후 변경할 수 없습니다. 기본 자료형과 객체형 데이터 모두 저장할 수 있습니다. 데이터 추가, 삭제시 인덱스로를 통해 직접 접근하여 조작해야 합니다. ArrayList 내부적으로 크기가 동적으로 증가합니다. ...
컨트롤러 테스트 컨트롤러를 테스트하기 위해서는 몇가지 신경써줘야 하는 것이 있다. MocMvc, WebApplicationContext, 시큐리티 관련 세팅을 해주어야한다. 시큐리티 제외 테스트 먼저 처음에는 프로젝트에서 사용하는 시큐리티를 제외시키고 테스트를 하는 방법으로 테스트 코드를 작성했다. excludeFilters를 작성하고, Sec...
문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. ...
컨트롤 제트 문제 설명 숫자와 “Z”가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 “Z”가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 “Z”로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요. 제한사항...
객체가 아닌 기본형 int, char, double 등의 기본형 타입은 객체가 아니다. 따라서 다음과 같은 객체지향의 장점을 적용시킬 수 없다. 객체 메서드 사용 불가능 객체는 유용한 메서드를 제공할 수 있는데, 기본형은 객체가 아니라서 메서드를 제공할 수 없다. String str = "hello java"; str.split(" "); // 공...
String의 단점 지난 포스트 String에서 String은 불변이라고 배웠다. 불변인 String의 단점은 문자를 더하거나 변경할 때 마다 계속해서 새로운 객체를 생성해야한다는 점이다. 반복문 안에서 문자를 계속해서 더하거나 변경하는 상황이라면, 많은 String 객체가 생겼다가 GC에 의해 사라짐을 반복하게되고, 이는 cpu, 메모리 낭비로 직...
String 클래스 자바의 기본형 중에 문자를 다루는 타입은 char이다. char를 사용해서 문자를 여러개 나열하려면 char[]를 사용해야하는데, 이는 매우 불편하므로 자바는 문자열을 편하게 다룰 수 있는 String 클래스를 제공한다. String은 int, char와 다르게 대문자로 시작하는 것을 보아, 기본형이 아니라 참조형인 것을 알 수...
불변 객체 불변 객체란? 불변 객체는 객체의 상태(내부 멤버변수)가 변하지 않는 객체를 말한다. 코드적으로 쉽게 생각하면 모든 멤버변수가 final로 선언되어 있는 객체이다. 따라서 읽기전용 getter 메서드를 제공하고, 내부 상태를 변경할 수 있는 setter는 제공하지 않는다. 불변 객체를 사용하는 이유 자바에서 객체...