[main-project] 0312

박채은·2023년 3월 12일

Project

목록 보기
8/21

멘토링

1. 참여하기 기능에서 동시 호출이 많은 경우 어떤 현상이 일어날까요?
-> 동시성 문제

  • 어떤 사람은 참여하기가 될 것이고, 어떤 사람은 참여하기가 되지 않을 것이다. 또한, 몇 명이 참여했는지 데이터에 잘 반영되지 않을 수도 있다.
  • Lock을 사용하여 트랜잭션 처리의 순차성을 보장한다.

https://dev-alxndr.tistory.com/45
https://tourspace.tistory.com/54
https://devwithpug.github.io/java/java-thread-safe/
Redis을 통한 동시성 문제 해결
Lock을 통한 동시성 문제 해결

  • MySQL Lock을 사용하는 것이 시간적으로 괜찮을 것 같다.

2. 연말 연시 모집하기 게시글 작성 트래픽이 늘어납니다. 동시 호출이 많다면 서버는 어떤 영향이 있을까요?

https://jhyeok.com/api-parallel-request/

  • 서버에 부하가 발생한다.

  • 연말 연시에는 추가 서버를 확보해서 트래픽 증가에 대해 대비한다.(현실적으로 가능할지?)

    • AWS에서 평상 시에는 적은 용량을 사용하다가, 연말 연시에만 용량을 늘린다.
    • 쿠팡은 평상시 로컬 캐시 레이어는 트래픽의 35% 정도만 처리하지만, 트래픽이 급증할 때에는 로컬 캐시 레이어로 유입 트래픽의 70%까지 처리한다고 한다.
  • WebFlux?
    https://www.nextree.io/seupeuring-daeyongryang-teuraepig-ceori/


3. 참여하기가 완료되지 않는 방은, 만료 정책에 따라 사라집니다. 데이터의 영구 보존이 필요할까요? 그렇다면 DB에 보관하는게 효과적일까요?

  • DB에 보관하는 것은 효과적이지 않다고 생각합니다.
    멘토님이 말씀해주신 것처럼 캐싱을 사용하여 모집 인원이 다 채워져 모집이 완료된 그룹만 DB에 올리는 방식을 사용하는 것이 좋을 것 같다.
  • 만료 정책에 따라 캐싱 데이터의 생명 주기를 관리한다.
    • 만료일이 지나면 캐싱 데이터를 날리는 방식?
  • Redis 서버와 Spring에서 제공하는 캐시 어노테이션을 사용하는 것도 편할 것 같다.
  • 스케쥴링(https://ppaksang.tistory.com/26)

4. 모집하기 게시글 작성시 이미지 파일을 용량이 크다면 응답 속도가 늦어집니다. 개선할 방법이 있을까요?

  • 이미지를 resizing 해주는 것이 있음

https://earth-95.tistory.com/129
https://gorokke.tistory.com/214


5. 단순 CRUD라 할지라도 백만건 데이터를 넣고 시도해보세요. 어떤 문제점이 발생될까요?

  • 서버 부하가 발생한다.
  • 단순 CRUD라 할지라도, 데이터가 점점 많아지면 DB의 성능이 떨어진다.(조회만 하더라도 시간이 점점 오래걸림)
  • 단순 CRUD더라도 DB 성능을 높일 수 있는 무언가가 필요함
    • 캐싱 적용
      • 사용하게 된다면, 글로벌 캐싱을 사용해야할까?
      • 캐시를 적용할 수 있는 데이터가 있다면 적용하는 것도 좋을 것 같다.
        • 캐시를 좋아요 기능에 사용하는 것은 어떨까?
    • 빠른 조회를 위해 인덱스 설정
      • 근데 조회(검색)를 제외한 INSERT, UPDATE, DELETE의 경우에는 성능이 하락한다고 하던데 검색 성능 향상만을 위해 사용하는 것이 맞을지? 생각해봐야 할 듯 하다.
      • DB가 규모가 크고, 데이터 변경이 자주 발생하지 않으면 좋지만, 오히려 URL의 수정이 계속 일어나기 때문에 사용하지 않는 것이 맞을지도!

[참고]

쿠팡 이커머스 - 대용량 트래픽 처리
DB 인덱스 설정
캐시를 적용할 때 고려해야할 사항
동시성 문제


API 테스트

API를 테스트하여 서버에 부하를 줄 수 있는 도구들


쓰레드

우리가 현재 개발하는 애플리케이션은 프로세스 기반이 아닌 쓰레드 기반 프로그램이다.

https://velog.io/@sihyung92/how-does-springboot-handle-multiple-requests


Lock

여러 사용자들이 같은 데이터를 동시에 접근하기 때문에, 데이터의 무결성과 일관성을 지키기 위해서 Lock을 사용한다.

https://sabarada.tistory.com/121


Redis

  • 데이터베이스, 캐시, 메세지 브로커로 사용되는 인메모리 데이터 구조를 가진 저장소

https://blog.bespinglobal.com/post/redis-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%EC%9D%80-%EC%9D%B4%EB%A0%87%EA%B2%8C/


궁금한 점

  • 서버를 2개로 사용하라고 하셨는데 이는 기능에 따라 서버를 2개로 나누라는 말씀이신지, 로드 밸런싱을 통한 서버를 2개로 나누라는 말씀이신지?
  • Redis 서버와 S3, 서버 2개까지 하면 AWS 과금이 엄청 나오지 않을까?
  • 글로벌 캐시를 써야할지, 로컬 캐시를 써야할지

0개의 댓글