ORM(Object-Relational Mapping) 데이터베이스를 사용하려면 SQL 쿼리(query)라는 구조화된 질의를 작성하고 실행하는 등의 복잡한 과정이 필요하다. 이때 ORM(object relational mapping)을 이용하면 파이썬 문법만으로도 데이터베이스를 다룰 수 있다. 즉, ORM을 이용하면 개발자가 쿼리를 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있다.( 점프 투 FastAPI) 데이터베이스의 테이블을 파이썬 객체로 매핑하여 SQL 쿼리 없이 데이터베이스와 상호작용할 수 있게 해주는 방식 -> DB의 테이블과 관계를 파이썬 클래스로 정의 sqlalchemy db model 생성 declarative_base() 로 Base class (sqlalchemy mode..
#Pydantic Schema from pydantic import BaseModel from typing import List, Optional from fastapi import FastAPI, HTTPException, Depends from sqlalchemy.orm import Session app = FastAPI() class BookSchema(BaseModel): id: int title: str author: str is_available: bool genre:str|None #특정 저자의 모든 책 조회 @app.get("/books/author/{author_name}", response_model=List[BookSchema]) def get_books_by_author(author..
기존 코드 #16933 import sys from collections import deque n, m, break_cnt = map(int, input().split()) graph = [list(map(int, input())) for _ in range(n)] visited = [[[False] * (break_cnt + 1) for _ in range(m)] for _ in range(n)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(): queue = deque() queue.append((0, 0, 0, 1, 1)) # 시작 위치, 벽을 부순 횟수, 이동 거리 추가,밤낮여부(낮:1,밤:0) visited[0][0][0] = 1 while queue: x..
Nginx의 필요성 Q. 개발환경 서버와 운영환경 서버가 달라야 하는 이유 개발에서 사용하는 서버(Dockerfile.dev) 소스 변경시 자동으로 전체 앱을 다시 빌드해서 변경 소스를 반영 → 개발환경에 특화 운영환경 서버(Dockerfile) 소스 변경시 변경 소스 반영X →개발에 필요한 기능들이 필요하지 않아 더 깔끔함 Nginx의 장점 Q. Docker에서 nginx를 사용하는 이유는? nginx(리버스 프록시 서버)는 백엔드 서버 앞에 위치해서 클라이언트 요청을 백엔드 서버로 전달 이로인해 아래와 같은 장점이 있음 백엔드 서버의 주소 숨길 수 있음(리버스 프록시) 들어오는 네트워크 트래픽을 여러 서버에 분산시켜 부하를 균등하게 분배(로드 밸런싱) 자주 요청되는 데이터(예: 이미지, CSS, Ja..
Docker Compose 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구 Docker Compose 사용 이유 여러 개의 컨테이너가 하나의 어플리케이션으로 동작시, 도커 컴포즈를 사용하지 않는다면, 이를 테스트하기 위해 각 컨테이너를 하나씩 생성해야 하기때문 ex. web application test = web server container,db container 각각 생성 Docker Compose 특징 run 명령어의 옵션을 그대로 사용 가능 각 컨테이너의 의존성,네트워크,볼륨등을 함께 정의 가능 Docker Compose 작성 방법 Compose에서는 YAML파일을 사용하여 application 서비스를 구성(명세)함 ..
Docker Storage 필요성 1. Docker Layer = Container Layer + Image Layer Image Layer = Read Only : Docker Image는 읽기전용이며 어떠한 경우에도 변경되지 않음(변경사항 적용X) Container Layer = Writable Writable Layer : 컨테이너가 생성될때, Dockers는 읽기 전용 이미지 위에 “Writable Layer”를 추가 → 이 레이어에서 컨테이너 내의 변경사항(파일 추가,수정,삭제 등)이 처리됨 Writable Layer의 휘발성 : Container 삭제시 Writable Layer에 저장된 모든 데이터도 함께 삭제됨 2. Container의 Data 저장 문제점(휘발성) Container의 Wr..
1. 생성된 레이어 재사용(캐싱) 기존코드1 문제점 Docker이미지 빌드시 Dockerfile의 각 명령어를 실행 → 해당 결과들을 새로운 레이어로 저장한다. 아래 코드는 소스 코드중 어떤 파일이든 변경되면 COPY ./ ./ 이후의 모든 레이어가 다시 빌드된다 → 소스의 작은 변경이라도 RUN npm install 가 다시 실행된다. FROM node:10 WORKDIR /usr/src/app COPY ./ ./ RUN npm install CMD ["node","server.js"] 수정코드1 수정된 이유 package.json 먼저 복사 package.json에 변경사항이 없다 → RUN npm install 명령어 까지의 모든 레이어 캐싱되어 재사용(npm 재설치 없이 빠르게 빌드 가능) pac..
Docker 컨테이너내에 구성요소들이 적용될수있는 이유는? Dockerfile을 통해 구성요소들을 설정해 준다. * Dockerfile 내용 FROM adptopenjdk:8-jdk-hotspot AS builder #베이스이미지+별칭 COPY gradlew . #gradlew 복사 COPY gradle gradle #gradle 복사 COPY build.grade . #build.gradle 복사 COPY settings.gradle #settings.gradle 복사 COPY src src #웹 어플리케이션 소스 복사 RUN chmod +x ./gradlew #gradlew 실행권한 부여 RUN ./gradlew bootJar #gradlew를 사용하여 실행 가능한 jar 파일 생성 FROM adop..
Docker Image란? An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run Docker Container를 ..
Containers vs. VMs 컨테이너란? A container is an isolated environment for your code. Docker Image를 통해 application을 실행하기 위해 모든것(코드,런타임,시스템 도구,시스템 라이브러리 설정등)을 포함하고 있는 기술인데, 이 기술을 통해 어느 환경에서나 일관된 방식으로 실행할수 있다. 컨테이너가 사용자가 가지고 있는 OS나 파일에 대한 정보 없이 Docker Desktop에 제공하는 환경에서 실행한다. 어떻게 컨테이너가 독립적으로 가능할까? Docker Desktop을 사용하여 컨테이너를 관리, 탐색하고 컨테이너가 기본 OS를 포함한 실행하려는 코드를 위한 모든것을 가지고 있기때문에 가능하다. 질문1. 컨테이너가 코드를 위한 모든..