Re:제로부터 시작하는 갓생

[TIL.v1] 25/04/09 본문

Daily/TIL

[TIL.v1] 25/04/09

기븜 2025. 4. 9. 13:05
< TIL 반드시 들어가야 할 내용 >
1. 문제: 어떤 문제가 있었는지
2. 시도: 내가 시도해 본 것들 (자세히 쓰기)
3. 해결: 어떻게 해결했는지
4. 배움: 뭘 새롭게 알았는지 (자세히 쓰기)

계속 컴퓨터 화면 속 코드를 보고 있으니... 다크모드인데도 눈이 아파요...(충혈)

# 1.

출근한 뒤 오늘 하루를 돌아보자

* 오전

API 요청부터 결과 다운로드까지 속도향상을 위한 코드 디벨롭-> 코드 리뷰를 위한 내부 회의..

* 오후

회의에서 나왔던 알아야 하는 내용에 대해 공부-> 오전에 진행했던 코드 디벨롭 추가 진행-> 일단 코드 작업 

 

계획했지만 오늘 하지 못한 일

속도 개선을 위한 코드 작업-> 진행 중...

Github Full request 작업진행-> 마음의 짐이 될게~

Docker 작업 후 배포 준비-> 손도 못 댈게~

 

내일 해야 할 일

속도 개선 코드 이제는 손 떼자...하루에 100초 단축한 것으로 일단 만족...시간 나면 추가 디벨롭...

Github Full request

도커 작업 후 솔루션 배포 진행 준비

 

이번 주에 확인해야 할 사항
더보기
3/4 * 디지털 마케팅이란 무엇인가?
* 무슨 직종인가?
* 광고 마케팅이란 무엇인가?
* 어떤 종류가 있는가?
* API도큐읽기
* Streamlit
* 메타 API
* Naver API
3/5 * 크롤링 공부
* 유튜브 playwright python 공부, 구글링 등
3/7 * 가상환경 종류, 차이
3/10 * API 읽는 법과 필요내용 찾는 법
3/14 * API(REST, RESTFUL, FAST) 
3/17 * Python 공부 꾸준히....
* 솔루션 개발요청이 들어올 때 어떤 문서를 보고 지표를 어떻게 써야하는지 생각
4/2 * Docker란 무엇인가? 실행방법? 찍먹

 

배운 점

* Rate limit (속도 제한)

정의: API 요청, 네트워크 작업을 특정 시간 동안 제한해 시스템 과부하를 방지하고 안정성을 유지하기 위한 기술

요소

1) 요청 수 제한: 일정 시간당 처리 가능한 요청 수를 설정

2) 응답 처리: 과도한 요청이 발생하면 제한 초과 메세지를 반환

3) 재시도 전략: 제한 시간 이후 요청을 재시도하도록 구현

예시

import time

def rate_limited_function():
    for i in range(5):
        print("작업 실행:", i)
        time.sleep(2)  # 2초 간격으로 실행하여 속도 제한 유지

 

time sleep()

정의: Python의 표준 라이브러리로 실행을 일시정지할 수 있음. 단위는 초(seconds)

활용

속도 제한(rate limit) 구현

특정 시간 간격으로 작업 실행

시간 기반 테스트

예시

import time

print("3초 대기 중...")
time.sleep(3)  # 3초 동안 실행 정지
print("완료!")

 

* Pandas 작업

정의: 데이터 분석과 처리를 위한 파이썬 라이브러리

주요 작업

1) 데이터 읽기 및 쓰기

import pandas as pd
df = pd.read_csv('data.csv')  # CSV 파일 읽기
df.to_excel('data.xlsx', index=False)  # Excel 파일 쓰기

2) 데이터 필터링

filtered = df[df['나이'] > 25]  # 나이가 25보다 큰 데이터만 추출

3) 병합 및 그룹화

merged = pd.merge(df1, df2, on='key')  # 두 데이터 병합
grouped = df.groupby('컬럼명').sum()  # 그룹화 후 합계 계산

 

await-> async 중요 요소

특징: Python에서 async, await는 비동기 프로그래밍을 구현하기 위한 핵심 요소

개념

async def: 비동기 함수 정의

await: 비동기 작업 대기

특징

비동기 작업을 통해 시간이 오래 걸리는 작업(I/O 요청)을 병렬적으로 실행할 수 있음

CPU 바운드 작업에는 적합하지 않음

예시: 비동기 작업

import asyncio

async def fetch_data():
    print("데이터 가져오는 중...")
    await asyncio.sleep(2)  # 2초 비동기 대기
    print("데이터 가져오기 완료!")
    return "데이터"

async def main():
    result = await fetch_data()
    print(result)

asyncio.run(main())  # 메인 비동기 함수 실행

 

* 디버거 도구(tool)

특징: 코드 실행 상태를 분석하고 오류를 추적하기 위한 도구

대표적인 디버거

1) pdb: Python 표준 디버거. 터미널에서 간단히 사용

2) IDE 디버거: PyCharm, VSCode 등에서 제공하는 GUI 기반 디버거

활용

1) 코드 흐름 추적

2) 변수 값 실시간 확인

3) 특정 코드 라인에서 실행 정지하여 문제 해결

예시: pdb

import pdb

def example_function(a, b):
    pdb.set_trace()  # 디버깅 중단점 설정
    return a + b

result = example_function(2, 3)
print(result)

 

* Async (비동기)

정의: 코드가 차례로 실행되지 않음, 작업이 완료될 때까지 기다리지 않고 다른 작업을 진행하는 방식

특징

async: 비동기 함수 정의

await: 비동기 작업 완료 대기

예시

import asyncio

async def example():
    print("시작")
    await asyncio.sleep(1)  # 비동기적으로 1초 대기
    print("끝")
asyncio.run(example())

 

* 동기 vs 비동기 함수

-> 내일 기재...

 

* Request vs Httpx 함수

-> 내일 기재...

 

* Bottleneck 병목 지점

정의: 시스템 or 프로세스에서 성능을 제한하는 가장 느린 부분

예시: DB 읽기, 쓰기 속도가 애플리케이션의 전체 처리 속도를 제한한다면? 데이터베이스가 병목지점

해결방법: 프로파일링 도구를 사용해 병목구간 식별 후 병렬 처리, 캐싱, 하드웨어 업그레이드를 통해 개선 가능

 

* Python GIL(Global Interpreter Lock)

정의: Python 인터프리터가 동시에 하나의 스레드만 실행하도록 제한하는 메커니즘

영향

다중코어 CPU환경에서 성능 저하를 유발

멀티프로세싱( multiprocessing)으로 대체 가능

 

* Thread (스레드) vs Process (프로세스)

1) 스레드: 같은 메모리 공간을 공유하며 실행. 메모리 효율적, GIL 제한

2) 프로세스: 독립된 메모리 공간 사용. 오버헤드가 크지만 병렬 처리 가능

예시

from multiprocessing import Process

def worker():
    print("프로세스 작업 실행")

p = Process(target=worker)
p.start()
p.join()

 

* logging (로깅)

특징: 시스템 상태를 기록하고 디버깅, 운영 시 필요한 정보를 추적

기본 설정

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug("디버깅 정보")
logging.error("에러 발생")

 

* Sentry

정의: 애플리케이션 오류 및 성능 문제를 모니터링하는 서비스

특징: 실시간 오류 추적, Slack 등과 통합 가능

예시

# pip install sentry-sdk
import sentry_sdk
sentry_sdk.init(dsn="YOUR_DSN_URL")

 

* CORS 미들웨어

정의: 브라우저가 교차 출처 요청(ex. 다른 도메인 서버 요청)을 허용 or 차단하도록 제어

예시: Python FastAPI

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 모든 도메인 허용
    allow_methods=["*"],  # 모든 HTTP 메서드 허용
)

 

기타

* 15조원과 함께 zep 구경한다고 이것저것 해봤는데 시간 순삭 잼

탈출도 하고 스피닝도 타고 헬스도 했다ㅋㅋㅋ온라인으로~

맵 중에 학교 추리게임도 있길래 얼라들이 하는 건 줄 알고 만만하게 보고 금방 끝나겠지 싶어서 시작했다가

그 누구도 풀지 못한 채 2시간이 지났다....^^... 시간 살살 녹는다...

 

'Daily > TIL' 카테고리의 다른 글

[TIL.v1] 25/04/15  (0) 2025.04.15
[TIL.v1] 25/04/14  (0) 2025.04.14
[TIL.v1] 25/04/03 Docker가 나를 힘들게해  (0) 2025.04.04
[TIL.v1] 25/04/02  (1) 2025.04.02
[TIL.v1] 25/04/01  (0) 2025.04.01