전체 글 315

파일 관리 서비스 2 - S3 폴더 구조 설계

S3(스토리지) 폴더 구조 설계하기스토리지에 파일을 저장할 때 다양한 기준으로 폴더 구조를 설계 하여 저장 할 수 있다.S3는 내부적으로 데이터를 파티셔닝하여 분산 저장하는데, 우리가 할 수 있는 폴더 구조, prefix 등을 잘 활용하여 설계 할 수록 성능적인 이점 뿐만 아니라 관리 자체를 효율적으로 할 수 있다. 설계 방법에 대한 규칙의 특징이 대해 알아본다. 날짜 기반 구조 (Date-Based Structure)예시2024/08/18/files/...2024/08/17/files/......2022/05/19/files/...특징백업, 로그 파일, 일별/월별 데이터 저장 관리시 적절날짜 기준 데이터 조회시 폴더 구조가 명확해져 검색 성능 개선단 files/ 아래에 파일들이 많을 때는 추가 규칙 p..

파일 관리 서비스 1 - 업로드 (Presigned URL)

개요많은 서비스가 사용자로 부터 파일을 받아, 이를 스토리지 등에 저장 해 두고 관리한다. 업로드 간 올바른 데이터가 잘 업로드 되도록 검증하거나, 유출되면 안되는 중요한 정보도 있기 때문에 이를 잘 관리하는 것 또한 중요하고, 스토리지가 유저에 의해 오남용 되는 경우도 주의해야 한다. 해당 글에서는 다음 정보에 대해 알아본다.파일 업로드 간 올바른 데이터(무결성) 관리를 위한 검증 목록파일 업로드 시 스토리지 접근 주체 (BE vs FE)파일 업로드 Presigned URL 방법 파일 업로드 간 올바른 데이터(무결성) 관리를 위한 검증 목록파일  간 꼭 모든 사항을 필수적으로 검증해야 하는 것은 아니고, 서비스에 맞게 하면됨.대분류소분류내용1. 파일 형식 검증확장자 검증file 이름에서 확장자 검증  ..

[좋은 DB 설계하기] 설계시 고려하면 좋을 기본 개념들

기본 원칙무결성 - 데이터베이스 내에 모든 값은 언제나 정확한 값을 유지해야 한다.유연성 - 데이터베이스 구조는 요구사항 변화에 대해 수정이 쉬워야 한다.확장성 - 데이터베이스 구조는 기능 확장에 대해서 수정이 쉬워야 한다. 엔티티 이해유형 엔터티 : 물리적인 형태 o, ex. 상품, 회원)개념 엔터티 : 물리적인 형태 x, 개념적, ex. 부서, 학과)사건 엔터티 : 행위로 인해 발생, ex. 주문, 이벤트 응모) 기본키 생성시 자연키 vs 인조키 기본 키란 해당 레코드를 식별하기 위한 유일한 값 자연키 (DB에서 자동으로 생성해주는 것)장점 : 자동으로 인덱싱 해줌단점 : 혹여 기본키 수정해야 될 상황 발생시 문제 발생 인조키 (직접 생성 후 지정)장점 : 비즈니스 로직으로 인한 기본키 변경시에도 유..

[Python] 데이터 직렬화 및 검증 라이브러리 비교 (with 웹프레임워크)

요약아래 표를 기준으로 사용 환경, 타입 검사, 문서화 여부 등이 주된 기준 요소 일 것 같다.제공되는 기능 자체는 동일해서, 라이브러리 사용 방식? 이 보다 편하게 느껴지는 것으로 선택하면 될 것 같다.   PydanticDRFMarshmallowCerberusColanderVoluptuousAttrsSchematics릴리즈 날짜2018년 1월2011년 7월2013년 5월2014년 1월2010년 6월2012년 9월2016년 4월2013년 7월사용 환경FastAPIDjangoFlaskChalice일반 PythonPyramid일반 Python타입 검사파이썬 타입 힌팅명시적 타입필드명시적 필드 타입명시적 필드 타입명시적 필드 타입명시적 필드 타입파이썬 타입 힌팅명시적 필드 타입유효성 검사다양한 기본 제공 유..

Python/Advanced 2024.08.04

[최적화] Python 인터닝(Interning) 기법

인터닝 (Interning)인터닝(Interning) 은 동일한 값을 가진 불변 "객체"를 하나만 유지하여 메모리 사용을 최적화하고, 객체 비교를 빠르게 하는 기술 파이썬에서의 인터닝의 특징일정 길이의 문자열에 대해서 자동으로 인터닝이 적용된다.일정 크기의 숫자에 대해서 자동으로 인터닝이 적용된다.사용자가 sys.intern 으로 직접 인터닝 풀에 집어넣어 놓고 관리할 수 있다.일정 길이, 일정 크기는 cpython 즉 python 버전에 따라 다를 수 있다.주로 메모리 사용 최적화에 사용된다. 인터닝 예시 코드# Python 언어의 자동 인터닝 o# 문자열 str1, str2 = 'abcdefg', 'abcdefg'# id 함수는 객체가 메모리 내에 위치 반환print(id(str1) == id(str..

Python/Advanced 2024.08.03

Python 코드 실행 과정

인터프리터 언어 Python 파이썬은 인터프리터 언어로 CPython 이라는 컴파일러에 의해 소스 코드를 바이트 코드로 변환하여 PVM (Python Virtual Machine) 에 의해 기계어로 한줄 한줄 번역 (인터프리팅) 되며 실행 (실행되는 이 순간을 런타임 이라고도 함)된다. Python 실행 과정 .py 코드 작성Python 인터프리터(Cpython) 가 소스 코드를 읽어 바이트 코드(.pyc 파일) 로 변환 및 저장- 문법적인 오류가 있다거나 등 이면 에러 발생Python 가상 머신(PVM)은 바이트코드를 읽고 실행- 바이트 코드를 한줄 한줄 번역하여 프로그램을 실행- Python의 메모리 관리, 변수 처리, 함수 호출 등이 이루어짐PVM 에서 실행 중 오류가 있다면 에러 발생이러한 과정을..

Python/Advanced 2024.07.31

[코드 리뷰]에 대한 견해 (by. '아주 사적인 코드 리뷰 생각' 글을 읽고)

현재의 팀에서는 아직 PR 에 대한 문화나 규칙 등이 완전히 설립되지는 않았는데, Pull Request를 받거나 요청하면서, 코드 리뷰를 하다 보면 참 많은 고민 지점이 생기는 것 같다. 깊게 몰입해서 하면, 1시간 ~ 2시간은 금방이고 의견과 피드백을 작성하 기 위해 그때 그때 다른 레퍼런스를 보다 보면, 반나절에서 하루 종일 PR 만 봤던 적도 있던 것 같다. (물론 각잡고 학습하자느니 뭐니 혼자 계획하고 설치는 것 보다, 그 순간 리뷰를 위해 특정 부분을 빠르게 학습하는 것 또한 효율적이였던 것 같기도) 그러던 중 다음의 '아주 사적인 코드 리뷰 생각' 이라는 정말 좋은 아티클을 보게 되었고, 많은 공감을 하게 되었던 것 같다.(본인이 주니어거나 코드 리뷰에 무언가 고민이 있다면 꼭 읽어보아도 좋..

[Naver Map] 요구사항 별 사용 API 및 기능 정리 등

나중에 네이버 맵 (Naver Map) 관련 API 사용이나 정보가 필요시 때를 위한 정리 주소 정보 검색 으로 위경도 얻기기능 개요 지번, 도로명를 질의어로 사용해서 주소 정보를 검색 검색 결과 주소 목록 및 세부 정보 (위경도 좌표 포함) 네이버 API 문서 (링크)  사용법네이버 클라우드 콘솔에서 application 생성하고 client id (X-NCP-APIGW-API-KEY-ID) 얻기해당 정보를 querystring에 사용요청 URL 예시) GET https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode-js?X-NCP-APIGW-API-KEY-ID=&query=색어: 논현동 15-1>응답으로 주소 정보 및 위경도 좌표 반환 네이버 맵 U..

Python/Utils 2024.07.27

[SW 개발] 의존성 주입 (DI, Dependency Injection)

DI (Dependency Injection) 란?하나의 객체가 다른 객체를 필요로 할 때(의존성을 가진다), 객체를 클래스 내부에서 직접 생성하여 사용하지 않고, 외부에서 생성해 놓은 객체를 사용(주입)하여 결합도를 낮추는 것. DI의 장점결합도 감소: 객체 간의 의존성이 명시적으로 주입되어, 객체들이 직접적으로 결합되지 않아 결합도가 낮아짐.유연성 및 재사용성 증가: 의존성 주입을 통해 객체의 구성 요소를 쉽게 교체하거나 재사용할 가능테스트 용이성: 의존성을 외부에서 주입받기 때문에, 모의 객체(Mock Object)나 테스트 더블(Test Double)을 사용하여 단위 테스트를 쉽게 작성 가능유지 보수성 향상: 의존성이 명확하게 드러나고 관리되므로, 코드의 가독성과 유지보수성 향상 Python DI..

[좋은 DB 설계하기] 제한된 값을 설계 할 때 Enum vs 테이블

개요상태, 유형, 타입, 등급 등의 들어갈 수 있는 값에 제한이 있는 필드들에 대해서 추가적인 참조 테이블 설계가 필요할지, 아니면 Enum 값 정도로 괜찮을지에 대한 장단 비교, 기준 등  Enum 사용시 장단점장점추가적인 테이블이 필요 없다.조인이 불필요하여 조회 속도가 빠르다. 단점Enum 값들에 연관된 추가적인 값들을 저장이 불가 (ex. 등급 이란 개념의 추가 필드, eng_name 등등)Enum 값의 변경시 코드 등도 직접 수정되어야 함 (변경시 비용이 큼) 참조 테이블로 설계시 장단점장점해당 테이블 개념에 부가적인 개념등을 테이블의 필드로 자유롭게 추가 가능하다. 제한된 값이 늘어날 때, 추가에 유연하다. 단점조인이 발생하여, 조회 속도가 저하될 수 있다.  결론핵심 기준은 유연성, 향후 변..