세마포어 위치 테스트 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. 테스트 목적

a. 개요

  • 개별 작업의 컨트롤러에 대해 스레드 사용량을 제한해야 한다. 이를 위해서 세마포어를 사용해야 하는데 2가지 후보가 있다.
    1. 컨트롤러 전체에 대해 세마포어를 건다.
    2. 컨트롤러 내부 스레드를 사용하는 세부 작업에 대해 세마포어를 건다.

b. 가설

image

  • 세마포어를 세부 작업마다 분리하는게 처리 시간이 더 빠를 것이다.
  • 현재의 빠른 작업, 느린 작업 구조에서 컨트롤러 전체에 세마포어를 걸면, 느린 작업이 완료될 때까지 다음 빠른 작업이 시작되지 못한다.
    • 이로 인해 다음 요청에 대한 처리 시작이 밀리게 되고 전체 처리 시간이 늦어질 것이다.
  • 반대로, 세마포어를 분리하면 임베딩동안 캐싱 가져오는 작업도 동시에 진행되어, 임베딩 완료 시 다음 임베딩 작업을 바로 진행할 수 있어 빠를 것이다.

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을 가지면서도 요청 처리 시간이 일정한 정도를 유지하고 개별 작업 처리도 안정적