1. 4B, 8B → B는 10억개(bilion) 즉, 40억, 80억
2. AI agent 구상도

3. selenium을 쓰는 이유
- selenium을 굳이 쓰는 이유는 요즘 웹개발이 SPA, Java-Script를 주로 활용해서 데이터를 웹브라우를 거져 받아오게 많이 되어 있기 때문임
- 실제로 많은 웹사이트의 class, id 값 끝에 해시값이 붙어 있었음. 즉 이 값들이 동적으로 생성되고 있다는 의미. 따라서 일반 request에서 정적으로 bs4로 값을 파싱해봤자 변경된 값일 가능성이 큼.

- 리액트, vue 등이 만드는 클래스는 뒤에 해시값이 붙어 있음.
soup.select('[class*="module_article"]')

- 웹브라우져 내의 정보를 아무나 볼수는 없음. 보기 위해서는 getcodriver가 필요함
4. decode_contents(), str() 차이


5. 상승,3000 에서 숫자데이터만 뽑아내기
def extract_number(text):
numbers = re.findall(r'\d+', str(text).replace(',', ''))
return int(''.join(numbers)) if numbers else 0
df["up_down_price"] = pd.to_numeric(df['up_down_price'].apply(extract_number),
error='coerce').fillna(0).astype(int)
- errors='coerce'(혹은 예전 버전 표기 error='coerce')는 숫자로 바꾸지 못하는 값이 있을 때, 오류를 내지 않고 NaN으로 바꿔라는 의미.
6. 허깅페이스 리포지토리 종류

7. fastapi 리턴값과 pydantic model

8. -- coding: utf-8 --
9. 외부에서 어떤 서버에 어떤 포트가 열려있는지 스캔하는 방법
nmap -p 1-10000 <your ip>
10. vector db 직접 구축

- 오픈소스를 활용해서 직접 벡터 db를 간단하게 구축해봄
- 오라클에서 제공해준 오라클 서버 ingress rule에 port가 5050에 안열려 있어서, 열려있는 포트로 서빙