유저 피드백을 받고 주말이 흘렀다. 유저 피드백의 대부분은 페이지의 구성이나 디자인 쪽 피드백이어서 상대적으로 수정할 것이 많지 않았다. 피드백을 반영하며 새로 기능을 추가하게 된 것은 "신고 기능"이었다. 유저 신고를 위해 관리자 페이지가 필요해져서 간단하게나마 프론트엔드에게 요청을 하게 되었고 신고 기능을 위한 리스트업 페이지가 생겨났다.
서비스라는 것이 처음 한 번에 모든 사용자의 마음을 만족시킬 수 없다는 것을 알았지만 피드백에 안좋은 글이 있으면 기분이 반감되기는 했다. (내새끼 욕하는 느낌....😥) 하지만 우리의 프로젝트가 조금 더 잘되라는 마음으로 써주신 피드백들이기 때문에 하나하나 소중히 반영할 수 있었고 덕분에 더 멋진 서비스가 되어가고 있는 것 같다. 그래도 우리 팀은 1차에서 거의 모든 기능을 구현한 상태로 릴리즈 했기 때문에 다른 팀보다 상대적으로 추가해야하는 기능이나 수정해야하는 부분이 적었다. 역시.. 기획을 잘 한 것 같다. ㅎㅎㅎ 이렇게 유저 피드백을 반영하는 것도 나중에 실제 현업에서는 정말 수백 번, 수천 번 하게 될텐데 미리 경험할 수 있다는게 정말 값진 경험이라고 생각한다.
아무튼, 이러한 피드백을 받으면서 생각한건 우리 서비스가 만약 실제로 런칭되었다면 얼마나 많은 사용자들 받아들일 수 있을지 궁금해졌다. 유저 피드백을 받는 첫 날, 바로 화면공유가 안되는 문제가 생겼는데 이것은 결국 서버상에서 문제가 생겼던 것이었다. 프리티어 서버에 올려둬서 그런 것인지 바로 서버가 터지다니.. 그 날 바로 서버 사양을 t3.medium으로 올리고 진행했더니 문제가 사라졌다. 이래서 유저 테스트 전에 부하 테스트를 해봐야하는구나 라는 생각을 했다.
더불어 동시성 제어도 궁금해졌다. 만약 방에 입장 가능한 인원이 1명인데 두 명이 0.00001초도 차이가 나지 않게 그 방에 입장하려고 한다면 어떻게 될까? 둘 다 입장이 안될 것인지, 랜덤으로 입장이 가능할 것인지 궁금했다. 그러면서 이것을 어떻게 제어하는게 효과적인건지 찾아보게 되었다.
동시성 제어 기법 — 잠금(Locking) 기법
동시성 제어 기법으로는 대표적으로 잠금(Locking) 기법이 있다. 현재 대부분의 DBMS에서 잠금 기법을 사용한다. 먼저 잠금 기법을 설명하기 전에 동시성 제어가 무엇인지, 그리고 왜 필요한지에 대
medium.com
우선 동시성 제어의 대표적인 방법에는 Locking이 있는 것 같다. A, B가 동시에 요청이 들어왔을 때 요청에 Lock을 걸어 대기하도록 만드는 것. 그럼 이걸 어떻게 코드로 구현해야하는거지? 라는 궁금증이 생겼고.
[Spring boot] 좋아요수 증가 분산락을 이용하여 동시성 제어하기 (redis활용하기)
기존 코드에서 좋아요수를 증가하는 로직은 하나의 서버에 대해서 들어오는 요청에 대해서는 트랜잭션을 보장하지만 다중 서버인 경우에는 트랜잭션을 보장하지 않았습니다. 이 글은 이 문제
velog.io
이렇게 레디스를 사용하여 가능하다는 것을 알게 되었다! 이번 프로젝트에 레디스를 캐시 메모리로도 사용하고 채팅을 위해서도 쓰고 있는데.. 이미 접하고 있는 것으로 동시성 제어도 할 수 있다고 하니 어떻게보면 그렇게 어려운 일이 아니라고 생각했다. 지금은 동시성 제어까지 해볼 여유가 없어서 간단히 개념을 정리하는 것으로 만족해야겠다.
[Spring] @Transactional로 DB 동시성 문제를 방지하자
웹 데이터 애플리케이션을 만들 때, dao에서 sql문으로 db에 접근하고 service에서 dao 메서드들을 이용하여 하나의 트랜잭션을 관리한다. 그런데 만약 이 애플리케이션을 여러 명이서 동시에 사용한
kth990303.tistory.com
" MYSQL을 사용중이라면 defalut transaction isolation level은 2 "
" REPEATABLE READ는 고립 레벨 2에 해당되는 수준이며, 해당 레벨에서는 커밋하기 전 작업 중인 데이터의 값을 읽을 수 없을 뿐 아니라, 읽기 트랜잭션이 끝나기 전까지 Undo 영역을 타 트랜잭션에서 쓰기 작업 후 커밋한 데이터로 덮어쓸 수 없다. 그렇기 때문에 Non-Repeatable Read가 발생하지 않게 된다. "
트랜잭션 어노테이션이 이미 동시성 제어를 해주고 있었구나?!
'T.I.L. :: Today I Learned > 항해99 14기 본과정' 카테고리의 다른 글
Day 80. 테스트코드 짜야하는데.. (0) | 2023.06.21 |
---|---|
Day 79. 리팩토링과 기능 개선을 위한 고민 (0) | 2023.06.20 |
Day 77. 이번 주도 열심히 살았다! (0) | 2023.06.18 |
Day 76. 드디어 유저 테스트 시작 ! (0) | 2023.06.17 |
Day 75. 이것도 협업의 과정인가요.....😥 (0) | 2023.06.16 |