Programming/Tips, Fix, Anything Else

[TFAE] 게시판 조회수를 올리는 다양한 방법(Update)

Supreme_YS 2023. 5. 27. 21:09

이 게시물은 개발을 시작하는 사람들이라면 누구나 한 번 쯤은 만들어봤을 '게시판'에 대한 내용이다. 그 중에서도 게시판이라는 하나의 서비스를 만들기 위해, 점점 살을 붙이고 붙여서 완성해가면서 한 번 쯤은 고려해봤을 조회수에 대한 내용이다.


먼저, 조회수란?

사용자가 게시물을 한 번 클릭할 때, 해당 게시물의 조회수를 1씩 증가시키는 동작이다. 비즈니스 로직에 따라 다르겠지만 간단하게 알고리즘화를 하자면 다음과 같을 것 같다.

 

클릭 > 해당 게시물의 조회수 칼럼에 1증가 Update > 게시물 내용 프론트로 뿌리기(제목, 저자, 날짜, 조회수 등)


- UPDATE 구문을 통한 조회수 업데이트

 

클릭한 게시물 번호에 해당하는 게시물의 INQUIRY_CNT(조회수)칼럼에 1을 추가해주는 로직이다. 쿼리는 다음과 같다.

UPDATE HOME_BOARD_M
   SET INQUIRY_CNT = INQUIRY_CNT + 1
 WHERE BOARD_NO = #{BOARD_NO}

구글링을 통해 [조회수 증가] 키워드만 쳐도 나오는 블로그들의 대략 80% 정도는 위와 같은 로직으로 코드를 짠다. 나도 마찬가지다. 

그래서 이게 뭐 문제 있는가?


문제가 있을 수 있다. 그 문제를 내가 겪었다. 실제로 홈페이지 개발/운영 업무를 맡은지(인수인계를 받은지) 어느덧 5개월차에 접어들었을 때 문제가 터졌다. 문제의 요지는 [LOCK으로 인한 페이지 성능 저하] 였다.

비즈니스 특성상 단순 조회성인 홈페이지에서 무슨 Lock?

장애가 발생했던 날짜에 자사에서 이벤트를 진행하였고, 그 이벤트를 확인하기 위해 동시 세션 접속 수가 6천명 이상이 지속적으로 방문하였다. 무엇보다 이벤트 게시물을 모두가 접속하려고 하니"수강신청 서버 터진거 같은데?"와 비슷한 현상으로 이어졌다. 회사 내 DBA 분들의 도움으로 TM LOCK 혹은 로우 락이라고 부르는 문제가 발생하였고, 쓰레드 풀에서 설정한 모든 쓰레드의 락이 해소되지 않고 있었다. 

락이 걸린 쿼리가 바로 위에서 작성한 UPDATE 구문이다.

그래서 이 글은 문제를 해결하기 위한 삽질 연대기고, 그 첫 삽은 다음 게시물에 계속. (결말포함)

 

[TFAE] 게시판 조회수를 올리는 다양한 방법(Insert)

이 글이 쓰여진 이유를 보고 오시면 더욱 도움이 될 것 같다. TM 락을 해결하기 위한 방법 중의 하나는 Insert로 처리를 하는 것이다. 3부작으로 급조 기획된 이 글이 너무 급박하기 마무리 지어지

supreme-ys.tistory.com