예전에 스프링 공부하면서 만들었던 게시판을 스프링부트로 전환했다. 스프링 외에도 여러가지를 변경했다.
Spring –> SpringBoot
MyBatis –> JPA
JSP –> Mustache
Eclipse –> IntelliJ
MySQL –> MariaDB
OAuth 2.0 도입
Docker 도입
한꺼번에 너무 많은 변경이 이루어져 그 모든 것을 동시에 적용하기에는 어려워 보였다. 그래서 일단 스프링 소스를 그대로 스프링부트에 적용하는 것으로 작업을 시작했다. 소스를 그대로 복사하고 관련 설정된 변경하는 것인데도 오류가 많이 발생해서 적지 않은 시간을 소모했다.
MySQL에서 MariaDB로의 전환은 간단했다.
OAuth 2.0의 경우 책의 예제에 있는 소스가 deprecated되었다. 구글 검색을 했지만 버전에 따라 뒤죽박죽이고 정확히 나에게 맞는 예제가 없었다. 결국은 나에게 맞는 예제를 찾았고 Perplexity에서도 맞는 답변을 받았다.
도커도입은 전체 작업 중에서 가장 짜증나는 부분이었다. 디비 클라이언트 툴과 자바 어플리케이션 양쪽에서 Access denied 오류가 떴다. 구글 검색해보면 대부분의 글이 권한 얘기하는 것인데, 내 경우는 MySQL 한두번 해본것도 아니고 권한을 잘못 준건 아니었다. 도커는 사용하지 말까 하고 몇번을 생각하다가 오기 때문에 계속 이래저래 테스트를 해 보았다. 클라이언트 툴은 결국 접속에 성공했는데 자바쪽에서는 계속 안됐다. 이래저래 해보다가 포트 충돌이 아닌가 하는 생각이 들었다. 도커 MariaDB 이전에 이미 개발PC에 MySQL과 MariaDB가 설치되어 있었고 3306 포트를 사용하고 있었고 도커의 MariaDB도 3306이었다. 물론 도커를 사용할 때 다른 디비들은 모두 중지한 상태였다. 어쨌거나 다른 별 다른 해결책이 없기 때문에 도커의 MariaDB를 3307로 변경하고 테스트해봤는데 된다! 그래서 혹시? 하고 다시 3306으로 지정하고 하니 이번에도 된다! 되고 안되고의 차이점은 properties파일에서 JDBC url지정시 처음에는 아무런 포트도 지정하지 않았고 나중에는 3306을 지정한 것이었다. 애초에 책의 소스도 그렇게 되어 있었고 포트를 지정하지 않으면 기본포트를 쓰겠거니 생각했는데 그게 문제였던 것이었다. 해결하니까 기분은 좋아졌지만 동시에 그 동안의 삽질을 생각하니 짜증도 많이 났다.
JSP –> Mustache전환도 문제가 있었다. Mustache의 문법이 워낙 간단해서(이건 이 엔진의 지향점이 그렇다) JSP의 로직을 그대로 적용하기가 어려웠다. 특히나 if문으로 조건에 따라 뭔가를 보여주고 안 보여주고 하는 것이 Mustache에서는 어려웠다. Mustache에서도 if가 있지만 그건 true, false만 판단할 수 있지 특정 변수의 값이 무엇이냐 같은 건 비교할 수 없었다. 결국은 Mustache에서 안되는건 모두 자바스크립트로 처리했다. 이 부분은 나중에 다시 최적화를 진행해야 할 것 같다.
MyBatis를 JPA로 변경하는 것은 아직 완료하지 못했다. MyBatis를 완전히 버리는 것은 아니고 병용할 예정이다. JPA는 복잡한 쿼리를 처리하기에는 적합하지 않아 보인다. 그런 것은 MyBatis를 쓰거나 프로시져로 처리할 생각이다.
작업을 하면서 느낀 점은 오류가 많이 발생했는데 디버그가 필요한 오류는 거의 없었다. 디버그를 몇 번 했지만 그것도 오류가 정확히 어디서 발생하는지 확인하기 위해서였다. 대부분이 설정 문제였다. build.gradle, properties, annotation등등. 해결도 모두 구글 검색 또는 AI에게 질문해서 해결했다. 자동화도 좋지만 이러면 이게 프로그래밍을 하는 것인지 새삼 의문이 든다. 별로 마음에 들지는 않는다. 당분간 웹은 Java SpringBoot를 주력으로 하겠지만 다른 대안이 있으면 언제든 넘어갈 생각이다.