728x90
반응형

Programming 53

[python-pptx] 파이썬을 이용한 파워포인트 차트 수정

프로그램 코드를 통해서 파워포인트 파일을 수정해야할 일이 생겨서 자료를 찾아보니 python에서는 python-pptx라는 모듈을 활용하는 것을 찾았다. 늘 마찬가지로 내용을 잊어먹기 전에 포스팅으로 정리해두도록 한다. 이번에 할 일은 2장 짜리 pptx 파일에서 2번째 슬라이드에 막대 그래프의 값을 변경하는 것이다. 슬라이드는 다음과 같이 생겼다. 여기서에서 연도별 수익으로 표기된 부분의 y-axis 인덱스 이름과 각 표기된 값을 수정하는 코드를 작성할 것이다. 먼저 pptx라는 모듈을 설치하도록 한다. % pip install python-pptx 설치할 때 모듈의 이름은 python-pptx이다. 이제 코드를 작성하도록 한다. 파일 이름은 test.pptx로 하였다. 우선 파일을 읽어들이는 부분을 ..

Programming/Python 2023.04.17

[가계부 만들기] Backend - 회원 관리 기능 #5

회원 관리 기능에서 기초가 되는 기능에서 마지막은 refresh token을 통해서 access token과 refresh token을 갱신하는 기능일 것이다. 세션을 사용하지 않고 JWT만으로 사용자 정보를 검증하기 때문에 access token의 유효시간이 만료되었을 때 이를 새로 갱신해줄 필요가 있다. 해당 포스팅에서 해당 기능을 간단하게 구현하도록 한다. Schema 생성 refresh token을 갱신할 때 Response로 받을 schema를 추가적으로 생성할 것이다. 물론 그냥 str로 받아도 되지만 이렇게 받는 것보다 schema를 통해서 정의하는 것이 좀 더 좋아보인다. databases/schemas.py 파일에 아래 코드를 추가한다. # Refresh token을 위한 request ..

[가계부 만들기] Backend - 회원 관리 기능 #4

이제 사용자가 전달한 값을 통해서 실제로 Database에 연동하는 코드를 넣을 것이다. 서비스 디렉토리 생성 먼저 비즈니스 로직을 담당하는 파일들을 모아둘 디렉토리를 생성하고 __init.py__ 파일을 추가해둔다. 그리고 회원 관련 로직을 작성할 members_service.py 파일을 생성한다. 이제 구조를 만들었으니 이제 내용을 작성해보자. 외부 파일 참조 및 변수 선언 from sqlalchemy import select from sqlalchemy.orm import Session from sqlalchemy.sql import func from datetime import timedelta from ..database import models, schemas from ..libraries i..

[가계부 만들기] Backend - 회원 관리 기능 #3

기능 개발을 해가다보니 앞에 개발했던 부분에서 뭔가 부족한 부분을 발견하고 추가하게 된다. 앞선 회원 관리 기능 포스팅에서 schema에 대한 내용을 정리했었는데 회원 정보에 대한 관리 기능을 구현하다가 보니 처음에는 생각하지 못했던 부분을 추가하게 되었다. Schema 현재 버전의 schema.py 파일은 아래 내용과 같다. from pydantic import BaseModel, Field from typing import Optional # 회원 가입에 대한 Request Schema class MemberCreate(BaseModel): member_id: str = Field(title="사용자 아이디", max_length=30) member_pw: str = Field(title="사용자 패..

[python] Dictionary

파이썬에서 Dictionary(딕셔너리)는 매우 중요한 자료형 중 하나이다. Dictionary는 key-value 쌍으로 이루어진 데이터를 다루기 위한 자료형이다. 이번에는 파이썬의 Dictionary 자료형의 특징, 제약 사항 및 사용 방법 등에 대해 자세히 알아보도록 하겠다. Dictionary의 특징 Dictionary는 key-value 쌍으로 이루어져 있습니다. 즉, 값을 저장할 때 key를 지정하여 저장하며, 이 key를 이용하여 값을 참조합니다. Dictionary는 리스트나 튜플과 달리 순서가 없습니다. 즉, 값을 저장한 순서대로 출력하지 않습니다. Dictionary의 key는 변경 불가능한 자료형을 사용해야 합니다. 즉, 문자열, 정수, 실수, 불리언 등을 사용할 수 있지만 리스트나 ..

Programming/Python 2023.03.29

[가계부 만들기] Backend - 회원 관리 기능 #2

이제 여기서는 회원 정보를 처리하는 방법에 대해서 정리할 것이다. 암호화 또는 인증에 관련된 내용은 두 가지 정도로 정리할 수 있을 것이다. 첫 번째로 회원의 암호를 저장할 때 일반 텍스트로 저장하는 것이 아니고 hash로 처리한 후에 저장하고 로그인할 때 이렇게 hash 처리된 값과 입력한 암호가 일치하는지 확인하는 기능이 필요하다. 두 번째, 인증이 성공한 이후에 해당 사용자는 인증된 사용자임을 파악하기 위해서 토큰을 발생하고 이 토큰이 있는 요청에 대해서만 처리해줄 것이다. 이를 위해서 별도의 파일로 분리하여서 관련 코드를 정의하도록 하겠다. 인증 인증 관련 내용에 대한 파일은 app 디렉토리 밑에 libraries 디렉토리를 생성하고 auth.py 파일을 생성하여 해당 파일에서 정리하도록 할 것이..

[가계부 만들기] Backend - 회원 관리 기능#1

Concept 프로그램을 만들면서 가장 기본이 되는 기능이 바로 회원 정보를 관리하는 것이다. 생성되는 모든 정보는 회원 정보에 종속되게 되므로 회원의 정보를 잘 관리하는 것이 매우 중요하다. 이 프로젝트에서는 회원의 많은 정보를 사용하지 않는다. 이전에 공유했던 회원 정보 테이블을 다시 보자. CREATE TABLE `tb_members` ( `member_no` smallint unsigned NOT NULL AUTO_INCREMENT COMMENT '멤버번호', `member_id` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT '사용자 아이디', `member_pw` varchar(128) COLLATE utf8mb4_general_ci NOT..

[sqlalchemy] Postgresql Query ORM 변환

어제 회사에서 코드를 보다가 뭔가 개선점을 발견하고 한참을 작업해서 코드를 수정했는데 기록을 남겨두고자 포스팅한다. AS-IS 해당 코드는 이런 역할을 한다. 검색에서 광고로 사용할 키워드를 등록해두면 사용자가 검색 질의를 하면 해당 키워드가 현재 사용중인 광고에 포함되는 키워드인지 확인해보는 것이다. 각 광고는 여러개의 키워드를 가질 수 있으면 광고와 키워드 간의 관계는 m:n의 관계이며 각 광고는 서비스의 시작일과 종료일을 가진다. 이렇게 키워드를 추출하는 이유는 DB의 부하를 줄이기 위해서 키워드 리스트만 따로 추출해서 레디스에 들고 있다가 질의가 들어오면 해당 키워드로 등록된 광고가 있는지 확인하고 있으면 정보를 가져오고 없으면 빈 값을 보내기 위해서이다. 즉, 디비의 부하를 줄이기 위한 조치이다..

Programming/Python 2023.03.22

[Nextjs] API 기능을 통한 파일 업로드 처리(base64) #2

개요 얼마 전 포스팅에서 nextjs를 통해서 api 구조에서 파일을 업로드하는 내용을 다루었다. 이게 로컬에서 개발할 때는 잘 작동하고 별 문제 없이 백엔드로 파일이 전달이 되었는데, 배포하려고 서버에 올려두고 테스트를 진행하니 backend에서 파일을 전달받을 때 자꾸 파일이 바뀌어서 업로드 되었다. 미세하게 파일 용량이 바뀌어서 업로드되는데 이렇게 되면 파일이 손상되어서 이미지 파일이 브라우저에서 열리지 않는 문제가 발생하였다. 어떤 원인 때문일지 디버깅을 해보다가 파일이 로컬 브라우저에서 nextjs API로 전달될 때 이미 파일이 바뀌 상태에서 업로드되었다. 위의 그림과 같이 파일이 전달되는데 브라우저에서 nextjs server로 전달될 때 이미 파일이 바뀐다. 근데 로컬 nextjs를 구동할..

Programming/Nextjs 2023.03.22

[가계부 만들기] Backend - Database #2

이전 포스팅에서 connection.py 파일을 통해서 mysql 서버에 접근하는 코드를 추가하였다. 이제 ORM을 사용하기 위해서 models.py 파일을 작성할 것이다. ORM에 대한 내용은 아래 링크에서 확인할 수 있다. ORM(Object Relational Mapping)이 뭘까? 🤔 ORM이란? ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relatio geonlee.tistory.com Fastapi에서는 sqlalchemy 라이브러리를 사용하고 있고 여기서 지원해주는 ORM 기능을 통해서 데이터..

728x90
반응형