Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🔖 연관된 이슈
📂 작업 내용
octodocs-modules는 websocket, backend, frontend에서 사용하는 모든 패키지를 가지고 있고 각 workspace 이미지는 이 이미지를 base로 사용하기 때문에 패키지 중복이 발생하지 않습니다.
octodocs-modules 이미지를 빌드할 때 octodocs-modules 이미지를 base로 사용하면 패키지가 추가되었을 때 추가된 패키지만 별도의 layer로 생성하여 기존 이미지에 쌓기 때문에 기존 yarn install layer를 그대로 사용할 수 있습니다.
하지만 이미지 빌드가 거듭되면 layer 수가 너무 늘어나기 때문에 일정 수가 넘어가면 모든 패키지를 다시 설치하여 layer 수를 초기화하도록 구현했습니다.
그리고 websocket, backend, nginx 빌드의 경우 모두 octodocs-modules 이미지에 의존하지만 독립적이기 때문에 병렬 build를 적용했습니다.
그리고 multi stage build를 적용하여 COPY 명령어 개수를 4개에서 1개로 줄였습니다.
octodocs-modules 이미지 push 시간 71초 감소 (83s -> 12s)
octodocs-modules 이미지 pull 시간 54초 감소 (68s -> 14)
octodocs-modules 이미지 빌드할 때마다 늘어나던 layer 수 4개 감소 (6개 -> 2개)
websocket, backend, websocket 이미지 빌드 시간 9초 감소 (45s -> 36s)
websocket, backend, websocket 이미지 푸시 시간 6초 감소 (12s -> 6s)
base 이미지를 node로 지정했을 때
![image (19)](https://private-user-images.githubusercontent.com/105545215/404803803-1a428c46-5432-4bc6-821f-9f38d93c5806.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NjA3ODksIm5iZiI6MTczODg2MDQ4OSwicGF0aCI6Ii8xMDU1NDUyMTUvNDA0ODAzODAzLTFhNDI4YzQ2LTU0MzItNGJjNi04MjFmLTlmMzhkOTNjNTgwNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxNjQ4MDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wM2EwOGRmOTAwYjMzNmVkZjQwNzVkYjc4ODhhOTA4MzM1ZWUzNTI3YWNmYTBlNTQxNzI5YWM4N2FlNTk1MDgyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.WpLKrHQQklur8HS_atn3Te9PHmESnF85l5U6DJF5eog)
5분 50초
https://github.com/boostcampwm-2024/refactor-web39-OctoDocs/actions/runs/12855189480
base 이미지를 자기 자신으로 지정했을 때
![image (20)](https://private-user-images.githubusercontent.com/105545215/404803852-d74ae9df-d3b6-4b6b-95ff-190d3eef2011.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NjA3ODksIm5iZiI6MTczODg2MDQ4OSwicGF0aCI6Ii8xMDU1NDUyMTUvNDA0ODAzODUyLWQ3NGFlOWRmLWQzYjYtNGI2Yi05NWZmLTE5MGQzZWVmMjAxMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxNjQ4MDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03NjdkYjVlNTMxZjM1YTU1ZWU5YzNmZTg4NGNlOTBiMjEyOWI1ZDBmMDE0Y2I2NGZiN2YzYmJkZDFlZGNhNzhiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.UJxPcnqCzjSELO4KG4fABcllP3vAJAT1J4kRjKxUxVU)
3분 33초
https://github.com/boostcampwm-2024/refactor-web39-OctoDocs/actions/runs/12855161978
📑 참고 자료