개발 분야에서 ‘어떤 방식이 정석이다‘라는 건 아무래도 많이 찾아보기 어려운 것 같습니다. 아무래도 개인의 취향, 상황에 따라 최적의 방식이 무엇이냐가 갈리기 때문이지 않을까 싶어요. 다만, 개인
개발 분야에서 ‘어떤 방식이 정석이다‘라는 건 아무래도 많이 찾아보기 어려운 것 같습니다. 아무래도 개인의 취향, 상황에 따라 최적의 방식이 무엇이냐가 갈리기 때문이지 않을까 싶어요. 다만, 개인적으로 실무에서 배포를 진행할 때에는 레포지토리는 하나로 사용하되, 도커 컴포즈를 활용하여 각각 개별 컨테이너로 배포하였습니다. 또한 DB의 경우 각 서비스별로 별도의 독립된 데이터베이스 컨테이너를 생성하여 운영하고 있습니다. 저희는 모노레포를 사용하고 있기 때문에 질문자님과 상황이 조금 다르기는 하지만, 만약 질문자님처럼 단일 앱에 대한 프론트엔드 / 백엔드를 개발 및 배포 할 때도 동일하게 단일 레포지토리 내에서 컨테이너를 나누어 배포 했을 것 같습니다. 그 이유로는, 컨테이너를 분리하여 운영할 경우 서비스 부하와 같은 리스크들을 각 컨테이너 별로 관리할 수 있어, 특정 한 영역에 성능 저하나 오류가 발생하여도, 다른 영역에서는 서비스가 적어도 중단되지 않도록 구현할 수 있고, 각 컨테이너 별 로드 밸런싱을 진행할 수도 있습니다. 그러나 사실 위에서 언급한 이유보다 평소에 더 체감하고 있는 장점은 배포가 필요한 부분만 따로 빌드 및 배포할 수도 있다는 점입니다. 매번 백엔드/프론트엔드를 묶어서 빌드하고 배포하는 것보다는, 프론트엔드만 배포해야 하면 프론트엔드만 배포하고, 백엔드도 마찬가지로 배포할 수 있다면 빌드 및 배포를 기다리는 시간이 줄어들지 않을까요? 이러한 개별적 빌드 및 배포는 git diff 명령어의 출력값을 파싱/분석하는 등 과정을 통해 수정이 발생한 앱을 특정하는 스크립트를 따로 작성하여 운영하거나, 모노레포 프레임워크들을 사용하여, 내부적으로 제공하는 기능을 이용하여 구현할 수도 있습니다. 물론 규모에 따라 이러한 장점들이 크게 의미가 있지 않거나, 이를 위한 설정 및 스크립트 작성 등이 더 번거로울 수도 있겠죠. 따라서 이에 대한 판단을 먼저 하시고, 무엇이 더 이득일 지 계산해 본 후에 어떻게 할 것인가를 결정하시면 좋을 것 같습니다. 개발을 하다보면 어떤 것을 구현할 때에 내가 원하는 방향과, 인터넷에 많이 올라와 있는 방향이 다른 경우가 많이 있습니다. 그러나 그것이 그들이 맞고 내가 틀린 것은 아닙니다. 물론, 조직 내에서 개발을 한다고 하면 그 조직에서 권장하는 방법을 우선적으로 고려해야 하겠지만 개인으로써 개발을 한다고 하면, 본인에게 가장 알맞은 것은 본인이 가장 잘 알지 않을까요? 다만, 그에 대한 근거를 깊이 생각해보고 더 최적의 방법이 있을까? 고민해보는 시간은 충분히 가지는 것이 좋다고 생각합니다. 최소한 본인이 왜 그렇게 했는지는 알아야겠죠. 무슨 기술, 어떤 방식을 사용했느냐보다, 왜 그렇게 했는지가 더 중요하니깐요! 😀