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

[TIL.v1] 25/03/25 본문

Daily/TIL

[TIL.v1] 25/03/25

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

???: 알아서 강하게 커야해 (끄덕끄덕)

Me: 야근각;;;; (열심히 하고 질문한 만큼 배워갈 수 있음ㅋㅋㅋ)

# 1.

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

* 오전

modules/method code review

* 오후

service/shopping_ad_download code review -> API/main code review -> Terminal+FAST API run test

야간 Gilbert님과 추가공부! terminal setting 재확인, git찍먹, fast api local 얼레벌레 동작

 

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

modules: method -> 완료

service: shopping ad download -> 완료

service: keyword duplicate / landing 

-> 내가 맡은 업무는 해당 기능이 없으므로 2가지는 API 동작 후에 시간 날 때 봐도 늦지 않음. 일단 패스

Terminal+API connect test -> 일단 완료, 내일 재확인

github 관련(프로필 꾸미기 등..) -> 하다 말았다! 내일~

 

내일 해야 할 일

벌써 화요일 끝...!! 플젝 속도내서 후딱 끝내고 다음거 하자!🔥👩‍💻

API 동작 구현 이후 파일 생성~테스트

github 초기세팅 마저하기 

 

이번 주에 확인해야 할 사항
더보기
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 공부 꾸준히....
* 솔루션 개발요청이 들어올 때 어떤 문서를 보고 지표를 어떻게 써야하는지 생각

 

배운 점

* Uvicorn

- 정의: Python의 ASGI(Asynchronous Server Gateway Interface) 서버

- 설명

FastAPI 애플리케이션을 실제 서버에 띄우는 도구

비동기 처리를 지원하는 가볍고 빠른 웹 서버, 비동기 웹 프레임워크(FastAPI or Starlette)와 같이 사용

주로 개발 중에 실시간으로 코드 변경 사항을 반영하는 --reload 옵션과 함께 사용. 실제 서비스에서도 사용 가능

- 특징: 고성능, 경량서버

- 예시

# main.py 파일 예시
from fastapi import FastAPI

# FastAPI 앱 인스턴스 생성
app = FastAPI()  

# "/" 경로에 GET 요청이 들어왔을 때 실행되는 엔드포인트 정의
@app.get("/엔드포인트경로")
async def read_root():
    return {"message": "Hello World from FastAPI"}

# 위 앱을 실행하려면 터미널에서 다음 명령어를 입력:
# uvicorn main:app --reload
# main:app -> main.py 파일에 정의된 'app' 인스턴스를 의미함

 

* Async

- 정의: 함수 or 메서드를 비동기 함수(or Coroutine)로 선언할때 사용되는 키워드

- 설명

비동기 함수는 I/O 작업(파일 읽기&쓰기, 네트워크 요청 등) 동안 다른 작업을 동시실행 도와줌

Python 3.5이상부터 지원. await 키워드와 함께 사용 -> 비동기 작업흐름 제어

- 특징

비동기 처리: 작업이 완료될 때까지 기다리지 않고 다른 코드를 실행할 수 있음. 프로그램 효율성 높임

코루틴: 일시중단 및 재개가능 함수. 복잡한 비동기 로직 단순화함

- 예시

import asyncio

# async 키워드를 사용해 비동기 함수(코루틴)를 선언
async def say_hello():
    print("안녕하세요!")  # 즉시 실행되는 부분
    await asyncio.sleep(1)  # 1초 동안 비동기 대기 (다른 작업 수행 가능)
    print("1초 후 다시 인사합니다!")

# 비동기 함수 실행: asyncio.run()은 이벤트 루프를 생성하고 코루틴을 실행
asyncio.run(say_hello())

 

* Await

- 정의: 비동기 함수내에서 awaitabe 객체(ex. 코루틴, Future 등)의 작업이 완료될 때까지 기다리도록 하는 키워드

- 설명

await를 만나면 해당 작업이 완료될 때까지의 함수실행을 일시중단, 다른 코루틴은 계속 실행될 수 있음

-> 프로그램이 블로킹(멈춤)되지 않고 동시에 여러작업을 처리가능

- 특징

비동기 대기: 오래걸리는 작업을 기다리는 동안에도 이벤트 루프가 다른 작업 처리 가능

코드 가독성: 복잡한 비동기 로직을 동기 코드 느낌으로 작성가능해 직관적

- 예시

import asyncio

async def fetch_data():
    print("데이터를 가져오는 중...")  
    await asyncio.sleep(2)  # 2초 동안 대기 (실제 상황에서는 네트워크 I/O 등)
    print("데이터 가져오기 완료!")
    return "sample data"

async def process_data():
    # fetch_data()의 결과가 올 때까지 기다림
    data = await fetch_data()
    print("가져온 데이터:", data)

asyncio.run(process_data())

 

* FastAPI

- 정의: Python 기반 최신 웹 프레임워크, 빠르고 효율적인 API서버 제작을 위해 설계됨

- 설명

비동기 지원: async&await 지원 -> 높은 동시성(concurrency) 구현 가능

자동 문서화: 작성한 API에 대한 자동 문서를 Swagger UI와 ReDoc을 통해 바로 확인 가능

타입 힌트 활용: Python의 타입 힌트를 적극 활용해 데이터 유효성 검사 및 코드완성기능 제공

- 특징

고성능: Unicorn과 같은 ASGI서버와 결합해 빠른 응답속도 보임

쉬운 사용법: 간단한 코드로 RESTful API 쉽게 구축가능

자동 문서화: API명세 자동생성으로 팀원(ex. 프론트엔드 개발자 등)과의 편리한 협업

- 예시

# fastapi_example.py 파일 예시
from fastapi import FastAPI

app = FastAPI()  # FastAPI 앱 생성

# GET 요청 처리 엔드포인트
@app.get("/")
async def root():
    # 클라이언트에게 JSON 응답 반환: {"message": "Hello World from FastAPI"}
    return {"message": "Hello World from FastAPI"}

# POST 요청 처리 엔드포인트 (예: 클라이언트로부터 데이터를 받아 에코하여 반환)
@app.post("/echo")
async def echo_message(message: dict):
    # 받은 메시지를 그대로 반환
    return {"echo": message}

# 터미널에서 아래 명령어로 실행가능:
# uvicorn fastapi_example:app --reload
# fastapi_example: 현재 파일명, app: FastAPI 인스턴스

 

* Logging

- 정의: 프로그램 실행 중 발생하는 이벤트, 오류, 상태정보를 기록하는 Python 내장모듈

- 설명

단순한 print()문 대신 logging 모듈은 로그의 중요도(레벨)를 지정 관리 가능

로그는 콘솔뿐만 아니라 파일, 다른 스토리지에도 남길 수 있어 디버깅과 운영 시 매우 유용

- 특징

1) 여러 로그 레벨: DEBUG, INFO, WARNING, ERROR, CRITICAL 등 상황에 맞게 로그 구분 가능

2) 유연한 출력: 로그 포맷과 출력 대상을 자유롭게 설정 가능

- 예시

import logging

# 기본 설정: DEBUG 레벨 이상 모든 메시지를 출력하고 타임스탬프와 로그 레벨을 함께 표시
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)s - %(message)s')

# 다양한 로그 레벨의 예시
logging.debug("이 메시지는 디버그용 - 상황을 세부적으로 추적할 때 사용")   # 개발시 상세한 정보 확인
logging.info("이 메시지는 정보용 - 일반적인 실행 정보 출력")
logging.warning("이 메시지는 경고용 - 잠재적인 문제 발생 시")
logging.error("이 메시지는 오류용 - 실행 중 에러 발생 시")
logging.critical("이 메시지는 치명적 오류 - 프로그램 실행 불가능한 상황")

 

* 비동기 vs 동기 코드

비동기(async/await): I/O 작업(네트워크, 파일 읽기 등)을 효율적으로 처리하지만 CPU 집약적인 작업에 비적합

동기코드: 단순하고 직관적이나 I/O 작업 중에는 전체 프로그램이 멈추므로 비효율

 

* ASGI vs WSGI

WSGI: 전통적인 파이썬 웹서버 인터페이스. 동기코드만 지원

ASGI: FastAPI, Starlette, Uvicorn. 비동기 처리 지원. 웹 애플리케이션 동시성 높임

 

* 실제 개발 환경에서의 고려사항

1) 디버깅과 로깅

FastAPI와 비동기 환경에서 로깅(logging) 설정 중요

에러 발생시 자세한 정보 남기도록 설정 필요

2) API 문서화: FastAPI는 기본적으로 /docs (Swagger UI), /redoc (ReDoc) 경로에서 API 문서 자동생성함

3) 환경설정

개발환경에서 --reload 옵션 사용으로 코드 수정 시 서버가 자동으로 재시작되도록 하고

실제 운영 환경에서 안정성과 보안을 고려해 설정을 다르게 구성해야 함

 

기타

* 점심 뼈구이🍖 매웠는데 맛있었고 속이 살짝 아팠지만 극뽁함

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

[TIL.v1] 25/03/28  (0) 2025.03.29
[TIL.v1] 25/03/26  (1) 2025.03.26
[TIL.v1] 25/03/24  (0) 2025.03.24
[TIL.v1] 25/03/22~23  (0) 2025.03.22
[TIL.v1] 25/03/21  (2) 2025.03.21