inode는 리눅스와 유닉스 계열 운영 체제에서 파일 시스템에서 사용되는 중요한 개념입니다. index node의 줄임말로, 파일 시스템에서 파일이나 디렉토리의 메타데이터를 저장하는 데 사용됩니다. 일반적으로 각 파일이나 디렉토리는 고유한 inode를 가집니다. 이 inode는 해당 파일이나 디렉토리의 메타데이터를 저장하는 데 사용됩니다. 이 메타데이터에는 파일의 소유자, 그룹, 권한, 크기, 생성 시간, 수정 시간, 마지막 접근 시간 등의 정보가 포함됩니다. 또한 파일 시스템 내에서 파일이나 디렉토리의 실제 데이터 블록에 대한 참조도 inode에 저장됩니다. inode는 파일 이름과는 별도로 관리되며 파일이나 디렉토리의 이름은 해당 inode에 대한 포인터로 연결됩니다. 이를 통해 파일 시스템은 ino..
An "inode" is a crucial concept used in Linux and Unix-like operating systems within the file system. Short for "index node", it is utilized to store metadata for files and directories. Typically, each file or directory has a unique inode associated with it. This inode is used to store metadata for the respective file or directory, including information such as the owner, group, permissions, siz..
Pros and Cons of Using Index Pros Improved Search Performance: Index efficiently facilitates record retrieval in tables, particularly enhancing search speed in large databases. Enhanced Sorting and Grouping Performance: Queries involving sorting or grouping can benefit from improved performance. Reinforced Unique Constraint: Indexes prevent duplicates and strengthen uniqueness constraints. Cons ..
Index 사용의 장단점 장점 검색 성능 향상: Index는 테이블에서 레코드를 검색하는 데에 효율적으로 사용됩니다. 특히 대용량의 데이터베이스에서 검색 속도를 향상시키는 데 도움이 됩니다. 정렬 및 그룹화 성능 향상: 정렬 또는 그룹화와 관련된 쿼리에서도 성능이 향상될 수 있습니다. 고유 제약 조건 강화: Index는 중복을 방지하며, 유일성을 강화하는데 사용될 수 있습니다. 단점 저장 공간 소모: Index는 추가적인 저장 공간을 필요로 합니다. 대용량의 테이블에서 많은 인덱스를 가지고 있으면 디스크 공간이 부담스러울 수 있습니다. 데이터 갱신 시 성능 저하: 인덱스가 많은 테이블에서 레코드를 추가, 수정 또는 삭제할 때 성능이 감소할 수 있습니다. 이는 인덱스의 업데이트와 관련이 있습니다. 관리 복..
FastAPI에서 업로드된 파일의 크기를 확인하려면 UploadFile 클래스를 사용하고, 이를 통해 content_length 속성을 확인할 수 있습니다. 다음은 파일 크기를 확인하고 500MB를 초과하는지 여부를 검사하는 코드의 예시입니다. from fastapi import FastAPI, UploadFile, HTTPException app = FastAPI() @app.post("/uploadfile/") async def create_upload_file(file: UploadFile = File(...)): # 최대 허용 파일 크기 (500MB) max_file_size = 500 * 1024 * 1024 # 500MB # 파일 크기 확인 if file.content_length > max_..
id, uid, 그리고 uuid는 각각 고유한 식별자를 나타내는 용어이지만, 사용되는 맥락에 따라 다른 의미를 갖습니다. id (Identifier): 일반적으로 객체, 변수, 또는 데이터베이스 레코드와 같은 것을 고유하게 식별하는 데 사용됩니다. Python에서는 내장 함수 id()가 객체의 고유한 정수 식별자를 반환합니다. 이 값은 객체가 메모리에서 차지하는 위치를 나타내며, 실행 중에만 유효합니다. obj = "example" print(id(obj)) uid (User Identifier): 일반적으로 사용자를 고유하게 식별하는 데 사용됩니다. 예를 들어, 리눅스 시스템에서 각 사용자에게는 UID(User ID)가 할당되어 있습니다. 여기서 username은 실제 사용자의 이름입니다. $ id -..
The terms “id”, “uid”, and “uuid” refer to different concepts and are commonly used in various contexts. Here’s a brief explanation of each id: “id” typically stands for “identifier.” It is a generic term used to denote any unique identifier associated with an object, entity, or record. In programming, you might encounter “id” as a property or method representing a unique identifier for an objec..
import boto3 source_bucket = "source-bucket" source_key = "path/to/source/file.ext" destination_bucket = "destination-bucket" destination_key = "path/to/destination/file.ext" # AWS authentification info session = boto3.Session( aws_access_key_id="YOUR_ACCESS_KEY", aws_secret_access_key="YOUR_SECRET_ACCESS_KEY", region_name="YOUR_REGION" ) # Create S3 client object s3 = session.client("s3") # Cop..
import boto3 source_bucket = "source-bucket" source_key = "path/to/source/file.ext" destination_bucket = "destination-bucket" destination_key = "path/to/destination/file.ext" # AWS 인증 정보 설정 session = boto3.Session( aws_access_key_id="YOUR_ACCESS_KEY", aws_secret_access_key="YOUR_SECRET_ACCESS_KEY", region_name="YOUR_REGION" ) # S3 클라이언트 생성 s3 = session.client("s3") # 파일 복사 copy_source = {"Bucket..
Openvino 는 입력의 동적 변환을 (가능하다면)허용하기 때문에 별도로 dynamic input 을 가진 모델을 생성할 필요가 없습니다. 예를 들어 1x3x256x256 의 input 을 가진 모델이더라도, 1x3x512x512 의 입력을 사용하여 inference 할 수 있습니다. 참고자료 https://docs.openvino.ai/2023.0/ovms_docs_dynamic_shape_custom_node.html https://docs.openvino.ai/2023.0/openvino_docs_OV_UG_ShapeInference.html
TensorRT Command-Line Wrapper(trtexec) 를 사용하여 dynamic input shape 를 가진 trt model file 을 만들어야 했습니다. trtexec config 에 아래 세개의 config 를 추가하면 원하는 trt engine 파일을 생성할 수 있습니다. --minShapes: Build with dynamic shapes using a profile with the min shapes provided --optShapes: Build with dynamic shapes using a profile with the opt shapes provided --maxShapes: Build with dynamic shapes using a profile with th..
File "lib/sqlalchemy/cyextension/resultproxy.pyx", line 16, in sqlalchemy.cyextension.resultproxy.BaseRow.__init__ File "lib/sqlalchemy/cyextension/resultproxy.pyx", line 73, in sqlalchemy.cyextension.resultproxy._apply_processors File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/sqltypes.py", line 2722, in process return json_deserializer(value) File "/usr/local/lib/python3.10/json/_..
Supported for default input shape(NCHW or NHWC) order for each DL frameworks N: Batch size C: Channel of input H: Height of input W: Width ONNX: NCHW TensorRT: NCHW, NHWC Tensorflow Lite: NCHW, NHWC OpenVino: NCHW Tensorflow Keras: NCHW, NHWC Tensorflow saved_model(pb): NCHW, NHWC
terminal 에서 docker hub login 시에 아래와 같은 에러메세지가 출력되면서 로그인에 실패하였다. Error response from daemon: Get https://registry-1.docker.io/v2/: toomanyrequests: too many failed login attempts for username or IP address 해결책은 두가지인데, 1. 조금 기다렸다가 재로그인을 시도해본다. 다른 선임 연구원분의 조언을 통해 이 방법으로 해결하였다. 잦은 로그인 시도시에 에러가 발생하는 경우가 있다. docker hub team 계정의 비밀번호를 변경 후 여러 서버에서 docker login 을 했었는데, 이 경우에 해당하는 것 같다. 얼마나 기다려야 하는지는 정확하..
combbobox의 값에 따라서 dynamic하게 row를 생성합니다. 생성된 row에서 선택된 파일들이 각각 다르게 사용될 수 있기 때문에 button, label, entry는 별도로 생성합니다. import tkinter import tkinter.ttk from tkinter import filedialog main_category=[ "Car", "Animal" ] window = tkinter.Tk() window.title("tkinter Test") window.geometry() window.resizable(0,0) row_order=2 title_column=0 label_column=1 button_column=2 def get_category(eventObject): if cate..
combobox(drop down) 의 값에 따라서 다음 combobox의 옵션 값을 동적으로 만들고자 합니다. import tkinter import tkinter.ttk main_category=[ "Car", "Animal" ] car_list=[ "BMW", "AUDI", "HYUNDAI", ] animal_list=[ "cat", "dog" ] window = tkinter.Tk() window.title("tkinter Test") window.geometry() window.resizable(0,0) def get_category(eventObject): # eventObejct 자리에는 아무 값이나 들어가도 괜찮습니다. if category_combobox.get()=="Car": sub_..
github action 을 통해서 pr, merge, push 등의 이벤트가 발생했을 때 특정 동작을 수행할 수 있다. unit test, linting 같은 기능들을 push, pr 같은 이벤트에 사용해서 자동화하는 경우가 많다. 내 경우 개발 상황과 개발 테스트용 서버의 docker image 간에 sync 가 맞지 않는 것을 방지하기 위해 github action 을 통해서 docker image 를 자동으로 build, push 하도록 하였다. github action 을 추가하는 방법은 두가지가 있는데, 첫번째는 github repo 의 Actions 메뉴에서 New workflow를 클릭하여 docker, aws 등이 제공하는 workflow 스크립트를 가져와 수정하여 사용하는 방법이 있고,..
Error: fatal: repository 'https://github.com/{Repo name}.git/' not found Error: fatal: clone of 'https://github.com/{Repo name}.git' into submodule path '/home/runner/work/{My repo name}/{My repo name}/{Repo name}' failed Failed to clone '{Repo name}'. Retry scheduled Cloning into '/home/runner/work/{My repo name}/{My repo name}/{Repo name}'... remote: Repository not found. Error: fatal: reposit..
원인 커널 모듈에 올라간 드라이버 버전과 클라이언트에서 사용하는 라이브러리 버전이 다른 경우 발생함. 문제 확인 dmesg 를 사용해서 커널 로그를 확인합니다.[1] 로그를 보면 버전이 일치하지 않는다는 메세지를 확인할 수 있습니다. $ dmesg|grep -i nvrm [1539409.084595] NVRM: API mismatch: the client has the version 515.76, but NVRM: this kernel module has the version 515.48.07. Please NVRM: make sure that this kernel module and all NVIDIA driver NVRM: components have the same version. apt or ap..
아래 메세지와 함께 docker login 이 되지 않는 현상이 발생함. ** Message: 07:30:10.098: Remote error from secret service: org.freedesktop.Secret.Error.IsLocked: Cannot create an item in a locked collection Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot create an item in a locked collection` 해결 ~/.docker/config.json 파일을 열어서 아래 내용을 입력한다, 아래의 키 값을 삭제해버리는 것으로 해결하는 경우도 있다. { "creds..
서버실 이동 서버실 이동을 하면서 준비했던 내용을 정리한다. 개요 현 서버실의 계약 종료를 앞두고 새로운 서버 임치 공간이 필요 IDC colocation, 기존 캠퍼스내 서버실 계약 연장, 사무실 직접 운영 등의 옵션이 논의됨 서버실 운영 및 전력 비용이 가장 저렴한 캠퍼스내 서버실 공간 개조로 진행하기로 함 플랜 1. 캠퍼스 공간 사용 가능 여부 컨펌(창업센터 담당자를 통해) 1) 캠퍼스 내 어떤 공간을 활용할 수 있는지 확인 2) 해당 공간 연장 심사 진행 일정을 확인 * 00월 00일 까지 * 재심사 일정: 0월 중에 안내 올 예정 * 공사 등에 대한 승인 여부 메일로 받을 예정 3) 전력 공사 가능 여부 확인 - 00전력 * 주소, E-MAIL, TEL 2. 서버실 공사 진행 1) 방음, 전력,..
프로그램을 백그라운드에서 실행시키기 위해 tmux를 사용하는 경우가 있습니다. 도커를 사용해서 실행하면 똑같이 백그라운드에서 돌아가는 것 처럼 동작시킬 수 있긴 하지만, 이미 tmux를 사용해서 돌아가고 있는 서비스를 도커로 변경하는데 리소스가 많이 필요한 경우가 종종 있습니다. 그런데 tmux를 자주 사용하지 않다 보니 사용법과 단축키를 자주 까먹게 되네요. tmux는 고맙게도 windows와 mac 모두 단축키가 동일합니다. 자주 사용하는 것들만 정리합니다. 기본적인 tmux 사용 방법 1. 세션 생성 # tmux new -s ${session_name} tmux new -s 0 2. 생성된 tmux session 위에서 코드를 실행 3. 세션 나가기(detach) ctrl+b -> d (ctrl+b..
서비스가 지속되다 보면 기능 수정/추가가 반복되면서 코드 베이스가 점점 커지기 때문에, 종국에는 하나의 버튼을 추가하는데 한달이 걸리는 상황이 오는 경우가 있습니다. 개발 복잡도는 계속 끌어내리지 않으면 기하급수적으로 증가하게 되기 때문입니다. 이런 상황이 되면 서비스를 개발하는 것이 매우 어렵게 되는데, 그래서 애자일을 언급하는 글들에서 "지속가능한 개발", "주기적인 Refactoring"이 등장한다고 생각됩니다. 이상적인 프로세스 제가 생각하는 이상적인 개발 방법론은 다음과 같습니다. 1. 애자일 프로세스 안에서 모듈별 설계를 먼저 잡아 큰 그림을 그린다. 2. 각 모듈의 역할을 명확히(구체화) 한다. 3. 모듈별 설계들을 작은 작업 단위로 잘게 나눈다. 4. 작업 단위별 인터페이스"만" 만든 뒤,..
DBeaver를 사용해서 Amazon RDS를 local로 복사(dump, 혹은 가져오기)합니다. DB에 schema를 선택 -> 우클릭 -> 도구 -> Dump database를 클릭합니다. Export할 테이블을 선택합니다. 좌측 하단의 "Local Client ..." 를 클릭하고, 새로 열린 창에서 드랍다운 박스를 연 뒤, "열기 ..." 를 클릭합니다. 데이터베이스 클라이언트가 설치되어 있는 위치를 "홈 추가" 를 해야 합니다. "홈 추가"를 누르고 경로를 추가합니다. "홈 추가"를 누르면 경로를 탐색하게 되는데, "shift + command + g" 단축키를 누르고 경로를 입력해줍니다. 저는 homebrew를 통해 mariadb를 설치했기 때문에, "/opt/homebrew/bin" 을 추가..
mariadb를 실행합니다. root@MacBookAir var % mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6 Server version: 10.7.3-MariaDB Homebrew Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. MariaDB [(none)]> 현재 db 현황을 확인합니다. MariaDB [(none)]> show databases; +---..
M1 맥북에 MariaDB, MySQL를 설치하려고 하니 시행착오를 많이 겪었습니다. MySQL 설치 과정을 정리합니다.(MariaDB) 이 글을 보시는 분들이 바로 사용할 수 있도록 터미널 결과를 복사해서 글을 작성했습니다. 1. homebrew의 install 커맨드로 설치합니다. root@MacBookAir / % brew install mysql ==> Auto-updated Homebrew! Updated 1 tap (homebrew/core). ==> Updated Formulae Updated 59 formulae. ==> Downloading https://ghcr.io/v2/homebrew/core/mysql/manifests/8.0.29 Already downloaded: /Users/..
M1 맥북에 MariaDB, MySQL를 설치하려고 하니 시행착오를 많이 겪었습니다. MariaDB 부터 과정을 정리합니다.(MySQL은 다른 글에) 이 글을 보시는 분들이 바로 사용할 수 있도록 터미널 결과를 복사해서 글을 작성했습니다. 1. homebrew의 install 커맨드로 설치합니다. root@MacBookAir / % brew install mariadb ==> Homebrew is run entirely by unpaid volunteers. Please consider donating: https://github.com/Homebrew/brew#donations ==> Auto-updated Homebrew! Updated 1 tap (homebrew/core). ==> Updated ..
github action으로 docker image를 build하는 과정에서, repo에 포함되어 있는 submodule의 update가 자동으로 되지 않는 현상을 발견하였다. 이를 github action의 workflow를 수정하여 해결하였다. 아래 steps에 "with" 하위 항목을 추가하면 된다. jobs: build-and-push: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: submodules: recursive
github action을 통해서 Unit test를 하는데 GPU가 필요해서, 그냥 가지고 있는 우분투 서버를 이용하기로 함. 이 글은 이미 repo에 github action이 한 개 이상 설정되어 있음을 가정함. 만약 설정이 안되어 있다면 링크를 읽어보고 하기 바람(설정이 안되어 있다면 github UI가 약간 다름) 1. github repository에서 "Actions" -> "New workflow" 를 클릭하고 yml 에 아래 내용을 입력 name: Testing on: push jobs: testing: runs-on: self-hosted steps: - uses: actions/checkout@v2 - name: Functionality test shell: bash -l {0} ru..