분류 전체보기131 코루틴 vs 쓰레드 코루틴 vs 쓰레드: 차이점 정리1. 기본 개념쓰레드 (Thread)운영체제(OS)가 관리하는 작업 단위이다.여러 쓰레드가 동시에 실행되며 멀티코어 CPU를 활용해 병렬 처리가 가능하다.쓰레드마다 독립적인 실행 컨텍스트(레지스터, 스택 등)가 필요하며, 이를 관리하는 비용이 높다.코루틴 (Coroutine)사용자(프로그래머)가 관리하는 경량화된 작업 단위이다.비동기 작업을 수행하며, 필요할 때 작업을 중단(suspend)하고 재개(resume)할 수 있다.단일 쓰레드에서 실행되지만, 동시성을 제공해 여러 작업이 동시에 실행되는 것처럼 보이게 한다.2. 비유쓰레드: 여러 사람이 각자 자기 트랙에서 동시에 달리는 모습이다.코치(OS)가 사람들을 관리하며, 관리 비용이 크다.코루틴: 한 사람이 여러 가지 일을.. 2025. 1. 12. Flask에서 celery+redis 이용한 비동기 처리 일단 원본 영상을 설정한 단위로 분리하고 저장하는 API가 있는데 영상의 크기가 클수록 오래 걸리니 생각나서 해보는거다.Celery는 Python으로 작성된 비동기 작업 큐 이기 때문에 Flask와 같은 Python Web Framework에 붙여서 사용하기 수월하다.Celery의 구성 Celery 예제Celery Workers인 celery를 설치하고 Message Broker역활인 redis를 설치pip install celerypip install redis 이제 Celery는 flask와 별도의 프로세스 생성후 그거로 백그라운드 작업해야해서, Celery worker 프로세스를 따로 생성하도록하는 설정 코드 작성한다.# Celery 설정app.config.update( CELERY_BROK.. 2025. 1. 10. 파이썬 비동기 프로그래밍 asyncio 클라-서버간의 통신 비동기 말고 서버 성능을 위한 비동기인 파이썬의 asyncio 라이브러리를 사용해서 비동기 프로그래밍을 하는 방법에 대해 정리해 보겠다asyncio는 단일 스레드에서 여러 작업을 동시에 처리하는 것처럼 보이게 해서, I/O 바운드 작업의 성능을 크게 향상시킬 수 있는 도구다.동기 vs. 비동기 예시동기식 프로그래밍은 한 명의 요리사가 한 번에 하나의 요리만 하는 레스토랑. 손님이 스테이크 주문하면, 요리사는 스테이크 다 구워질 때까지 아무것도 안 하고 멀뚱멀뚱. 다음 손님 파스타는 스테이크 다 만든 다음에야 시작.비동기식 프로그래밍은 한 명의 짱짱 요리사가 여러 요리를 동시에 하는 레스토랑. 스테이크 굽기 시작하고, 기다리지 않고 바로 파스타 면 삶기 시작. 면 삶는 동안 샐러드도 만.. 2025. 1. 8. Python Ray 라이브러리 (병렬처리) 1.병렬처리 이전의 방법 multiprocessing에 대해multiprocessing의 라이브러리 경우 프로세스 스포닝(Process Spawning)을 지원하여 자원 내에서 사용 가능한 다중 프로세서를 활용 가능하게 하고 생성한 프로세스 풀을 제어하는 프로세스 풀 객체(pool)을 통해 병렬 처리를 한다. [프로세스 스포닝: 부모 프로세스가 운영 체제에 요청하여 자식 프로세스를 생성하는 과정]그러나 multiprocessing는 자식 프로세스한테 작업해야하는 큰 데이터를 전달할때 pickle을 사용해 직렬화(데이터를 바이트로 변환)한 뒤 전달한다.만약 20개 프로세스에서 작업하도록 설정했다면 그 만큼 직렬화한 데이터 복사본을 만들어야 하므로 큰 메모리 사용하고,직렬화 데이터 받은 프로세스는 원래 .. 2025. 1. 7. 랭체인으로 Gemini 실습(모델 설정에 temperature,top_k,top_p에 대해) app.py의 일부 코드from langchain_google_genai import ChatGoogleGenerativeAI,GoogleGenerativeAIEmbeddingsload_dotenv()def create_app(): app = Flask(__name__) geminiLangchain = ChatGoogleGenerativeAI( model="gemini-2.0-flash-exp", google_api_key=os.getenv("GEMINI_API_KEY"), temperature=0 ) app.config['geminiLangchain'] = geminiLangchain # Flask 애플리케이션 실행if __name__ == '__main__':.. 2025. 1. 6. Langchain은 무엇일까? 모두의AI 유튜브 채널 보고 개인 정리용랭체인 처음 접하는거라 기록 내용이 틀릴 수도 있다.1. 랭체인을 왜 사용해야할까? 일단 ChatGPT를 직접 사용할경우 해당 모델이 학습한 기간의 정보까지만 답변하고,엉뚱하고 거짓된 답변하고,토큰의 제한이 있다. 이런 단점을 해결하기 위해 파인튜닝(모델을 학습시키는?),제로~N샷러닝,인컨텍스트 러닝 등 있는데 랭체인이 인컨텍스트러닝 도와주는 도구다. 랭체인의 구조에는 저렇게 있는데인덱스는 예를들어 사용자가 제공하는 PDF나 인터넷에 어떤 문서를 쉽게 탐색 가능하게 할 수 있도록 해주는 모듈이다.즉 PDF문서에 내용을 임베딩후 벡터DB에 넣고 탐색하는거다. 체인은 원래 사용자가 프롬프트 하나를 주면 그걸 답변해주고 끝나는건데 거기서 끝나지 않고,랭체인이 프롬.. 2025. 1. 6. Flask에서 Swagger사용 1. Swagger 란?* RESTful API를 설계, 빌드, 문서화 및 소비하는 데 도움이 되는 오픈 소스 도구 집합, 즉 API의 명세와 문서화를 위한 도구이다* API 문서화를 직접 문서에 적고 하는 것은 매우 귀찮고, API가 수정될때마다 문서를 같이 수정하는 것은 더욱 귀찮아서 이러한 불편함을 줄여주기 위해 사용하고, 프로젝트를 모르는 사람이 프로젝트 테스트 해볼시 이해하기 쉽게 해주는 용도다. 2. 설치하고 시작전 알아보기일단 swagger를 아예 처음 사용해보는거라 완벽한 답은 아직 잘 모르겠는데,ChatGpt도 그렇고 Gemini도 그렇고 구글 블로그들 봐도 대부분 테스트 코드가 아닌 실제 API로 테스트 해보는거로 나와있고 답변해서, Swagger로 실제 API 호출해서 테스트 해볼거다.. 2024. 12. 30. 10. 도커 컴포즈 -(3) 7. 컴포즈로 컨테이너를 동시에 2개 띄워보기이전에 컴포즈의 장점중 여러개의 컨테이너를 하나의 환경에서 실행하고 관리하니 편하고 좋기때문에 사용한다 해서 이번에 동시에 2개 띄워보기 (1) Redis 랑 Mysql 동시에 띄워보기이전과 같이 컨테이너 1개 띄웠을때랑 별 차이 없이 services 하위에 저렇게 따로따로 적고 실행시키면 끝이다. (2) Spring Boot 랑 Mysql 동시에 띄워보기일단 스프링 부트 프로젝트니 이전과 마찬가지로 도커 파일로 이렇게 하나 이번엔 jar 파일을 절대 경로로 적어본다 위에서 했던 redis,mysql 처럼 services 하위에 저렇게 각각 적는데 이번에 보면 mysql 코드쪽에 MYSQL_DATABASE는 컨테이너 생성할때 데이터베이스도 생성해주는 옵션이다... 2024. 11. 19. [만료된 액세스 토큰 정보 가져오기]JWT expired at 2024-11-18T08:40:20Z. Current time: 2024-11-18T08:41:18Z, a difference of 58493 milliseconds. Allowed clock skew: 0 milliseconds. 에러 메세지io.jsonwebtoken.ExpiredJwtException: JWT expired at 2024-11-18T08:40:20Z. Current time: 2024-11-18T08:41:18Z, a difference of 58493 milliseconds. Allowed clock skew: 0 milliseconds. at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:427) ~[jjwt-impl-0.11.5.jar:0.11.5] at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:529) ~[jjwt-impl-0.11.5.jar:0.11.5].. 2024. 11. 18. 이전 1 2 3 4 5 ··· 15 다음