[Flutter] Flutter why moment - 플러터 주니어 질문 100제 part.01
[Web] Rendering Patterns 같이보기
[Web] 초 레거시 JSP 프로젝트를 최신 Next.js 13으로 마이그레이션 하기
13:00 행사장에 도착했고, 키노트 세션을 시작으로 행사가 시작됐다.
생각보다 사람이 많았다. 발표실 중간에 빵,과자,커피가 준비되어 있어 간단히 먹기 좋았다.
13:30
첫번째로 참석한 세션은 [Backend] 깔끔하게 쿼리 튜닝하기였다.
2년차 백엔드 개발자분께서 발표를 해주셨고, PostgreSQL을 사용하셨다.
용어 설명, 정의(쿼리 튜닝이란, 인덱스 종류 등) 와 같은 전체적으로 내가 생각했던 주제와는 다른 내용의 발표여서 조금 아쉬웠다. LIKE 조건 사용 시 인덱스 활용이 불가능하다거나 UNION / UNION ALL 사용 UNION ALL을 사용해야 하는 이유등과 같은 이제 막 백엔드로 시작하는 개발자분들에게는 좋은 내용이었을수도 있을 것 같다.
개인적으로 기대했던 발표는 예시(PK 가 어떻게 있고, 인덱스가 어떻게 존재할 때 쿼리 속도가 몇 초가 걸리는 것을 어떤 인덱스를 생성해서 속도를 줄이거나 또는 테이블을 분리시킴으로써 최적화를 할 수 있는 방법 등과 같은 것들)를 통해 쿼리 튜닝을 하는 노하우같은 것들이었다. 또는 경험을 들어도 좋을 것 같았고.
발표가 끝나고 들었던 생각은 "이제 1년이 지난 개발자분인데 많은 사람들 앞에서 본인이 준비한 주제를 발표한다는게 멋있다"였던 것 같다.
14:10
다음 세션으로 이동했다.
각 세션별로 발표 장소가 달랐는데 발표 장소 이름이 git merge, git rebase, flutter build 등 재밌게 잘 지었다고 생각했다.
두번째 세션은 [Flutter] Flutter why moment - 플러터 주니어 질문 100제 part.01 였다.
사실 이 세션은 중간에 시간이 여유가 있어서 선택했다. 플러터 개발도 해본 경험이 있어 가볍게 듣기도 좋을 것 같았다.
다트의 기원, 주요 기능 등과 같은 내용을 발표하셨고 다시 한번 공부할 수 있어서 좋았던 것 같다.
16:40
다음 세션은 [Web] Rendering Patterns 같이보기 였다.
요기요의 프론트엔드 개발자분께서 발표를 진행하셨고, 렌더링 패턴의 중요 요소와 렌더링 패턴의 역사가 주된 내용이었다. 최근 React에 관심이 생겨 해당 세션을 선택했는데 React에 기본이 되는 내용을 들을 수 있는 시간이었다.
17:30
본 행사에서 가장 기대가 컸던 마지막 세션이다.
[Web] 초 레거시 JSP 프로젝트를 최신 Next.js 13으로 마이그레이션 하기 사실 이 주제가 가장 흥미로웠다. 왜냐하면 현재 재직중인 곳에 서비스를 Spring Boot / JSP로 설계했기 때문이다.
발표자는 에어프레미야 랩스의 개발자분이셨다. 원래는 안드로이드 개발을 하시다가 프론트로 전향하셨다고 했다.
에어프레미아에 대한 설명으로 발표가 시작됐다. 에어프리미아는 국내 항공사로 당시 항공 준비가 모두 끝난 시점에 코로나가 터지는 바람에 기업의 수익을 이을 대안으로 웹을 만들었다고 한다.(아마 빠르게 웹을 만들고 수익을 내는 구조가 아니었을까 싶다) 이 때 사용된 기술이 Spring / JSP 였고, 에어프레미아 서비스도 그렇게 만들어졌다고 한다.
코로나가 종식되고 항공사가 정상 운행되면서 이렇게 만들어진 서비스를 마이그레이션할 필요를 느꼈다고 했다. 여러 곳에서 문제가 되는 소스들이 존재했고(서비스에 어떤 값을 비교할 때 문자열 비교를 통해 되고 있고 이것을 바꾸기 위해서는 이것이 포함된 모듈 모두를 바꿔야하는 문제), JSP 를 쓰는 회사에서 채용이 잘 될까라는 고민도 있다고 했다.
내부 회의를 통해 에어프레미아 개발팀은 완전한 재개발과 점진적 재개발 중 점진적 재개발을 택했다.
완전한 재개발(개발팀 모두가 한번에 작업)에는 도메인 지식 파악, 매출이 가장 큰 문제 요소가 됐다고 했다. 도메인 지식만해도 양이 방대해서 공부만 6개월 정도는 걸릴 것 이라고 했다.
그렇게 점진적 재개발을 하면서 JSP로 이뤄진 화면을 Nextjs로 마이그레이션하는 작업을 시작했다고 한다. 서비스를 도메인 단위별로 분리시켜 AWS 로드밸런서를 통해 서비스 마이그레이션을 꾀하신 것 같다.
/page라는 도메인이 JSP로 만들어진 화면을 바라본다면 prefix를 추가해 /a/page라는 도메인은 Nextjs로 만들어진 화면을 보게하는 방법이다.
작업을 하며 발생한 문제점들을 어떻게 해결해나갔는지 공유해주셨는데 이 중 대부분이 처음 들어보는 용어였다. Nextjs를 택한 이유는 단순히 최신 기술이었기 때문이었다고 한다.
배포는 Vercel을 이용
CDN static 파일은 AWS Cloud Front을 이용
서버 통신은 REST 방식 채택, 테스트는 Swagger, OpenAPI Generator 이용
CMS로 사용한 strapi
이벤트 트랙킹으로 사용한 CDP
발표가 끝나고 "마이그레이션후에 기존 서비스의 기능을 모두 어떻게 테스트했나요" 라는 질문이 있었다. 나도 궁금했던 질문이었지만 에어프레미아에서는 테스터(기획자)가 없고해서 넘어갔다고 한다. 아마도 버그가 발생하면 즉시 수정해서 조치하지 않을까 싶다. 나도 질문(운영 단계 배포를 하면서 개발 단계에서는 예상하지 못한 버그가 있었는지)을 했지만 도움이 될만한 답변은 못 얻었다.
집으로 돌아오며 Nextjs를 이용해서 회사의 작은 서비스 하나씩 마이그레이션해봐야겠다는 생각이 들었다. 앞서 언급했듯이 현재 운영중인 서비스는 Spring / JSP 로 구성되어 있다. 물론 큰 문제가 될만한 부분은 없지만 개발자를 충원하는 과정에서 채용이 힘들 수 있겠다는 생각이 강하게 들었다. 당시에는 React 경험도 없고 프로젝트를 무사히 완료하는 것이 목표였기에 JSP를 택했지만 이제는 서비스도 잘 되고 있고 여유도 생겼다.