Project/Team

Smart Encoder 프로젝트 후기

빈코 2023. 4. 18. 16:13

Smart Encoder 프로젝트는 새롭게 시작된 프로젝트로 라디오 라이브 생방송의 음성을 실시간으로 캡처해 mp3 파일로 변환하고, 운영서버에 FTP로 전송해 주는 Batch 시스템과 해당 프로세스를 한눈에 볼 수 있는 모니터링 시스템을 개발하는 프로젝트입니다😄

 

Smart Encoder

 

개요

Smart Encoder 프로젝트는 기존에 했던 기술 스택과 다르게 JPA를 사용했고, DB를 2개 사용하는데 MSSQLSQLite를 사용했습니다. Batch 시스템 또한 유지보수만 해왔던 터라 신규로 만드는 것은 처음이어서 프로젝트 설정부터 다소 난관이 있었지만 기간 내에 잘 마무리 해서 다행이었던 프로젝트입니다.

 

모니터링 시스템의 화면 단도 이번에 처음 사용해보는 Thymeleaf로 진행했습니다. 기존에 Jsp를 많이 사용했어서 화면단은 크게 어렵지 않았던 것 같아요😄

 

Batch📔

Batch 프로세스는 크게 스케줄 동기화, 인코딩(mp3 파일 변환) 작업, FTP 전송으로 나뉩니다. 세부적으로는 인코딩에 실패하거나 FTP 전송이 실패할 시 재 변환 및 재 전송 로직도 돌아갑니다. 운영 서버에 등록된 스케줄을 가져오는 작업은 매일 업데이트되어야 하고, 인코딩 주기에 비해 비교적으로 여유가 있게 돌아가게 코드를 구성했습니다.

 

인코딩 주기는 1초마다 돌아가며, 스케줄 상 겹치는 부분이 있을 수 있기 때문에 fixedDelayString을 사용해서 다른 인코딩 작업을 하고 있더라도 영향 없이 동시다발적으로 변환할 수 있게 구현했습니다. SpringBoot application.yml 파일에서 pool size는 여유 있게 구성함으로써 하나의 스케줄도 놓치지 않고 변환할 수 있게 만들었습니다.

 

FTP 전송은 따로 클래스로 구현해 local에서 local, ftp에서 local, local에서 ftp로 전송하는 3가지 로직을 만들어서 테스트 및 운영서버에 적용했습니다. 파일들을 전송할 때 하이레키 구조로 만들어야 했기 때문에, 각 날짜 별로 스케줄을 묶는 방식으로 진행했습니다.

 

운영 서버에서 사용하는 MSSQL 특성 상 기본적으로 SELECT시 공유잠금(S Lock)이 걸리기 때문에, 이 부분에서 많이 헤매었는데 JPA에서 제공하는

@Transactional(isolation = Isolation.READ_UNCOMMITTED)

isolation을 이용하여 손쉽게 해결할 수 있었습니다. 

 

또한 Batch 프로세스는 운영 시스템과 백업 시스템이 나뉘어 있기 때문에 각 함수들은 application.yml에 등록된 property에 따라서 동작할 수 있도록 구현했습니다.

 

Monitoring📗

사실 모니터링 시스템은 날짜별로 스케줄을 확인하는 로직, Paging 처리, 현재 변환중인 파일, 현재 전송중인 파일, 이 밖의 리스트 등 간단하게 구현이 가능한 로직들이었습니다.

 

다만 모니터링 시스템도 JPAThymeleaf를 쓰면서 새롭게 배울 수 있는 부분들이 많았습니다. ORM을 사용하면서 왜 SQL에 의존했던 지난날의 SQL Mapper를 지양하게 되는지 이해가 되었습니다. Spring Data JPA에서 제공해 주는 기본 함수들을 이용해서 반복적인 CRUD를 많이 줄일 수 있었고, 처음 써보는 DB(MSSQL, SQLite)여서 기존에 했던 쿼리문들과 다른 부분들도 있었을 텐데 신경 쓰지 않고 작업할 수 있었으며, Method 방식으로만 데이터를 조작할 수 있다는 편리함도 깨달았던 것 같습니다.

 

 

배운 점📝

첫 번째로 배운 부분은 프로젝트 기획부터 배포까지 모든 일정에 참여할 수 있었던 것입니다. 2년 차가 되면서 프로젝트 기획 단계를 처음 접해봤는데, '이러한 기능을 추가할 때 문제되는 부분은?'이라는 생각을 많이 하게 되었고 Flow Chart를 그리면서 각 컴포넌트별로 기능을 구성하고 어떠한 기능들부터 붙여나가야 하는지 등 다양한 방면에서 고민을 많이 하게 되었습니다. 또한, 프로젝트 마무리 당시에 '아 이건 기획단계에서 잘못 기획한 것 같다'라는 생각이 들었던 부분도 있었습니다.

 

다음 프로젝트를 기획하게 된다면 Flow Chart나, ERD를 작성할 때 조심해야 하는 부분들이 자연스럽게 떠오를 거 같은 부분 하나하나가 배운 점인 것 같습니다.


두 번째로는 처음 접해보는 기술들이 많았습니다. 서론에서 언급한 JPA, Thymeleaf, MSSQL, SQLite 이외에도 FFmpeg 라이브러리를 사용할 수 있는 기회였고, 각각의 기술들을 사용하기 전에 설정하는 부분들부터 많이 삽질?을 하면서 적용하는 부분들을 배웠습니다. 또한, 직접 기술들을 사용해 보면서 기존에 했던 방법들과의 장단점이 눈에 보였고 다음 프로젝트 때 기술 선택을 할 때는 각 기술들의 장단점을 생각하면서 선택할 수 있을 것 같다는 생각이 들었습니다.

 

 

아쉬웠던 점📝

가장 아쉬웠던 부분은 테스트 코드 관련입니다. 여러 단위 테스트 코드를 작성했지만, 배치 시스템은 유기적으로 작동되는 것이어서 현재 프로세스가 잘 돌아가는지 한 번에 확인할 수 있는 테스트 코드를 작성하지 못한 아쉬움이 남았습니다. 또한, 아직까지는 테스트 코드를 능숙하게 작성하지 못하는 부분도 많았어서 조금 더 TDD에 관심을 가지고 공부를 해야 할 것 같다는 생각이 들었습니다.

 


👨‍💻 전자책 출간

아울러 제가  🌟비전공자에서 2년만에 보안 전문 중견기업으로 이직 한 방법들을 정리한 전자책을 출간 하게 되었습니다. 어떤 걸 공부해야 하는지, 이직을 위해서 무엇을 준비해야 하는지, 제가 받았던 기술 면접 리스트 등 다양한 목차로 구성되어 있습니다. 또한, 구매 시 1:1 채팅을 이용하여 포트폴리오 첨삭을 도와드리고 있습니다. 🐕전자책으로 얻은 모든 수익은 유기견 센터 '팅*벨 입양센터'에 후원될 예정입니다. 관심 있으신 분들은 아래 링크를 참고해주세요😁

https://kmong.com/gig/480954

 

비전공개발자 2년만에 중견기업 들어간 방법 | 14000원부터 시작 가능한 총 평점 0점의 전자책, 취

0개 총 작업 개수 완료한 총 평점 0점인 Binco의 전자책, 취업·이직 전자책 서비스를 0개의 리뷰와 함께 확인해 보세요. 전자책, 취업·이직 전자책 제공 등 14000원부터 시작 가능한 서비스

kmong.com


 

마치며

이번 프로젝트를 마지막으로 기존에 다니던 회사를 떠나 다른 곳으로 이직하게 되었습니다. 이제는 새로운 곳에서 새로운 사람들과 다시 협업하고 적응해 나가야겠네요 :)

 

물론 제 분수? 에 안 맞게 좋은 기업에 취업하게 되어서 기분이 많이 좋지만, 한편으로는 내 실력이 회사에 누가 되지 않게 더욱더 열심히 공부해야 할 것 같아요. 이번 프로젝트에서 사용했던 JPA, Thymeleaf를 주축으로 쓰는 회사기 때문에 이직 전에 좋은 경험을 한 것 같습니다.

 

다음 포스팅은 아마 지금과는 전혀 다른 솔루션 프로젝트 후기가 되지 않을까 싶습니다. 그럼 다음에 뵐게요🖐

반응형

'Project > Team' 카테고리의 다른 글

MCMS-YJCF 프로젝트 후기  (0) 2022.11.23
MCMS-YC 프로젝트 후기  (0) 2022.08.01
MCMS-YGPA 프로젝트 후기  (0) 2022.07.11
신입 개발자 동시 접속자 2만 명 프로젝트 경험  (0) 2022.04.27