지원 공고에 왜 스레드 경험을 명시했었는지 요즘 체감이 많이 되네요
요즘 하는 새 검색 엔진 구축 환경의 파이프라인 중 Java 쪽 백엔드 스레드 구성할 때
BlockingQueue, ConcurrentHashMap, AtomicBoolean, Object Lock 네가지를 활용했어요
단순히 한 가지의 Map 을 바라보는 스레드들은 신호를 BlockingQueue 로 제어해서 자동으로 자고 깨고 하게 했는데
한 종류의 스레드가 2개의 Map 을 바라보면서 데이터가 부어졌냐 안 부어졌냐 뿐만 아니라
한 Map 은 Python 쪽에 임베딩 벡터 받아와서 데이터 베이스에 넣고,
Map 업데이트 치는 스레드 거쳤냐까지 판단해야 되서 복잡하더라고요
notifyAll 이나 단순 Map 의 synchronized 로는 안 될거 같아서 동작 제어를 어떻게 할까 고민하다 나온 결론이
Object Lock 과 AtomicBoolean 을 섞는거였는데 맞는 선택이였는진 모르겠습니다
CloudHttp2SolrClient 가 동시성 안전한 것처럼 보이니
싱글톤으로 공유하고 스레드 두 개로 나눌까 싶었는데 괜시리 하나로 해보자는 욕심이 났네요
색인 되면 메트릭 찍어보고 배치 크기나 색인 간격 설정해야겠습니다
취준 전에 하는 프로젝트로는 다중, 멀티 스레드 코드를 경험 못해봤었는데
회사 업무 보려면 정말 필수적인거 같아요