20240220 (화) 대용량 트래픽 프로젝트 - 동시성 제어 프로젝트 5일차

2024. 2. 20. 20:52TIL

오늘 작업한 내용

1. 테스트코드 작성 및 DB연결

2. RedisLock 공부

 

1. 테스트코드 작성 및 DB연결

 

동시성 제어를 위한 테스트 코드를 작성한 후 이를 테스트용 DB에 연결하도록 코드를 작성하였다.

이번 테스트를 위해 사용한 DB는 h2 데이터베이스

테스트용으로 걸맞는 가벼운 DB이다.

기록용으로 Yml 파일을 남겨놓음

spring:
  data:
    redis:
      host: 3.39.34.103
      port: 6379
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
        highlight_sql: true
        use_sql_comments: true
        default_batch_fetch_size: 500
logging:
  level:
    org:
      hibernate:
        SQL: debug
        orm:
          jdbc:
            bind: trace
      springframework:
        security: debug

auth:
  jwt:
    issuer: team.sparta.com
    secret: ${JWT_SECRET}
    accessTokenExpirationHour: 168


---

spring:
  config:
    activate:
      on-profile: test
  data:
    redis:
      host: 3.39.34.103
      port: 6379
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
    open-in-view: false
  h2:
    console:
      enabled: true # 콘솔을 enable 해야 H2 콘솔에 접근할 수 있다.
      path: /h2-console
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:tcp://localhost/~/test
    username: sa
    password:
auth:
  jwt:
    issuer: team.sparta.com
    secret: PO4c8z41Hia5gJG3oeuFJMRYBB4Ws4aZ
    accessTokenExpirationHour: 168

위의 작업을 수행하면서 yml 파일의 프로필을 나누는 방법, Redis를 연결하는 방법등을 배웠다.

 

2. RedisLock 공부

 

내가 원래 하려던 방식으로는 도커를 설치후 레디스를 설치하는 방식으로 하려했지만

승환님이 ac2를 이용하여 개인서버를 구동시켜서 거기에 도커설치 > 레디스 작동 을 구현하자고 하셨다.

https://wikidocs.net/176800

ac2 관련 자료

이후에는 레디스를 이용한 락 부분중 Lettuce와 redisson 2가지가 있고 두 방식의 차이점, 장단점등을 알아본 다음

 

Lettuce

 

Redisson

 

우선 Lettuce는 별도의 타임아웃 코드가 작성되어있지 않으면 락을 점유하고 풀어주지를 않는 오류같은게 발생했을 시 다음 순서에서 락을 점유하려고 무한루프를 도는 오류등이 발생할수도 있다.

그에 따라 Redisson 방식이 추천되고는 하는데 좀더 구현이 쉬운 방식은 Lettuce인것 같다.

 

하지만 우리가 먼저 구현해볼 방식은 Lettuce 이므로 관련 자료들을 좀더 찾아보았다.

 

https://velog.io/@guns95/%EB%8F%99%EC%8B%9C%EC%84%B1-%EB%AC%B8%EC%A0%9C-Lettuce-%EC%82%AC%EC%9A%A9

 

동시성 문제 - Lettuce 사용

Setnx 명령어를 활용하여 분산락을 구현 (Set if not Exist - key:value를 Set 할 떄. 기존의 값이 없을 때만 Set 하는 명령어)Setnx 는 Spin Lock방식이므로 retry 로직을 개발자가 작성해 주어야합니다.Spin Lock 이

velog.io

 


남은 기간으 3일이지만 마지막날에는 과제제출 및 발표시간이 대부분이기에 실질적으로 남은기간은 2일이다.

지금 페이스 대로라면 충분히 완성 가능할것 같다.