
현재 백엔드 레귤러로서 멘토/레귤러/비기너들과 2년 가까운 시간동안 월간사용자 3000명 정도 되는 KOIN이라는 서비스를 운영중에 있다.
KOIN은 현재 한국기술교육대의 레퍼런스가 된 서비스인데, 학교의 위치적 문제로 인해 인근상점,버스,시간표 등의 정보를 재학생들에게 제공하고 있다.
https://koreatech.in/

최근 PL과 트랙장이 모두 교체되면서 코인이라는 메인 프로젝트를 변화시켜야 한다는 목소리가 많이 나오게 되었고, 마이그레이션 작업을 진행하게 되었다.
초창기 멤버였던 트랙장에게 물어본 결과 처음에는 node.js로 KOIN플랫폼이 만들어 졌고, 그 이후 php,Laravel로 개편이 되다가 현재는 Spring3로 운영중에 있다.
의존성
Maven으로 의존성을 관리하고 있다.

SpringBoot가 아니기 때문에 라이브러리 버전을 Spring버전과 호환되는지 확인하고 관리하고 있는 모습을 확인 할수 있다.
설정


servlet-contect.xml, web.xml, root-contect.xml등 spring과 관련된 다양한 설정들이 xml로 수동으로 관리되고 있다.
bean관리

몇몇 Bean은 xml로 관리되는 모습도 종종 확인할 수 있었다.
인프라
AWS ec2를 사용중이다. 현재 Production은 16.04.6버전으로 확인되었다.

16.04.LTS버전에 대한 보안적인 업데이트 지원이 2021년 즈음 종료되었음을 확인할 수 있다.
DB

MySQL버전은 5.7.33버전을 사용중이다.
MYSQL5.7지원종료가 임박했기에 DB버젼 업그레이드의 필요성은 항상 느끼간 하였다. 특히 github에서 내려받은후 pom.xml을 로컬의 DB버전(8.x버전) 으로 바꾸게 되는데, 잘못 푸시가 되었다가 문제가 될수 있기 때문이다.(물론 pr체킹을 하긴 한다)
SQL Mapper
SQL Mapper로 Mybatis를 사용중이다. 연관관계가 복잡해지면서 Mybatis의 복잡도가 크게 증가한 모습을 볼 수있다.

기존 Spring3,Mybatis,Java1.8에서 SpringBoot,JPA,Java17로 점진적 이관을 진행하려 한다.(빅뱅은 무리라고 생각이 된다.)

하나의 인스턴스에서 두개의 WAS를 띄워 nginx path를 바꿔 진행하기로 하였다. ELB에서 두개를 띄우는 방안도 존재하겠지만 서버비를 절약하기위해 위와같이 하기로 결정을 하였다.
사실 처음에는 마이그레이션에 대해 긍정적으로 생각하지 않았다. 백엔드/인프라에서 가장 중요하게 생각하는 것은 대용량 트래픽이 와도 서버를 유지시키는 것이라고 생각한다.
기존의 WaterFall 방식에서 Agile으로 변환, 트랙별 회의에서 도메인별 회의 변환등 여러가지로 바뀐 부분이 많으며 비기너 시절 개인적인 이유로 세팅관련 수업에 참여하지 못하여 곤욕을 치뤘던 일등 필드 인원의 교체가 빠른 서비스인 만큼 빠르게 교육을 할 수 있는 마이그레이션도 이유가 타당하고 생각하였다.
필자도 springboot/jpa등의 기술스택을 사용하고 있었지만
새로운 트랙장을 필두로 마이그레이션을 진행하면서 본인은 기존의 KOIN_API를 유지보수하면서 마이그레이션(KOIN_API_V2) 프로젝트에 참여(몹프로그래밍, PR리뷰, 어드민 API개발)하면서

애자일로 인한 빠른 배포에 적합한 인프라를 개선하기 위해
인프라팀 1인체제를 통해 인프라의 고도화에 신경을 많이 쓰기로 하였다.

위는 기존의 KOIN_Renewal의 인프라이다.

위는 KOIN_Migration 이후의 인프라이다.
위에서는 새로운 스택에 대해 부정적으로 본다면서 상당히 트렌디한 기술들을 도입한것 같아 보인다.
물론 그렇게 보일수도 있지만 모두 필요가 있어서 팀원들에서 도입을 제안하고 도입한 것이다.
기존에도 구글 드라이브에 문서화를 잘 시켜놓았다.

위는 조직내의 백엔드 문서 모음이다.
특히 문서화에 대한 중요성이 매우 크기에 기존의 파편화된 문서를 통합하는 KOIN_MANUAL등 조직내 문서화에 많은 노력을 기울였다.
이 외에도 버그리포트, 교육 자료등 다양한 자료가 있지만 보안적인 이유로 올리기에는 무리가 있다고 생각한다.

현재 인터넷에 JavaSpring에 대한 정보는 많이 존재하지만 인프라 고도화를 하는 과정에서 인프라는 상대적으로 적어 함께 공유를 하고 싶어 작성하게 되었다.
Mybatis는 ORM이 아닌 SQL Mapper입니다~! 수정이 필요해보입니당