세마포어 위치 테스트 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. 테스트 목적
a. 개요
- 개별 작업의 컨트롤러에 대해 스레드 사용량을 제한해야 한다.
이를 위해서 세마포어를 사용해야 하는데 2가지 후보가 있다.
- 컨트롤러 전체에 대해 세마포어를 건다.
- 컨트롤러 내부 스레드를 사용하는 세부 작업에 대해 세마포어를 건다.
b. 가설
- 세마포어를 세부 작업마다 분리하는게 처리 시간이 더 빠를 것이다.
- 현재의 빠른 작업, 느린 작업 구조에서 컨트롤러 전체에 세마포어를 걸면,
느린 작업이 완료될 때까지 다음 빠른 작업이 시작되지 못한다.
- 이로 인해 다음 요청에 대한 처리 시작이 밀리게 되고 전체 처리 시간이 늦어질 것이다.
- 반대로, 세마포어를 분리하면 임베딩동안 캐싱 가져오는 작업도 동시에 진행되어, 임베딩 완료 시 다음 임베딩 작업을 바로 진행할 수 있어 빠를 것이다.
2. 실험 결과
a. 세부 작업마다 세마포어를 따로 준 경우
-
로그
2025-05-15 15:28:00.395 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.395 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,396 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290480.396092 2025-05-15 15:28:00.396 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.396 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,396 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290480.39644 2025-05-15 15:28:00.396 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.396 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,396 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290480.3967261 2025-05-15 15:28:00.396 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.396 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,396 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290480.396966 2025-05-15 15:28:00.397 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.397 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,397 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290480.397303 2025-05-15 15:28:00.397 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.397 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,397 INFO 이미지 임베딩 요청 처리 시작 2025-05-15 15:28:00.397 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.397 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,397 INFO 이미지 임베딩 요청 처리 시작 2025-05-15 15:28:00.397 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.397 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,397 INFO 이미지 임베딩 요청 처리 시작 2025-05-15 15:28:00.397 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.397 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,397 INFO 이미지 임베딩 요청 처리 시작 2025-05-15 15:28:00.397 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:28:00.397 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:28:00,398 INFO 이미지 임베딩 요청 처리 시작 캐싱 끝: 1747290481.398043 임베딩 시작: 1747290481.3981209 2025-05-15 15:28:01.398 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 캐싱 시작: 1747290481.398313 2025-05-15 15:28:01,398 INFO 이미지 임베딩 시작 캐싱 끝: 1747290482.0025659 임베딩 시작: 1747290482.004709 캐싱 시작: 1747290482.0053492 2025-05-15 15:28:02.005 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:02,014 INFO 이미지 임베딩 시작 캐싱 끝: 1747290482.4830809 임베딩 시작: 1747290482.48315 2025-05-15 15:28:02.483 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:02,483 INFO 이미지 임베딩 시작 캐싱 시작: 1747290482.483687 캐싱 끝: 1747290482.901952 임베딩 시작: 1747290482.9021518 2025-05-15 15:28:02.903 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:02,903 INFO 이미지 임베딩 시작 캐싱 시작: 1747290482.903924 캐싱 끝: 1747290483.4283001 임베딩 시작: 1747290483.4351108 2025-05-15 15:28:03.435 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:03,436 INFO 이미지 임베딩 시작 캐싱 시작: 1747290483.440156 캐싱 끝: 1747290483.819896 캐싱 끝: 1747290484.1311932 캐싱 끝: 1747290484.4848971 캐싱 끝: 1747290485.028057 캐싱 끝: 1747290485.358061 2025-05-15 15:28:05,749 INFO 이미지 임베딩 완료 2025-05-15 15:28:05.750 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290485.752953 2025-05-15 15:28:05,753 INFO 이미지 임베딩 완료 2025-05-15 15:28:05.781 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:05.781 | INFO | fastapi.routing:app:301 - embed 함수 성공 임베딩 시작: 1747290485.782243 INFO: 127.0.0.1:56925 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:05.784 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:05,784 INFO 이미지 임베딩 시작 2025-05-15 15:28:06,338 INFO 이미지 임베딩 완료 2025-05-15 15:28:06.351 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290486.355905 2025-05-15 15:28:06,356 INFO 이미지 임베딩 완료 2025-05-15 15:28:06.387 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:06.388 | INFO | fastapi.routing:app:301 - embed 함수 성공 임베딩 시작: 1747290486.392992 INFO: 127.0.0.1:56927 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:06.395 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:06,395 INFO 이미지 임베딩 시작 2025-05-15 15:28:06,727 INFO 이미지 임베딩 완료 2025-05-15 15:28:06.737 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290486.738424 2025-05-15 15:28:06,738 INFO 이미지 임베딩 완료 2025-05-15 15:28:06.759 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:06.760 | INFO | fastapi.routing:app:301 - embed 함수 성공 임베딩 시작: 1747290486.760778 2025-05-15 15:28:06.761 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 INFO: 127.0.0.1:56926 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:06,761 INFO 이미지 임베딩 시작 2025-05-15 15:28:07,565 INFO 이미지 임베딩 완료 2025-05-15 15:28:07.578 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290487.581593 2025-05-15 15:28:07,581 INFO 이미지 임베딩 완료 2025-05-15 15:28:07.594 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:07.594 | INFO | fastapi.routing:app:301 - embed 함수 성공 임베딩 시작: 1747290487.594922 2025-05-15 15:28:07.595 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:07,595 INFO 이미지 임베딩 시작 INFO: 127.0.0.1:56929 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:07,620 INFO 이미지 임베딩 완료 2025-05-15 15:28:07.635 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290487.6365309 2025-05-15 15:28:07,636 INFO 이미지 임베딩 완료 2025-05-15 15:28:07.667 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:07.668 | INFO | fastapi.routing:app:301 - embed 함수 성공 임베딩 시작: 1747290487.66832 2025-05-15 15:28:07.668 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:28:07,668 INFO 이미지 임베딩 시작 INFO: 127.0.0.1:56928 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:08,679 INFO 이미지 임베딩 완료 2025-05-15 15:28:08.681 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290488.682142 2025-05-15 15:28:08,682 INFO 이미지 임베딩 완료 2025-05-15 15:28:08.694 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:08.694 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:56930 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:09,278 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.289 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290489.289841 2025-05-15 15:28:09,289 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.303 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:09.303 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:56932 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:09,430 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.441 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290489.441897 2025-05-15 15:28:09,441 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.453 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:09.453 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:56931 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:09,692 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.697 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290489.698329 2025-05-15 15:28:09,698 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.713 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:09.713 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:56934 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:28:09,841 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.856 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290489.8571908 2025-05-15 15:28:09,857 INFO 이미지 임베딩 완료 2025-05-15 15:28:09.882 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:28:09.882 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:56933 - "POST /api/albums/embedding HTTP/1.1" 201 Created
2025-05-15 15:28:00.395
2025-05-15 15:28:09.882
b. 컨트롤러 전체를 하나의 세마포어로 관리하는 경우
-
로그
2025-05-15 15:30:39.166 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.167 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:39,167 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290639.167403 2025-05-15 15:30:39.167 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.167 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:39,167 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290639.16781 2025-05-15 15:30:39.168 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.168 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:39,168 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290639.1680949 2025-05-15 15:30:39.168 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.168 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:39,168 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290639.1683369 2025-05-15 15:30:39.168 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.168 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:39,168 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290639.1686022 2025-05-15 15:30:39.168 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.168 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.168 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.168 | INFO | fastapi.routing:app:301 - embed 함수 시작 2025-05-15 15:30:39.169 | INFO | fastapi.routing:app:301 - embed 함수 시작 캐싱 끝: 1747290639.9133592 임베딩 시작: 1747290639.9137 2025-05-15 15:30:39.914 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:39,915 INFO 이미지 임베딩 시작 캐싱 끝: 1747290640.345811 임베딩 시작: 1747290640.345931 2025-05-15 15:30:40.346 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:40,346 INFO 이미지 임베딩 시작 캐싱 끝: 1747290640.6979158 임베딩 시작: 1747290640.697999 2025-05-15 15:30:40.698 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:40,698 INFO 이미지 임베딩 시작 캐싱 끝: 1747290641.185062 임베딩 시작: 1747290641.186282 2025-05-15 15:30:41.189 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:41,191 INFO 이미지 임베딩 시작 캐싱 끝: 1747290641.44502 임베딩 시작: 1747290641.445166 2025-05-15 15:30:41.445 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:41,445 INFO 이미지 임베딩 시작 2025-05-15 15:30:43,175 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.177 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290643.182522 2025-05-15 15:30:43,182 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.210 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:43.211 | INFO | fastapi.routing:app:301 - embed 함수 성공 2025-05-15 15:30:43.211 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:43,211 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290643.211793 INFO: 127.0.0.1:57047 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:30:43,294 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.295 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290643.296114 2025-05-15 15:30:43,296 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.317 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:43.317 | INFO | fastapi.routing:app:301 - embed 함수 성공 2025-05-15 15:30:43.317 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:43,317 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290643.3179488 INFO: 127.0.0.1:57050 - "POST /api/albums/embedding HTTP/1.1" 201 Created 캐싱 끝: 1747290643.576373 임베딩 시작: 1747290643.576433 2025-05-15 15:30:43.576 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:43,576 INFO 이미지 임베딩 시작 2025-05-15 15:30:43,659 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.663 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290643.6634219 2025-05-15 15:30:43,663 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.686 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:43.686 | INFO | fastapi.routing:app:301 - embed 함수 성공 2025-05-15 15:30:43.686 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:43,686 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290643.6867468 INFO: 127.0.0.1:57051 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:30:43,803 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.805 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290643.806119 2025-05-15 15:30:43,806 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.826 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:43.826 | INFO | fastapi.routing:app:301 - embed 함수 성공 2025-05-15 15:30:43.826 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:43,826 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290643.826894 INFO: 127.0.0.1:57052 - "POST /api/albums/embedding HTTP/1.1" 201 Created 캐싱 끝: 1747290643.9142568 임베딩 시작: 1747290643.914293 2025-05-15 15:30:43.914 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:43,914 INFO 이미지 임베딩 시작 2025-05-15 15:30:43,948 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.950 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290643.9508748 2025-05-15 15:30:43,950 INFO 이미지 임베딩 완료 2025-05-15 15:30:43.970 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:43.971 | INFO | fastapi.routing:app:301 - embed 함수 성공 2025-05-15 15:30:43.971 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 시작 2025-05-15 15:30:43,971 INFO 이미지 임베딩 요청 처리 시작 캐싱 시작: 1747290643.971312 INFO: 127.0.0.1:57049 - "POST /api/albums/embedding HTTP/1.1" 201 Created 캐싱 끝: 1747290644.283693 임베딩 시작: 1747290644.283736 2025-05-15 15:30:44.283 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:44,284 INFO 이미지 임베딩 시작 캐싱 끝: 1747290644.540672 임베딩 시작: 1747290644.540763 2025-05-15 15:30:44.541 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:44,541 INFO 이미지 임베딩 시작 캐싱 끝: 1747290644.82481 임베딩 시작: 1747290644.8248472 2025-05-15 15:30:44.824 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 시작 2025-05-15 15:30:44,825 INFO 이미지 임베딩 시작 2025-05-15 15:30:45,691 INFO 이미지 임베딩 완료 2025-05-15 15:30:45.693 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290645.703232 2025-05-15 15:30:45,706 INFO 이미지 임베딩 완료 2025-05-15 15:30:45.719 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:45.719 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:57053 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:30:46,160 INFO 이미지 임베딩 완료 2025-05-15 15:30:46.161 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290646.1615 2025-05-15 15:30:46,161 INFO 이미지 임베딩 완료 2025-05-15 15:30:46.184 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:46.185 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:57048 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:30:46,856 INFO 이미지 임베딩 완료 2025-05-15 15:30:46.856 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290646.857167 2025-05-15 15:30:46,857 INFO 이미지 임베딩 완료 2025-05-15 15:30:46.871 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:46.871 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:57055 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:30:46,879 INFO 이미지 임베딩 완료 2025-05-15 15:30:46.888 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290646.888953 2025-05-15 15:30:46,888 INFO 이미지 임베딩 완료 2025-05-15 15:30:46.917 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:46.917 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:57054 - "POST /api/albums/embedding HTTP/1.1" 201 Created 2025-05-15 15:30:47,026 INFO 이미지 임베딩 완료 2025-05-15 15:30:47.032 | INFO | concurrent.futures.thread:_worker:83 - embed_images 함수 성공 임베딩 끝: 1747290647.033061 2025-05-15 15:30:47,033 INFO 이미지 임베딩 완료 2025-05-15 15:30:47.051 | INFO | app.utils.logging_decorator:async_wrapper:61 - embed_controller 함수 성공 2025-05-15 15:30:47.051 | INFO | fastapi.routing:app:301 - embed 함수 성공 INFO: 127.0.0.1:57056 - "POST /api/albums/embedding HTTP/1.1" 201 Created
2025-05-15 15:30:39.166
2025-05-15 15:30:47.051
c. 결론 요약
방식 | 시작 시간 | 종료 시간 | 전체 소요 시간 |
---|---|---|---|
✅ 세부 작업마다 세마포어 | 15:28:00.395 | 15:28:09.882 | 9.487초 |
✅ 컨트롤러 전체를 하나의 세마포어로 관리 | 15:30:39.166 | 15:30:47.051 | 7.885초 |
항목 | 세부 세마포어 | 전체 세마포어 |
---|---|---|
동시성 | 세부 작업 단위 병렬 처리 | 전체 컨트롤러 단위 직렬 처리 |
속도 | 9.49초 | 7.89초 (더 빠름) |
원인 추정 | 캐싱과 임베딩의 경합 | 깔끔한 직렬 처리로 큐 관리 간단 |
추천 | ✅ 컨트롤러 단위 세마포어가 실측에서 더 빠름 |
d. 5회 반복 테스트 결과
-
세부 세마포어
Test Avg Caching Time (s) Avg Embedding Time (s) duration(s) 1st 1.75 2.94 7.81 2nd 2.17 4.76 11.3 3rd 1.85 2.71 7.85 -
컨트롤러를 하나의 세마포어로 통합 관리
Test Avg Caching Time (s) Avg Embedding Time (s) duration(s) 1st 0.50 1.66 7.56 2nd 0.49 1.35 7.15 3rd 0.58 1.45 7.73
3. 결과 분석
a. 통합 세마포어 방식
가. 장점
-
컨텍스트 스위칭 적음
- 한 번에 소수의 스레드만 active 상태이므로, CPU는 context switching 없이 한 작업에 집중할 수 있음.
-
리소스 경합 적음
- 모든 병렬 작업이 동시 실행되는 게 아니라 제한된 수만 수행 → 메모리, 디스크, GIL (Python이라면) 등에서 경합이 적음.
→ 그래서 개별 작업이 더 빠름.
나. 단점
-
세마포어 반환 지연:
- 컨트롤러 단위로 세마포어를 잡고 있으니, 모든 서브 작업이 완료되어야 다음 요청이 시작됨.
→ 결과적으로 duration이 늘어남.
b. 세부 세마포어 방식
-
스레드 수 많음 → 컨텍스트 스위칭 증가
- 각 세부 작업이 세마포어를 획득하고 실행되니, 전체적으로 실행 중인 스레드 수가 많아짐 → OS가 스레드 사이 전환을 자주 함.
-
통합 세마포어 방식은 캐싱 진행 중에 임베딩 스레드 사용하지 않음 → 캐싱 완료 후, 임베딩 동안 캐싱 스레드는 사용하지 않음
- 그러나 세부 세마포어에서는 캐싱과 임베딩 작업이 동시에 진행되므로 캐싱 스레드와 임베딩 스레드가 동시 작업 중
-
리소스 경합 증가
- 동시에 많은 I/O, 디코딩, 임베딩 작업이 경쟁하므로, CPU cache miss, 메모리 대역폭 포화, GIL 등에서 경합 발생.
→ 그래서 개별 작업이 느려지고, 편차도 커짐.
4. 결론
- 컨트롤러를 하나의 세마포어로 통합 관리하는 방식이 비슷한 duration을 가지면서도 요청 처리 시간이 일정한 정도를 유지하고 개별 작업 처리도 안정적