Search
Duplicate

예상 질문에 대한 응답

1.
인프라 구조도를 보면 Cloud Front -> S3 -> Load Balancer를 통과하게 되어있는데, 이 Flow에서 S3 -> Load Balancer에 전달하는 요청 이 어떤 내용인가요?
클라이언트에게 input 받은 정적인 데이터를 클라우드 프론트를 통해 백엔드 서버에 전달 하거나 필요한 데이터 요청에 대해 표현할려고 했습니다.
2.
Reddison을 통한 동시성 제어는 테스트를 어떻게 진행하셨고 어떻게 잘 동작하는지를 확인하셨나요?
실제로 동작이 잘되는지에 대해 확인은 하지 못하고, 테스트 코드를 통해 잘 작동하는지 확인 했습니다.
아래의 메서드를 이용했다.
쓰레드 풀: 미리 일정 개수의 쓰레드를 생성해서 사용하는 기법
* ExecutorService : 병렬 작업 시 여러 개의 작업을 효율적으로 처리하기 위해 제공되는 JAVA 라이브러리
* ExecutorService에 Task만 지정해주면 친절하게 알아서 ThreadPool을 이용해서 Task를 실행하고 관리* ThreadPool에 있는 Thread수보다 Task가 많으면, 미실행된 Task는 Queue에 저장되고,
* 실행을 마친 Thread로 할당되어 순차적으로 수행된다.
* FixedThreadPool : 고정된 개수를 가진 쓰레드풀
* CountDownLatch : CountDownLatch는 특정 작업을 수행하는 데 있어서 특정 쓰레드로 하여금 대기할 수 있게 해주는 역할을 한다.
3.
동시성 제어를 활용시 Redis를 사용하는 것은 좋아보이나, 아키텍쳐를 보면 EC2 인스턴스마다 Redis가 존재하게 되는 것으로 보이는데 Redis를 다른 인스턴스로 분리해야하는 것 아닐까요? 또한, MySQL을 활용한 락과, Redis을 활용한 락 차이를 정확히 알고 계신지도 궁금하네요. 그 부분을 의사 조율 부분에서는 발견할 수 없었습니다.
현재 시간이 부족해 인스턴스를 분리하는 작업은 못했습니다. 추후 고도화 작업에서 Redis를 다른 인스턴스로 분리할 예정입니다.
Mysql은 공통된 자원에 대한 Lock을 거는 것이고, Redis를 통한 Lock은 어떠한 행위에 대한 Lock을 한다고 조사했습니다. 저희 예약하기 프로세스는 방 테이블에서 해당 레코드를 읽고 그 후 reservation이라는 테이블에 예약하기를 생성하고 다시 reservation 리스트를 조회 해 예약 가능한 시간대를 보여주는 프로세스입니다.
그리고 Mysql의 락은 특정 테이블이나 레코드, 트랜잭션 수준에서 적용된다고 조사했습니다. 이러한 부분에서 저희는 하나의 프로세스 단위로 Lock을 거는 Redis가 더 적합하다고 생각했습니다.
참고
MySQL은 관계형 데이터베이스 시스템으로, 데이터를 테이블 형태로 저장합니다. 락은 주로 특정 테이블 또는 레코드에 적용됩니다.
Redis는 메모리 기반의 키-값 저장소이며, 데이터는 메모리에 저장됩니다. 락은 Redis의 문자열 데이터 유형을 사용하여 구현될 수 있습니다.
1.
Locking의 범위:
MySQL 락은 주로 특정 테이블, 레코드 또는 트랜잭션 수준에서 적용됩니다.
Redis 락은 키 단위로 적용되며, 여러 프로세스 또는 스레드가 동일한 키를 사용하여 락을 획득할 수 있습니다.
2.
락의 유연성:
MySQL의 락은 트랜잭션 또는 세션 범위로 적용될 수 있으며, 여러 유형의 락(읽기 락, 쓰기 락 등)이 지원됩니다.
Redis의 락은 개발자가 필요에 따라 더 유연하게 구현할 수 있습니다. 예를 들어, 세마포어 또는 임계 영역을 사용하여 락을 구현할 수 있습니다.
3.
성능:
Redis는 메모리에 데이터를 저장하고 빠른 읽기 및 쓰기 작업을 지원하므로, 락의 획득 및 해제가 매우 빠를 수 있습니다.
MySQL은 디스크 기반의 데이터 저장소를 사용하므로, 락의 획득 및 해제가 상대적으로 느릴 수 있습니다.
4.
데이터 일관성:
MySQL의 락은 트랜잭션을 통해 일관성을 유지하고 데이터베이스의 ACID 속성을 보장합니다.
Redis의 락은 개발자가 수동으로 일관성을 관리해야 하며, Redis는 일반적으로 ACID 속성을 제공하지 않습니다