디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

에이도비야. 경력 15년 인정이야한다만 개념적으로 틀렸다. 설명해줌

ㅆㅇㅆ(124.216) 2025.10.29 01:28:46
조회 247 추천 0 댓글 0
														

1. 니가 작성한 테스트의 문제


lru_cache는 메모이제션 캐싱이고


lambada_:store_instance 는 'DI 컨테이너를 통한 애플리 케이션 스코프 싱글톤 인스턴스임'


이 캐싱차이는 너도 알거라 생각한다. 인스턴스 캐싱을 말하는데 왜 자꾸 메모이제션 캐싱을 이야기하냐 FAST API가 원하는 양식을 구현하는거임


2.asyncio.gather는 단일스레드내 비동기 동시성임


내가 테스트하려는건 parallelism임


이 상황에서 변경가능한(mutable)상태를 공유하는 싱글톤은 데이터 레이스가 발생함


3. 실행모델에 대한 오해


unvicorn -- worker2 같이 별개 os 프로세스 2개 띄우는건데 이게 뭐가 문제임? 당연히 메모리간 이고


4. Depends 방식은 리퀘스트 스코프(웹) 방식이고, 이건 VectorStore는 애플리케이션 스코프다.


FastAPI에서도 lifeSpan 쓰라고 한다.


import concurrent.futures
import threading
import time

# --- 1. '에이도비'가 주의해서 쓰면 된다는 '가변 싱글톤' ---
# (예시로 든 'dict'처럼 '가변 상태(counter)'를 가짐)

class NaiveMutableSingleton:
    _instance = None
   
    def __new__(cls):
        # 고전적인 싱글톤 구현
        if cls._instance is None:
            time.sleep(0.0001) # 스레드 충돌을 유도하기 위한 약간의 딜레이
            cls._instance = super().__new__(cls)
            cls._instance.counter = 0 # <-- 이것이 '공유된 가변 상태'
        return cls._instance

    def increment(self):
        """
        이 함수는 '스레드 안전(Thread-Safe)'하지 않는다
        """
        current_val = self.counter  # 1. 값 읽기 (Read)
       
        # --- 위험 구간 (Critical Section) ---
        # 이 시점에 다른 스레드가 끼어들어 'current_val'을 동시에 읽을 수 있음!
        time.sleep(0.0001) # 다른 스레드가 끼어들 시간을 강제로 만듦
        # --- 위험 구간 끝 ---
       
        self.counter = current_val + 1 # 2. 값 쓰기 (Write)

# --- 2. '에이도비'의 테스트(asyncio)가 아닌, '진짜 병렬' 테스트 ---
# 멀티 스레드 (ThreadPoolExecutor)를 사용

NUM_THREADS = 10     # 10개의 스레드 (병렬 에이전트)
NUM_TASKS_PER_THREAD = 100 # 각 스레드가 100번씩 작업
TOTAL_TASKS = NUM_THREADS * NUM_TASKS_PER_THREAD # 총 예상 값 = 10 * 100 = 1000

print(f"--- '가변 싱글톤' 병렬 안정성 테스트 ---")
print(f"{NUM_THREADS}개의 병렬 스레드(에이전트)가 싱글톤의 counter를 {NUM_TASKS_PER_THREAD}번씩 총 {TOTAL_TASKS}번 증가시킵니다.")
print("('에이도비' 주장: '주의해서 쓰면' 문제없다)")
print("('내' 주장: '가변 싱글톤'은 병렬 환경에서 데이터 경쟁을 일으킨다)\n")

def run_task(task_id):
    s = NaiveMutableSingleton()
    for _ in range(NUM_TASKS_PER_THREAD):
        s.increment()
    # print(f"스레드 {task_id} 완료...") # 주석 해제 시 더 복잡하게 얽힘

# 진짜 병렬 실행
with concurrent.futures.ThreadPoolExecutor(max_workers=NUM_THREADS) as executor:
    futures = [executor.submit(run_task, i) for i in range(NUM_THREADS)]
    concurrent.futures.wait(futures)

# --- 3. 결과 ---
final_counter = NaiveMutableSingleton().counter

print("\n--- 테스트 결과 ---")
print(f"예상 최종 값 (기대 값): {TOTAL_TASKS}")
print(f"실제 최종 값 (측정 값): {final_counter}")

if final_counter == TOTAL_TASKS:
    print("\n결과: ✅ 성공 (이론상 거의 불가능한 확률)")
else:
    print(f"\n결과: ❌ 대실패! (값이 깨짐)")
    print(f"이유: {TOTAL_TASKS - final_counter}번의 쓰기(write) 작업이 '데이터 경쟁'으로 인해 유실됨.")
    print("이것이 '공유된 가변 상태'를 병렬로 접근할 때의 위.")

print("\n--- 결론 ---")
print("1. '에이도비'의 `asyncio.gather` 테스트는 '단일 스레드' 비동기라 이 문제를 발견조차 못함")
print("2. '주의해서 쓴다'는 말은, 모든 'increment' 함수에 'Lock'을 걸어야 한다는 뜻이며, 이는 코드를 복잡하게 하고 성능을 저하시킴.")
print("3. 내 방식(DI + Lifespan)은 애초에 이런 '가변 상태'를 공유하지 않고,")
print("   '스레드 세이프'하거나 '불변'한 객체의 '참조'를 주입하므로, 아키텍처 수준에서 이 위험이 없음.")



24b0d121e09c28a8699fe8b115ef0469933efebd


다시한번 말하지만 리소스 정리 빼먹은거 지적해준거 고맙게 생각함


그냥 어차피 꺼지면 리소스 정리되니까 빼먹었는데 명시적으로 넣는게 맞지.


근데 그건 그거고 


이건 이거임.


너는 자꾸 '다중 이용자가 쓴다' 이걸로 착각하는데


그게 아님.


추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 영포티룩도 멋지게 소화할 것 같은 40대 스타는? 운영자 25/10/27 - -
AD 저녁 뭐먹지? 오늘의 메뉴 추천! 운영자 25/10/31 - -
2899373 나만 코딩 유튜버는 여자 유튜버밖에 안보냐. [6] ㅆㅇㅆ(124.216) 10.29 94 2
2899372 생각해보면 서블렛이 레알 좋은 개념인듯하노 이기 [4] 슈퍼막코더(126.179) 10.29 72 0
2899371 이 문장 되게 감성있지 않음? ㅇㅇ1갤로그로 이동합니다. 10.29 58 0
2899370 남의 나라 국가인데 왜 난 미국 국가 들으면 울컥하는지 몰겠음 chironpractor갤로그로 이동합니다. 10.29 34 0
2899369 사무실 임대했다고 사업 잘된다고 깝쳤는데 월세 올라서 취소 [1] 프갤러(172.225) 10.29 63 3
2899368 무당 보고 왔는데 내년 3월까지 힘들대서 기분 싱숭샘숭함 [4] ㅆㅇㅆ(124.216) 10.29 73 0
2899367 납품준비 해야겠다 ㅆㅇㅆ(124.216) 10.29 48 0
2899366 [대한민국] 트럼프 대통령 한국 방문 프갤러(121.172) 10.29 41 0
2899365 50만원 flex [7] 에이도비갤로그로 이동합니다. 10.29 82 0
2899364 Ai가 발전한 세상에서 우린 어떻게 살아갈까 ㅇㅇ(211.235) 10.29 33 0
2899363 agi는 의외로 가까울지도 모름 [1] 프갤러(211.106) 10.29 65 0
2899362 아침에 싸이렌덕에 강제 기상한 프봉이들 개추 ㅋㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 10.29 44 1
2899361 c++교재 추천좀 [4] ㅇㅇ갤로그로 이동합니다. 10.29 80 0
2899359 유흥에 1억썼다. 유흥 와꾸 티어 순위알려준다 [3] ㅇㅇ(118.235) 10.29 100 0
2899357 트럼프가 찢짜이밍한테 미스터 리라고 했나보네 chironpractor갤로그로 이동합니다. 10.29 58 0
2899356 맥북 프로 16 (m3 pro, 36GB, 512GB) 중고시세 얼마보냐 [1] 임금밀린코딩몽키(1.236) 10.29 49 0
2899355 AI 창조자: 어떻게 작동하는지 모름 발명도둑잡기(118.235) 10.29 41 0
2899354 졸업작품이란 뭘까... [1] 공기역학갤로그로 이동합니다. 10.29 86 0
2899352 요새 이모티콘 보면 왤케 현기증이 나냐 [1] 프갤러(175.212) 10.29 65 1
2899351 ㅆㅇㅆ = 사이비 코더 [1] 프갤러(175.212) 10.29 82 5
2899349 플러터vs코틀린 배틀에 스위프트 합류했네 [2] 거북이속이거북갤로그로 이동합니다. 10.29 90 0
2899348 여기 장애인들 [2] 프갤러(175.212) 10.29 89 0
2899347 소프트웨어적으로 뇌가 망가지기도 함 [6] chironpractor갤로그로 이동합니다. 10.29 89 0
2899346 ngrok 왜 npx로 이제 안 되냐? ㅇㅇ갤로그로 이동합니다. 10.29 36 0
2899345 퇴직금 받아서 이거 하나 사고싶은데 어때? ㅇㅇ1갤로그로 이동합니다. 10.29 53 0
2899344 KPOP 기획사들 여자아이돌 제발 일본남자랑 그만 엮이게 하세요 [3] 한국을지켜요갤로그로 이동합니다. 10.29 227 1
2899343 프렌치 메리골드 ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 10.29 69 0
2899342 寇글 이것들은 사람새끼가 아예 없나 [1] 프갤러(49.165) 10.29 56 0
2899341 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 10.29 41 0
2899340 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 10.29 50 0
2899339 나는조현병이야 나는내향적이야 손발이시립디다갤로그로 이동합니다. 10.29 54 0
2899338 누가 나 욕해 ㅆㅇㅆ. 뭔일있냐.. 헬마는 공원 갔고... [1] 넥도리아(119.195) 10.29 70 0
2899336 지 반박하면 다 124.48이라니께!!! ㅇㅇ(118.235) 10.29 76 3
2899335 ㅆㅇㅆ장애인새끼 또 개좆같이 이해하고 지말만 맞다 [1] ㅇㅇ(118.235) 10.29 99 5
2899325 사무실 취소된 건으로 새벽 6시에 어머니 따라서 제사 지내고왔다 [1] ㅆㅇㅆ(124.216) 10.29 77 0
2899323 ㅂㅅ들 ㅇㅇ(222.108) 10.29 56 0
2899322 여튼 중국출장 잘갔다와라. 새벽에 뭐 별것도 아닌걸로 서로 키배했네 [2] ㅆㅇㅆ(124.216) 10.29 109 0
2899321 아, 이해간다. 에이도비야 너가 무슨 말을 하는지 드디어 다 이해감 ㅆㅇㅆ(124.216) 10.29 90 0
2899320 ai 바이브 코딩하면 외않됀다는 거지 [1] ㅇㅇ갤로그로 이동합니다. 10.29 88 0
2899319 에이도비야 자꾸 그리고 레디스를 언급하는게 걍 스코프가 다른거임 [20] ㅆㅇㅆ(124.216) 10.29 126 0
2899318 음, 에이도비야 일단 내가 6시까지 일있어서 안자고 있어 말해준다만은 ㅆㅇㅆ(124.216) 10.29 65 0
2899317 존중을 할 마음이 들게 처신을 해야지 [9] 에이도비갤로그로 이동합니다. 10.29 127 3
2899316 <저스트 메이크업> 한대서 생각나는 예전 글 발명도둑잡기(118.235) 10.29 60 0
2899315 INTJ가 남 권위를 제일 개무시한다 [3] 발명도둑잡기(118.235) 10.29 79 2
2899311 주간 운세 이거 좀 잘못된거같은데 다시해야겠다 [3] ㅆㅇㅆ(124.216) 10.29 73 0
2899310 오늘의 소설, 영화 실마리: 인공지능이 거짓 선동 독재 발명도둑잡기(118.235) 10.29 37 0
2899309 오늘의 발명 실마리: 인공지능의 거짓말 실력 정량화 발명도둑잡기(118.235) 10.29 37 0
2899304 20대초때 여기서 웹떌깜된다는글만안봣어도 [1] 프갤러(222.120) 10.29 104 0
2899296 AI 세금, 기본소득 발명도둑잡기(118.235) 10.29 57 0
2899291 80년대 게임 디지타이저 도트 발명도둑잡기(118.235) 10.29 44 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2