디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅆㅇㅆ(124.216) 2025.10.29 01:28:46
조회 265 추천 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
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 해외에서 겪는 불합리한 대우에 대응 잘 할 것 같은 스타는? 운영자 25/11/03 - -
AD 저녁 뭐먹지? 오늘의 메뉴 추천! 운영자 25/10/31 - -
2900426 흠 KT로 폰으로 해보니까 되네 ㅆㅇㅆ(124.216) 11.03 34 0
2900425 소프트웨어 난개발이라는게 스타로치면 세빠닥 테크 타놓고 프갤러(27.177) 11.03 40 0
2900424 아이큐 근데 의미 없지 않냐? 아이큐 276이 지구평평론 말하던데 [3] ㅆㅇㅆ(124.216) 11.03 72 0
2900421 러스트 빠돌이들도 그렇게 잘났으면 논문 써 나르시갤로그로 이동합니다. 11.03 30 0
2900420 한국은 전문가에 대한 불신이 팽배해있다. [1] 프갤러(223.55) 11.03 42 1
2900419 guiyom 툴킷 석사/박사 논문 주제 벌써 정했다 ㅎㅎ [1] 나르시갤로그로 이동합니다. 11.03 43 1
2900418 If 중첩 될일이 없는데 개초보라 그런거임? [6] 프갤러(106.101) 11.03 57 0
2900417 서버는 살아있는데 검색 api만 뒤진거같은데 [1] ㅆㅇㅆ찡갤로그로 이동합니다. 11.03 31 0
2900416 Ai로 프론트 디자인 트렌디하게 뽑는 방법이뭐임? [1] 프갤러(106.101) 11.03 39 0
2900415 대학교 2학년 자바 팀플 주제 뭐해야될까요? [2] 프갤러(220.73) 11.03 38 0
2900414 한국에 제대로 된 프로그래머가 적은 이유 [7] 프갤러(223.63) 11.03 208 7
2900413 애들아 미안한데 지금 국립 중앙도서관 api 나만 작동 안하냐? ㅆㅇㅆ(124.216) 11.03 35 0
2900412 버전같은건 좀 넉넉하게 쓰면안돼나 [1] ㅇㅇ(59.31) 11.03 43 0
2900411 부트캠프 간 허언증 애 있는데 팩트 구별좀 [4] 프갤러(221.163) 11.03 87 0
2900410 지금 국립중앙도서관 api가 동작을 안하노 ㅆㅇㅆ찡갤로그로 이동합니다. 11.03 41 0
2900409 시대가 어느 시대인데 아직도 MFC 를 사용하냐 [5] 프갤러(59.16) 11.03 69 0
2900408 나는메가 스톤 얻을 수 있을까 [2] 넥도리아(223.38) 11.03 28 0
2900407 왜 한국에 제대로 된 프로그래머가 없는 줄 암?? [7] ㅇㅇ(222.108) 11.03 118 2
2900406 파이썬 3.14 받으면 안됨? [3] 오스카갤로그로 이동합니다. 11.03 64 0
2900405 저녁에 [1] 배구공(119.202) 11.03 43 0
2900404 여기가 원종 형님 갤러리 인가요? [2] 프갤러(59.25) 11.03 47 0
2900403 근데 요즘 서비스기업들 다 죽은거같은데 [5] 프갤러(211.234) 11.03 86 0
2900401 자가로 커피 사서, T day 개인컵으로 뜨거운 뜨듯한 아메리카노. et 넥도리아2025(14.35) 11.03 26 0
2900400 주변 사람이 쩝쩝충이면 어찌 생각함 [16] 루도그담당(58.239) 11.03 109 0
2900399 오늘의 테트리스 배구공(119.202) 11.03 48 0
2900398 안녕~ [11] 마호로갤로그로 이동합니다. 11.03 87 0
2900397 저수준 뽕 맞아버린 애들이 많구나 [4] 루도그담당(58.239) 11.03 90 0
2900396 [애니뉴스] 블로그 유입 - 검색 등록 방법 프갤러(121.172) 11.03 25 0
2900395 아리랑 [1] 배구공(119.202) 11.03 36 0
2900394 이제 잔다..ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 11.03 47 0
2900393 뉴프로이서 커뮤하고 본인글 피드백받아라 이기 [6] 헬마스터갤로그로 이동합니다. 11.03 70 1
2900392 나님 ai 시대에 ps 연마중 [3] 헬마스터갤로그로 이동합니다. 11.03 68 0
2900391 SQLD 오늘부터 하루에 4시간씩 공부하면 11/16 시험 합격 가능? [2] 프갤러(110.12) 11.03 79 0
2900388 흠 러스트 고민이군 [5] 프갤러(218.154) 11.03 60 0
2900387 쎄엑쓰의 개똥철학에 대한 너의 무관심에 무관심하다. [5] 프갤러(218.154) 11.03 77 1
2900386 ㅆㅇㅆ 쟤는 왜 자꾸 개똥철학을 여따쓰는거냐 ㅇㅇ(118.235) 11.03 71 4
2900385 출근하자마자 잠옴 [3] 루도그담당(211.184) 11.03 70 3
2900384 시들시들한 국화 2.. ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 11.03 46 0
2900383 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 11.03 32 0
2900382 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 11.03 49 0
2900381 벡터db도 json도 결국 rdb에 들어갔고 [1] ㅇㅇ(211.186) 11.03 72 0
2900380 ㅆㅇㅆ병신은 아침부터 또 좆문가 행세네 [3] ㅇㅇ(118.235) 11.03 132 13
2900378 GDB 공부하면서 느끼는데 아파치 그래프 엔진 얹어서 [1] ㅆㅇㅆ(124.216) 11.03 65 1
2900377 플랫폼 백엔드를 만들어봐야하나 ㅆㅇㅆ(124.216) 11.03 63 0
2900376 혼자 개발하기 ㅈㄴ 빡세네 [4] 재현갤로그로 이동합니다. 11.03 119 0
2900375 neo4j 과제 해보면서 느낀건데 GDB로 DB 만들어보고 싶은데 [1] ㅆㅇㅆ(124.216) 11.03 71 0
2900372 lg 프갤러(49.165) 11.03 79 0
2900355 인구주택 총조사 ㅈㄴ 수상하네 [2] 야옹아저씨갤로그로 이동합니다. 11.03 105 0
2900349 계절이 비뀐다 [5] 개멍청한유라갤로그로 이동합니다. 11.03 76 0
2900347 요새 학생들 ai 교육 시킨다고 neo4j 쓰던데 [2] ㅆㅇㅆ(124.216) 11.03 113 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2