전체 글 49

파이썬 데코레이터 python Decorator

파이썬 데코레이터는 자주사용하는 함수를 재사용하기 위해 만드는 역할을 해준다. 예를 들어 캐시, 로깅, 소요시간, 로그인/권한체크, 입력값 검증, 트렌젝션 처리 등에서 사용되는데 해당 내용들의 공통점으로는 함수의 핵심로직은 건드리지 않고 실행 전 후에 공통되는 기능을 붙이고 싶은 경우이다.기존에 django프로젝트를 진행하면서 사용되는 것을 확인할 수 있었다.그렇다면 데코레이터는 어떻게 만들고 어떠한 방식으로 동작하게 되는지 알아보도록 하자.1. 데코레이터데코레이터는 함수를 받아서 그 함수를 대신 실행하는 다른 함수로 바꿔주는 구조다. 즉 기존 함수는 그대로 두고 실행 방식을 살짝 바꾼다def hello(): print("hello") 지금은 hello()를 호출하면 그 안의 코드가 그대로 실행된다.그..

Python 2025.12.17

파이썬 클로저(Closure)

함수가 값을 기억한다는 것의 의미파이썬을 사용하다 보면 데코레이터, 콜백, 미들웨어 같은 구조에서 클로저(Closure)라는 개념을 자주 접하게 된다. 처음에는“함수가 값을 기억한다”정도로 이해하고 넘어가지만, 실제로는 변수가 언제, 어떻게, 무엇을 기억하는지를 정확히 이해하지 않으면 late binding 문제나 예기치 않은 버그를 만나기 쉽다. 이 글에서는 클로저를 정의 → 동작 원리 → 자주 틀리는 문제 → 해결 방법 → 실무 연결 순서로 정리한다.1. 클로저란 무엇인가한 줄 정의클로저란, 내부 함수가 자신이 생성될 당시의 외부 함수 지역 변수를 기억하고 있는 구조이다.중요한건 값(value)이 아니라 변수(variable)이다.2. 가장 기본적인 클로저 예제def outer(): x = 10..

Python 2025.12.16

파이썬 가변 객체와 불변 객체

가변 객체와 불변 객체라는 개념이 있다.1. 파이썬에서 변수는 ‘상자’가 아니다파이썬에서 변수는 값을 담는 상자가 아니다.변수는 객체를 가리키는 이름(참조)일 뿐이다.a = 10 b = a 이때 a와 b는 같은 객체(10) 를 가리키고 있다.이 개념을 이해하지 못하면 가변/불변 객체도 제대로 이해할 수 없다.2. 가변 객체와 불변 객체 한 줄 정의 불변 객체 (Immutable)객체가 생성된 이후 내부 값을 변경할 수 없는 객체 가변 객체 (Mutable)객체가 생성된 이후 내부 값을 변경할 수 있는 객체중요한 점은“변수가 바뀌는 것”과 “객체가 바뀌는 것”은 완전히 다르다는 것이다.3. 대표적인 타입 정리구분타입불변 객체int, float, bool, str, tuple, frozenset가변 객체li..

Python 2025.12.15

대규모 트래픽 상황을 가정한 서버개선(index, redis)

지난 내용: 대규모 트래픽 상황을 가정한 서버 부하 테스트(python, locust) 대규모 트래픽 상황을 가정한 서버 부하 테스트(python, locust)1. 대규모 트래픽이 왜 중요한가?최근 아이온2 출시 당시, 많은 유저가 동시 접속을 시도해 서버가 터지고, 스트리머들도 수 시간 동안 접속 대기 또는 반복 접속을 하다 포기하는 상황을 보게되kanui.tistory.com지난 부하테스트결과에서 RPS는 낮고 응답시간이 지나치게 높아서 정상적인 서비스가 불가능할만한 환경에서 응답시간을 개선하기 위해 사용하였던 내용을 정리하고자 한다. 해당 내용은 다음과 같다.테스트서버를 실제 서버환경과 같은 gunicorn으로 변경조회 및 검색 테이블 컬럼 ORM으로 index생성서버와 DB사이에 캐시(redis..

기타 2025.12.05

대규모 트래픽 상황을 가정한 서버 부하 테스트(python, locust)

1. 대규모 트래픽이 왜 중요한가?최근 아이온2 출시 당시, 많은 유저가 동시 접속을 시도해 서버가 터지고, 스트리머들도 수 시간 동안 접속 대기 또는 반복 접속을 하다 포기하는 상황을 보게되었다 이 과정을 보며 느꼈던 점이 대규모 트래픽은 선택이 아니라 필수로써 한때 채용공고에서 “대규모 트래픽 경험”이 필수 자격으로 적힌 경우가 많았는데, 이제 와서 보니 그 이유를 확실히 체감하게 되었다.그래서 나 역시 서버를 직접 운영할 개발자로서 "내가 서버를 운용하게 되었을 경우 비슷한 상황이 들이닥치면 어떻게 해야할까?" 라는 시뮬레이션을 해 보기로 했다.2. 시나리오 설정나는 특정 게임의 정보를 제공하는 사이트를 운영하고 있다.해당 게임의 신규·복귀 유저 유입 시즌이 도래했다.2025년 11월 26일 기준 ..

기타 2025.12.03

github rivate 팀 프로젝트를 내 public 리포지토리로 복제하는 방법

포트폴리오를 정리하다보니 이력서에 해당 프로젝트를 public으로 보여주고 싶은데 팀에서 사용하는 private이므로 나만의 github계정으로 옮겨와서 public으로 공개하고 싶었습니다.하지만 github에서는 private 리포지토리를 그대로 fork해서 public로 바꾸는 것이 불가능하기 때문에, 다른 방법을 사용했습니다.따라서 private 리포지토리를 내 계정의 public 리포지토리로 복제하는 방법을 정리했습니다.1. 팀 프로젝트 리포지토리 push먼저 팀프로젝트 리포지토리를 받아줍니다.git clone https://github.com/[리포지토리 주소].git 해당 로컬에는 팀 프로젝트의 모든 커밋 히스토리등의 기록이 포함된 상태입니다.2. 내 github 계정에서 public 리포지토..

project/guava 2025.11.24

로컬환경의 django + AWS RDS(mariadb) 연결

팀프로젝트를 진행하게 되면서 다른 팀원들과 db를 공유해놓은 상태로 개발을 진행해야 할 것 같아. 다음과 같이 세팅을 진행하였습니다. RDS 생성사용할 db와 db명, 사용자 명, 암호를 적어줍니다. ec2연결을 하지 않을 것 이므로 해당사항을 선택한 후 "데이터베이스 생성"해 줍니다. 저의 경우 데이터베이스가 생성되는데 5분정도 소요되므로 천천히 기다려 줍니다. 외부에서 연결데이터베이스 생성이 완료되었으므로 로컬(DBeaver)에 연결을 해 줄 것입니다.사용 데이터베이스로 변경 후 노란색부분 접근을 허용할 ip주소를 지정하는 곳으로 고정ip주소나 0.0.0.0/0으로 저장해줍니다.모르겠으면 그냥 0.0.0.0/0으로 사용하시면 됩니다.생성한 RDS 데이터베이스의 엔드포인트를 확인한 후Server ..

project/guava 2025.10.01

[Django + drf + jwt] 커스텀 User 회원가입, 로그인

프로젝트 ERD를 설계하던 도중 user테이블에 필요한 부분만 필요하다는 의견이 있어 django에서 제공하는 일반적인 테이블로는 해당 요건을 충족하지 않아 이번 글에서는 Django + DRF + SimpleJWT 조합으로 팀에 맞춘 커스텀 User 모델을 만들고,회원가입/로그인/로그아웃 API를 구현한 과정을 정리해 보았습니다. 해당 코드는 chatGPT의 도움을 받아 작성한 것임을 명시합니다. 팀에서 정의한 사용자 테이블 스펙은 다음과 같았습니다. 컬럼명설명 user_id (PK)기본 키 (자동 증가)username아이디 (로그인 식별자)email이메일password비밀번호 (해시 저장)social_id소셜 로그인 식별자 (카카오/네이버 등)name사용자 이름display_name닉네임create..

project/guava 2025.09.22

데이터 입출력 구현(3)

정규화(Normalization)테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정가능한 중복을 제거하여 이상발생의 가능성을 줄이는 것이다.정규화 과정제 1정규형 - 테이블의 모든 속성 값이 원자 값으로만 되어있어야 한다.제 2정규형 - 제 1 정규형을 만족시키며, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족해야 한다.제 3 정규형 - 제 2정규형을 만족시키며, 기본키가 아닌 모든 속성이 기본키에 대하여  이행적 함수적 종속을 만족해야 한다.BCNF - 제 3정규형을 만족시키며, 모든 결정자가 후보키인 정규형 제 4 정규형 - 다중 값 종속이 존재할 경우 모든 속성이 함수적 종속관계를 만족하는 정규형제 5 정규형 - 모든 조인 종속이 후보키를..

데이터 입출력 구현(2)

관계형 데이터베이스의 구조 / 관계형 데이터 모델관계형 데이터베이스2차원적인 TABLE을 이용해서 데이터 상호 관계를 정의하는 데이터베이스관계형 데이터베이스의 릴레이션 구조릴레이션은 데이터들을 표의 형태로 표현한 것으로 구조의 릴레이션 스키마, 실제값의 릴레이션 인스턴스로 구성된다.튜플릴레이션을 구성하는 각각의 행튜플의 수를 카디널리티, 기수, 대응수라고 한다.속성데이터베이스를 구성하는 가장 작은 논리적 단위속성의 수를 디그리(Degree) 또는 차수라고 한다.도메인하나의 에트리뷰트가 취할 수 있는 같은 타입의 원자(Atomic)값의 집합릴레이션의 특징한 릴레이션에는 똑같은 튜플이 포함될수 없으므로 릴레이션에 포함된 튜플들은 모두 상이하다.한 릴레이션에서 튜플에 순서는 없다.삽입, 삭제 등의 작업으로 인..