Simple BBS 애플리케이션 배포 #3

하루히즘·2021년 5월 23일
0

SimpleBBS

목록 보기
3/4
post-custom-banner

서론

이번에는 SimpleBBS에 관리자 서비스와 MVC 에러 메시지 출력, 계정 비밀번호 복구 및 시도 횟수 제한 기능을 추가했다.

본론

max_user_connections

이번에는 Pull Request 후에도 쓸데없이 커밋이 좀 많았는데 Heroku의 무료 플랜을 사용하다보니 데이터베이스에 접근할 수 있는 커넥션의 크기가 제한되어 있어서 애플리케이션이 동작하면 다른 곳에서 데이터베이스에 접근할 수가 없었다.

관리자 계정을 추가하려면 일단 애플리케이션에 가입시키고 데이터베이스에 접근해서 권한을 바꿔줘야 했는데 HeidiSQL로 접속하려고 할 때마다 계속 "max_user_connections"가 초과되었다는 에러가 발생했었다.

에러의 이름만 봐도 유추할 수 있지만 데이터베이스에 한번에 접근할 수 있는 커넥션의 갯수를 초과했기 때문에 접근할 수 없는 것인데 그럼 누가 이 커넥션을 다 쓰고 있는 것일까? 당연히 이 데이터베이스를 사용하는 SimpleBBS 애플리케이션일 것이다.

그래서 application properties에 spring.datasource.hikari.maximum-pool-size=9를 추가해서 HeidiSQL로 따로 접속할 수 있는 커넥션을 하나 남겨두었다. Heroku의 MariaDB 애드온인 JawsDB는 무료 플랜에서 10개의 커넥션을 제공하기 때문에 애플리케이션에서는 9개까지만 사용하도록 하고 나머지 하나는 따로 접속할 때 사용하는 방식으로 구성한 것이다.

HikariCP

그럼 이걸 어떻게 설정할 수 있었던 것일까? 커밋 로그를 보면 알겠지만 처음에는 tomcat 설정을 이것저것 건드렸다.
하지만 어느것도 위의 max_user_connections 문제를 해결하지 못했는데 당연히 Tomcat은 스프링 부트 내장 웹서버지 데이터베이스 연결과는 상관이 없기 때문이다.

이 커넥션 문제를 해결하려면 톰캣이 아니라 커넥션 풀을 제공하는 HikariCP를 설정해야 했다. HikariCP는 스프링 부트의 Spring Data JPA 스타터(spring-boot-starter-data-jpa)에서 기본적으로 사용하는 커넥션 풀 구현체다. application properties에서 이 HikariCP의 세부 설정을 조작할 수 있으며 그 중 최대 커넥션 갯수를 제한하는 maximum-pool-size를 위처럼 9개로 조작해서 해결할 수 있었다.

공식 GitHub 페이지에 따르면 maximumPoolSize 속성은 idle과 in-use 커넥션 모두 포함해서 제한하므로 내가 의도했던 설정과 부합했으며 기본값은 10개로 되어있는 것을 확인할 수 있었다.

결론

Tomcat, HikariCP 등 프로젝트에서 사용하는 기술에 대해 제대로 이해하지 못해서 불필요한 커밋도 하고 조금 헤맸던 것 같다. 스프링 부트는 자동으로 이것저것 설정해 주기 때문에 레거시에 비해 확실히 편하지만 그만큼 사용자가 모르고 넘어가는 부분도 많은 것 같다. 아직 공부할 내용이 많다.

profile
YUKI.N > READY?
post-custom-banner

0개의 댓글