Category: Develop

0

[Docker] 이미지 history

목차 [Docker] 이미지 history [Docker] 이미지 레이어 [Docker] 이미지 Build 참고 Docker History 명령어 공식문서 ✅ 이미지 historyDocker 이미지를 받아서 사용하다보면 은근, 해당 이미지가 어떻게 생성 됐는지, 어떤 명령어를 사용했는지 확인해봐야 할때가 있습니다. Docker 에서는 history 명령어를 이용해 해당 이미지가 어떤 명령어를 이용해 이미지가 생성 됐는지 확인할 수 있는 기능을 제공합니다. 저 같은 경우는 제대로 작동되지 않는 빌드된 이미지에 대한 디버깅용으로 사용을 많이 했었습니다. ✅ docker history 명령어기본 명령어

0

[Docker] 이미지 레이어

목차 [Docker] 이미지 레이어 [Docker] 이미지 Build 참고 Docker 공식 문서 - 이미지 레이어 이해하기 Docker 공식 문서 - Storage drivers 🔍 이미지 레이어란?Docker 이미지의 핵심적인 특징 중 하나는 레이어 기반 구조 입니다. Docker 이미지는 빌드시 한번에 만들어 지는 것이 아닌 기존 이미지에 레이어를 하나씩 쌓는 방식으로 이미지를 만듭니다. 이미지 레이어는 Dockerfile 에 있는 명령어를 실행할때 각 명령어별로 생성됩니다.. 각 레이어들은 읽기 전용 (read-only) 속성을 가지며, 순서대로 쌓여서 하나의 완전한 이미지를 구성합니다. 최종적으로 생성되는 이미지는 여러개의 레이어들이 쌓여서 만들어진 결과물이라 생각하면 됩니다. ✅ 레이어의 특징

0

[Docker] 이미지 Build

🔍 Docker Build 란?Docker Build 는 서비스를 격리된 환경에서 실행할 수 있도록 운영체제 및 필요한 의존성과 설정, 실행 파일등을 하나의 이미지로 패키징하는 것을 의미합니다. 이미지 Build 는 Dockerfile 을 기반으로 수행되며, Dockerfile 에는 이미지 생성에 필요한 명령어들이 있으며, 순서대로 실행됩니다. ✅ Build 명령어# 현재 디렉토리 위치에 Dockerfile 가 있고 현재 위치에서 이미지를 생성할 경우docker build -t <만들 이미지 이름>:<만들 이미지 태그> .# Dockerfile 이 다른 경로에 있을 경우docker build -t <만들 이미지 이름>:<만들 이미지 태그> -f <파일 경로> <빌드 컨텍스트 경로># Dockerfile 명이 다를 경우우docker build -t <만들 이미지 이름>:<만들 이미지 태그> -f <파일 경로/파일 이름> <빌드 컨텍스트 경로> ✅ 이미지지 레이어Docker 는 Build 시 Dockerfile 의 베이스가 되는 이미지부터 시작해 각 명령어를 실행할 때마다 새로운 이미지를 생성합니다. 이것을 이미지 레이어를 생성한다고 이야기 합니다. 때문에 초기 명령어들이 같고 중간 단계 부터 달라지는 Dockerfile 의 경우 빌드시 각각 이미지 레이어를 생성하는게 아닌 기존에 만들어진 이미지 레이어를 바탕으로 새로운 이미지를 생성해 빌드시간과 저장공간을 절약할 수 있습니다. ✅ Dockerfile

0

[Docker] Volume - 컨테이너 데이터 관리

목차 [Docker] Volume - 컨테이너 데이터 관리 [Docker] Network - 컨테이너간 통신 [Docker] 🤔 Docker Volume 이 왜 필요한가? 컨테이너내 데이터는 휘발성입니다. Docker 와 컨테이너 기술이 막 떠오를때 PC 에 깔아서 개발을 하고 있는데 Docker 내에서 설정한 값들이 재실행할때 마다 초기화 되는 현상들을 겪었습니다. 당시 너무 화가나서 여러 책들을 읽어봤는데 생각해보니 컨테이너의 특성을 제대로 이해하지 못해 생기는 문제였었습니다. 컨테이너는 기본적으로 휘발성 이기 때문에 컨테이너가 종료되거나 삭제되면 내부 데이터도 함께 사라집니다. 쉽게 생각해서 격리돼 있는 컨테이너의 특성상 컨테이너가 생성한 모든 파일들은 결국 컨테이너내에서만 존재하고 컨테이너 삭제시에는 컨테이너와 함께 데이터도 삭제가 되는 것입니다. Docker 에서는 Docker Volume 을 통해 컨테이너 내에서의 데이터 휘발성 문제를 해결하고 영구적으로 저장할 수 있는 방법을 제공합니다. ✅ Docker Volume 이란?Docker Volume 은 컨테이너 외부 에 데이터를 저장할 수 있는 공간입니다. 컨테이너와는 별도로 존재하기 때문에, 컨테이너를 삭제하더라도 데이터는 유지되며 데이터 영속성이 보장됩니다.

0

[Docker] Network - 컨테이너간 통신

목차 [Docker] Volume - 컨테이너 데이터 관리 [Docker] Network - 컨테이너간 통신 [Docker] 📌 Docker Network 란?Docker Network는 컨테이너 간 통신을 가능하게 해주는 가상 네트워크입니다. 컨테이너는 독립적인 환경에서 실행되지만, 애플리케이션을 만들다 보면 서로 데이터를 주고받아야 하거나 외부 요청을 받아야 할 일이 많습니다. Docker 네트워크는 이러한 컨테이너간 통신을 가능하게 해주는 역할을 합니다. 🔍 Docker Network 의 종류Docker는 기본적으로 다음과 같은 네트워크 드라이버들을 제공합니다 드라이버 설명 bridge 기본 드라이버. 컨테이너 간 통신이 가능하며, 같은 호스트에서 작동합니다. host 컨테이너가 호스트의 네트워크를 그대로 사용합니다. 격리는 없지만 속도는 빠릅니다. none 네트워크를 사용하지 않도록 설정합니다. 완전한 격리가 필요할 때 사용합니다. overlay 여러 호스트 간 컨테이너를 연결할 수 있습니다. Docker Swarm에서 유용합니다. macvlan 컨테이너에 고유한 MAC 주소를 부여해 물리 네트워크처럼 동작시킵니다. ✅ Docker 네트워크 생성

0

Django - App 생성하기

목차 Django - App 생성하기 Django - 장고 시작하기 장고 앱 만들기장고 App 생성은 manage.py 가 있는 프로젝트 폴더에서 startapp 명령어를 사용합니다. startapp 명령어를 사용해 hello_world 라는 이름의 앱을 만들어 줍니다. python manage.py startapp hello_world view.py 작성하기앱 폴더 내에 views.py 파일에 다음과 같은 코드를 작성해줍니다. from django.http import HttpResponsedef hello(request): return HttpResponse("Hello, world. You're at the hello_world index.")# Create your views here.] url.py 작성하기

0

Django - 장고 시작하기

목차 Django - App 생성하기 Django - 장고 시작하기 장고 설치하기pip install django 장고 프로젝트 생성하기 - django-admindjango 를 설치하면 django-admin 명령어를 사용할 수 있습니다. 설치된 django-admin 에 startproject 명령어를 사용하면 새롭게 장고 프로젝트를 시작할 수 있습니다. django-admin startproject mysite 장고 서버 실행하기 - manage.py새로운 장고 프로젝트에 들어가면 manage.py 파일이 있습니다. runserver 명령어를 사용하면 장고 서버를 실행할 수 있습니다.

0

JPA - 더티 체킹과 업데이트 그리고 벌크 연산

JPA 에서의 업데이트 - 더티 체킹 Entity 에 대한 더티 체킹 을 통한 업데이트가 이뤄집니다. JPA 에서는 Entity 를 업데이트 하기 위한 메소드가 별도로 존재하지 않습니다. JPA 에서의 업데이트는 엔티티 변경 과 더티 체킹 을 통해 업데이트가 이뤄집니다. JPA 에서 엔티티를 변경하기 위해서는 변경하고자 하는 엔티티를 조회한 후 해당 엔티티의 값을 변경하면 트랜잭션을 커밋할 때 변경 감지(Dirty Checking) 가 동작해서 데이터베이스에 UPDATE SQL 이 실행하는 방식으로 Entity 에 대한 변경을 반영합니다. @Override@Transactionalpublic ItemDto.Response modifyItemPrice(Long id, ItemDto.Request itemDto) { // 1. 변경하고자 하는 Entity 를 조회합니다. Optional<Item> optionalItem = itemRepository.findById(id); if (optionalItem.isPresent()) { Item item = optionalItem.get(); // 2. Entity 의 값을 변경합니다. item.updatePrice(itemDto.getPrice()); return ItemDto.Response.toDto(item); } else { throw new RuntimeException("Item not found"); }} Update 쿼리문 발생update item set item_type_id=?, modified_date=?, name=?, price=?, version=? where id=? and version=? 더티체크를 통한 업데이트의 한계더티 체킹을 통한 업데이트는 변경된 Entity 개수만큼 Update 문을 실행합니다. 그렇기 때문에 변경된 Entity 가 100개라면 100번의 Update 문이 실행되는 문제점이 있습니다.

0

MySQL - 사용자 추가

사용자 추가create user '[userid]';-- localhost 에서만 접속할 수 있는 계정 생성create user '[userid]'@'localhost' identified by '[비밀번호]';-- 외부에서 접근 가능한 계정 생성create user '[userid]'@'%' identified by '[비밀번호]'; 권한 부여하기-- select 권한 부여grant select privileges on *.* to '[userid]'@localhost identified by '[비밀번호]';-- update 권한 부여grant update privileges on *.* to '[userid]'@localhost identified by '[비밀번호]';-- insert 권한 부여grant insert privileges on *.* to '[userid]'@localhost identified by '[비밀번호]';-- delete 권한 부여grant delete privileges on *.* to '[userid]'@localhost identified by '[비밀번호]';-- select, update, insert 권한 부여grant select, update, insert privileges on *.* to '[userid]'@localhost identified by '[비밀번호]'; 특정 데이터 베이스에 대한 접근 부여-- [Database 명] 데이터베이스에 select 권한 부여grant select privileges on [Database 명].* to '[userid]'@localhost identified by '[비밀번호]'; User 에 따른 데이터 베이스 접근 부여-- localhost User 에게 전체 권한 부여grant all privileges on *.* to '[userid]'@localhost identified by '[비밀번호]';-- 외부접근 User 에게 전체 권한 부여grant all privileges on *.* to '[userid]'@'%' identified by '[비밀번호]';

0

[Docker]

Container 란?컨테이너는 어플리케이션을 실행하기 위해 필요한 모든 요소가 포함된 소프트웨어 패키지를 의미합니다.Container 화된 어플리케이션은 실행시 별 독립된(격리된) 실행환경에서 실행됩니다. Docker 란? Docker 는 컨테이너 기반 가상화 플랫폼으로, 어플리케이션을 패키징하고 배포하는데 사용됩니다. 도커(Docker)는 컨테이너 기반 가상화 플랫폼으로, 어플리케이션을 패키징하고 배포하는 데 사용됩니다. 도커는 소프트웨어를 컨테이너로 묶어서 실행할 수 있게 해주며, 이 컨테이너는 호스트 시스템과 격리되어 있어 응용 프로그램의 이식성과 확장성을 높이는 데 도움이 됩니다.

0

[Docker Compose]

1. Docker Compose란?Docker Compose 는 여러 개의 컨테이너를 한 번에 정의하고 실행할 수 있게 해주는 도구입니다. 일반적으로 실무에서는 웹 서버, 데이터베이스, 캐시 서버 등 다양한 컨테이너가 함께 작동해야 하는 경우가 많은데, 이 모든 것을 일일이 docker run으로 실행하는 건 너무 번거롭습니다. Docker Compose 를 사용하면 docker-compose.yml 파일 하나로 모든 서비스를 정의하고 일괄로 실행시킬 수 있습니다. 2. docker-compose.yaml 살펴보기version: "3.9" # compose 파일 버전services: web: image: nginx ports: - "8080:80" db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: example 3. Docker Compose 기본 명령어docker-compose.yaml 파일이 정의되면 해당 파일에 정의된 컨테이너 이미지나 환경등을 한번에 실행시켜 적용할 수 있습니다. 실행 docker compose up -d

0

[Docker] 이미지 Build

Docker 이미지 Build 란?Docker Build는 Docker 이미지 를 생성하는 과정을 의미합니다. 이미지 빌드는 Dockerfile 파일을 기반으로 수행되며, 이 파일에는 이미지 생성에 필요한 명령어들이 단계별로 정의되어 있습니다. Dockerfile 살펴보기# Node.js 기반 이미지 사용FROM node:18# 앱 디렉토리 생성WORKDIR /app# package.json 복사 후 의존성 설치COPY package*.json ./RUN npm install# 앱 소스 복사COPY . .# 포트 개방EXPOSE 3000# 앱 실행CMD ["npm", "start"] 이미지 캐시와 레이어Docker Build 는 명령어 하나하나를 레이어로 분리하여 캐시를 사용합니다. 예를 들어 COPY나 RUN 단계에서 변경이 없으면 이전 캐시를 재사용하여 빌드 속도를 높일 수 있습니다. 멀티 스테이지 빌드# Build stageFROM node:18 as builderWORKDIR /appCOPY . .RUN npm install && npm run build# Production stageFROM nginx:alpineCOPY --from=builder /app/dist /usr/share/nginx/html

0

Django Rest - 장고를 이용한 rest api 만들기

장고를 이용한 rest api 만들기settings myapi/settings.py STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 정적 파일 root 추가 INSTALLED_APPS = [ ... 'rest_framework',] INSTALLED_APPS에 quiz와 rest_framework를 추가해준다. 모델 생성하기 quiz/models.py

0

Django - Comment (댓글) 작성창 구현하기

Comment (댓글) 작성창 구현하기forms.py 파일 생성하기 blog/ 해당 돌더에 forms.py 파일을 생성한다. from .models import Commentfrom django import formsclass CommentForm(forms.ModelForm): class Meta: model = Comment fields = {'text',} 테스트 코드 작성하기 blog/tests.py # 로그인하기login_success = self.client.login(username='smith', password='nopassword')self.assertTrue(login_success)# post를 이용하여 서버에 데이터를 보낸다.response = self.client.post( post_000.get_absolute_url() + 'new_comment/', {'text':'A test comment for the first comment'}, follow=True # redirect하는 것까지 확인을 해봐라)self.assertEqual(response.status_code, 200) views.py에 반영하기