coms-server / server-issue

3 stars 0 forks source link

DB 트랙잭션 처리가 필요함 + 관련 개선사항 #23

Open grayroom opened 3 years ago

grayroom commented 3 years ago

연속적으로 또는 동시에 DB에 접근하는 작업을 수행할 때, 악의적인 의도에 의해서든 에러에 의해서든 쿼리가 완전히 실행되지 않을 수 있음. 이 때, DB무결성을 위해서 서비스에 트랜잭션 처리를 해 주어야 할 것 같음. 우선 생각나는건 아래 경우들...

트랜잭션이 요구되는 상황

관련 개선사항

grayroom commented 3 years ago

회원가입시에 userAuth는 등록되었지만 userInfo가 등록되지 않는문제가 간헐적으로 발견됨. signup페이지의 스크립트와 AccountAPI에서의 validation이 문제가 아니라면, 트랜잭션을 통해 해결해야할듯.

SnowlyFeast commented 3 years ago

서버 로그 첨부 바람 @grayroom

SnowlyFeast commented 3 years ago

트랜잭션은 이미 아이솔레이션 레벨 설정 해놔서 문제 없음.

SnowlyFeast commented 3 years ago
  • 회원탈퇴등에 의해 회원정보/작성글/댓글 등을 삭제하는 경우 -트랜잭션으로 해결할 대상 아님.
  • 게시글/첨부파일/댓글/투표 데이터를 동시에 삭제하는 경우 -아이솔레이션 레벨이 설정되어 있을 뿐만 아니라 트랜잭션 내에서 쿼리가 한 개 밖에 없어서 발생할 일도 없음 (트랜잭션처리 대상이 아님).
  • 게시글을 관리자와 작성자가 동시에 수정하는 경우 -이 또한 트랜잭션처리 대상도 아니고 처리하면 db성능이 박살남.

관련 개선사항

  • 게시글을 삭제하는 경우, 첨부파일/댓글/투표 데이터를 삭제하지 않음. 특히 Q&A 게시글의 경우, 답변도 삭제할지 결정해야할듯. 아무튼 게시글 관련 데이터를 삭제하지 않아서 정식 서비스시에 서버/DB 저장용량이 부족해질 위험성이 있음. -이건 확실히 초기 설계부터 용량제한에 대해서 지적한 부분인데 흠..텍스트보단 미디어데이터의 저장공간 소모가 크기 때문에 삭제된 게시글에 대해 첨부파일을 삭제하는 로직이 필요해보임. +게시글은 보존 때문에 2년? 최대 5년 정도 지난 게시글에 대해 데이터 날려버리는것도 괜찮아보임. 답글, 댓글, 투표도 같이 날리는걸로.

유저 auth info 입력 박살난건 다시 구현하겠음. 망할 노트북 시foot