일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JavaScript
- HTML
- 프론트엔드
- TypeScript
- 솔리디티
- BFS
- 백준
- AWS
- next.js
- 클라우드
- 웹
- 가상화
- 이슈
- 알고리즘
- 이더리움
- k8s
- 백엔드
- 컴퓨터공학
- 쿠버네티스
- 타입스크립트
- docker
- 파이썬
- CSS
- kubernetes
- 자바스크립트
- 블록체인
- react
- node.js
- es6
- 리액트
- Today
- Total
목록2022/04 (15)
즐겁게, 코드
빌드한 이미지를 도커허브에 배포하려 했는데, 도커허브에는 반드시 / 의 형태로 이미지를 푸시해야 한다는 점을 알 수 있었습니다. 그런데 굳이 이것 때문에 이미지를 새로 빌드하는 것은 비효율적인 것 같아 간단히 이미지 이름만 변경하는 방법을 공유해보려 합니다. tag 커맨드 docker image tag 커맨드를 사용하면 기존 이미지를 참조하면서 새로운 이름을 갖는 이미지를 생성할 수 있습니다. 도커허브에 푸시하기 위해, / 형태로 새로운 이미지를 생성해 보겠습니다. 이렇게 기존 이미지명에 제 도커허브 아이디를 붙인 새로운 이미지를 생성했습니다. 이제 로컬에 이미지가 존재하지 않는다는 에러 없이, 푸시가 잘 수행되는 모습입니다. 🙂
한번쯤 이미지를 빌드해 보신 분들이라면, 이미지 사이즈가 적게는 수십 ~ 많게는 몇백 메가바이트에서 기가바이트 단위까지 넘나드는 것을 보셨을 것입니다. 물론 가상 머신에 OS와 어플리케이션을 올린 것보다는 가볍겠지만 단순한 어플리케이션 하나가 수백 메가를 차지하는 걸 보면 뭔가 억울한데요, Distroless 라는 구글에서 관리하는 베이스 이미지를 사용하면 일부 환경의 어플리케이션 이미지를 더욱 가볍게 제작할 수 있습니다. 이번 글에서는 Node.js의 Distroless 베이스 이미지를 사용해 간단한 이미지를 제작해보고, 기존 Node.js 베이스 이미지를 사용했을 때보다 얼마나 용량을 절약할 수 있는지 알아보도록 하겠습니다. 멀티 스테이징 빌드 Distroless 이미지가 용량을 절약하는 원리는 운영..
어플리케이션의 규모가 커지면 인증 정보, 장바구니 목록, 어플리케이션 설정 등 전역으로 관리해야 할 요소의 성격이 완전히 다른 경우가 종종 생기는데요, React와 redux를 사용할 때는 이처럼 둘 이상의 관심사가 있을 때 여러 스토어를 만들고 combineReducers 함수를 사용해 스토어를 하나로 묶어 사용했습니다. 오늘은 Vue의 Vuex를 사용해 스토어를 구성할 때, 관심사별로 유사한 상태를 묶어 관리할 수 있도록 해주는 네임스페이스(namespace) 에 대해 소개해보도록 하겠습니다. 🙂 네임스페이스의 등장 배경 어플리케이션이 하나의 스토어를 가질 때는 store 라는 폴더 안에 index.js, mutations.js, actions.js, getters.js 라는 이름을 가진 각 파일(v..
이미지에 파일을 하나 추가했다고 해서 처음부터 수백 메가에 달하는 파일을 다시 다운받는다면 굉장히 비효율적일 것입니다. 하지만, 도커 데몬은 레이어 를 활용해 이미지를 빌드할 때 파일이 추가되거나 변경될 때마다 해당 동작을 캐시합니다. 오늘은 도커파일을 잘 작성해 레이어의 캐싱을 최대화하고, 이를 통해 이미지 빌드 속도를 최적화하는 팁을 소개해보려 합니다. 이미지 생성하기 간단한 node.js 어플리케이션 하나를 이미지로 만들어 보겠습니다. 코드는 다음과 같습니다. const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send(` 간단한 node.js 어플리케이션입니다. `); }) app.li..
구글에서 제작한 컴파일 언어인 Go(Golang)는 그 빠르다는 C++에도 밀리지 않는 성능과 간단히 CLI를 개발할 수 있다는 등의 장점을 살려 백엔드 개발과 데브옵스 개발자들에게 큰 인기를 얻고 있습니다. ✅ Go의 주요 사용 분야는 이곳 에서 확인해볼 수 있습니다! Go 설치하기 Go는 컴파일 언어이자 강타입 언어로, 설치 링크 에서 Go 컴파일러를 간단히 설치할 수 있습니다. 시작하기 전에 : 모듈에 대해 본격적으로 Hello, world! 출력에 도전하기 전에, Go의 중요한 개념인 모듈에 대해 다뤄보도록 하겠습니다. 간결한 문법도 Go의 빠른 속도의 원인 중 하나겠지만, 구글에서는 최적화된 종속성 관리 를 가장 큰 요인으로 뽑고 있는데요, Go에서는 모듈 을 통해 의존성 변경을 추적하고 효율적..
오늘은 메모리계의 날쎈돌이, 캐시 메모리의 역할과 원리를 간단히 요약해보도록 하겠습니다. ✅ 읽기 전에 알려드려요! 이 글에서는 L1 ~ L3 캐시 구조 등 하드웨어적인 동작 원리에 대해서는 다루지 않으며, 캐시의 지역성만을 다룰 예정입니다. 🙂 캐시 메모리란? 먼저 캐시 메모리 란 처리속도가 다른 두 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리입니다. 만일 캐시가 존재하지 않는다면 RAM에서 데이터를 인출해오는 속도가 CPU가 태스크를 처리하는 속도보다 느리기 때문에 불필요하게 시간을 낭비해야 하지만, 실제로는 중간에 위치한 캐시 메모리가 둘 사이에서 데이터를 고속으로 전달해 줌으로써 속도 차이로 인한 병목을 어느정도 해결해 줄 수 있습니다. 그러나 캐시 메모리는 처리속도가 굉장히 빠른..
여러 개발 도구들 중에서도 쿠버네티스는 어려운 축에 꼽히는데요, 쿠버네티스를 이해하려면 먼저 클러스터를 구성하는 기본 구성 요소들에 대해 알아야 합니다. 이번 글에서는 클러스터를 구성하는 컴포넌트들과 각각의 역할을 간단히 정리해보도록 하겠습니다. 메인 쿠버네티스 컴포넌트 목록 제가 아직 사용해보지 않은 DaemonSet 등 일부 쿠버네티스 컴포넌트는 이 글에서 다루지 않지만, 주로 사용되는 컴포넌트를 정리해 보았습니다. (정리되지 않은 컴포넌트 역시 추후 추가할 수 있도록 해보겠습니다. 🙂) Pod Pod(파드)는 쿠버네티스의 가장 작은 유닛으로, 컨테이너를 감싸 추상화한 결과물을 의미합니다. 주로 1개 파드에서 1개 어플리케이션을 운영하며, 각 파드는 고유한 내부 IP 주소를 부여받아 노드 내에서 파드..