사용자가 예매하기 버튼을 누른다.
카프카에 publisher 서버 (별도로있고) 메시지를 쌓습니다.
그러면 좌석 수가 500개, 유저가 600명이 들어오면 순서대로 쌓임 (타임스탬프)
- request온거를 카프카 publisher 서버에 전달해서 쌓아야한다.
- consumer 서버에서 redis or postgresql의 남은 좌석의 데이터를 전달한다.
- 페이지를 보여주는데 순서대로 500명까지만 보여주고 남은 100명은 자기 남은 대기수를 보여준다. (보류)
- 좌석수 - 입장한 유저 = 대기순서
- 이러면 입장한 유저들의 개수가 낮아져야한다.
- 좌석수 - 입장한 유저 = 대기순서
해당 행사의 시간에 좌석을 선택 할 수 있다.
좌석을 선택하면은 redis 락을 적용한다.
- 키는 해당 행사아이디-시간아이디-좌석번호 여야한다.
선택 후 결재를 한다.
결재가 완료되면은 redis 락을 해제를 한다.
Kafka Publisher, Broker, Consumer 서버 나누기
서버를 나눴지만 consumer가 웹서버에서 분리 했을 때 장점, 단점이 무엇이 있는지?
장점
- 대기열을 보여줄 때 트래픽을 분산 시킬 수 있다.
- consumer의 역할만 사용하기에 유지보수에 좋다.
단점
- 초기에는 구지 의미가 없다. 웹 서버에 영향이 갈정도로 트래픽이 그정도로 안나오기 때문
티켓 테이블 동시성 제어 및 1000만건 데이터 입력
- dump table 생성해서 프로시저로 테스트로 넣음, 대략 1분 30초 정도 걸림
- 티켓에 대한 dump 데이터를 넣어야함, 1000만건을 테스트로 넣어봤음
- 테이블 변경으로 예매 테이블에 1000만건 입력을 하면 될 듯
- redis, rdbms 속도 차이 비교 필요
그래들 멀티 모듈, 깃허브 서브 모듈 설정
tmomi-sdk에서 git submodule를 업데이트하고 푸시를 해줘야지 github에서 최신 커밋 로그로 변경이 된다
[Spring] Gradle multi-module 프로젝트 세팅하기
git submodule 다른 브랜치 추적하도록 하기
Springboot Unit test 설정
예시에 전부다 Junit4를 권장하기도 하고 baeldung에서도 Junit4로 하라고 했는데 Junit5로 진행하는게 좋을거 같아서 Jnuit5로 진행 하였다.
ExtendWith, SpringExtension Junit5에서 사용한다.
ActiveProfiles로 test로 aplication-test.yml로 생성하여 적용했다.
- PropertySource 어노테이션으로 classpath:로 지정했는데 멀티 모듈을 쓰다보니 test classpath 설정을 할려면 시간이 더 들어서 ActiveProfiles로 진행 했다.
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = TmomiApplication.class)
@ActiveProfiles("test")
@AutoConfigureMockMvc
class TmomiApplicationTests {
@Autowired
private MockMvc mvc;
@Autowired
private StageRepository stageRepository;
@Test
void contextLoads() {
}
@Test
public void test() {
stageRepository.findAll().forEach(e -> System.out.println(e.getAddress()));
assert equals("ListTest");
}
}
context configuration and @PropertySource
Configuring Separate Spring DataSource for Tests | Baeldung
Testing in Spring Boot | Baeldung
Pinpoint Kafka 플러그인 적용
카프카를 사용하는 agent에 pinpoint.config에 설정을 추가해주면 바로 적용이 된다.
카프카 지원 버전: org.apache.kafka/kafka-clients [0.11, 3.max]
Pinpoint Kafka Github
'항해99' 카테고리의 다른 글
항해99 실전 프로젝트 (16일차) (0) | 2024.02.16 |
---|---|
항해99 실전 프로젝트 (15일차) (0) | 2024.02.16 |
항해99 실전 프로젝트 (13일차) (0) | 2024.02.13 |
항해99 실전 프로젝트 (12일차) (0) | 2024.02.08 |
항해99 실전 프로젝트 (11일차) (0) | 2024.02.07 |