TIL

TIL - Servlet

yolang 2025. 1. 16. 20:53
728x90

📚 Today's TODO

✅ 풀스택 GPT deploy 에러 처리하고 과제 제출

✅ 어제 코테 문제 (계속 밀리는 중)

✅ 어제 잔디 인증

✅ 오늘 코테 문제 풀기

✅ 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술: 섹션 2

📡 새로 알게 된 내용

🗃️ 코테 문제

https://daily-programming-til.tistory.com/151

 

99클럽 코테 스터디 4일차 TIL + 투포인터

🔗 백준 1253 좋다  📌오늘의 학습 키워드투 포인터✨공부한 내용 본인의 언어로 정리하기투 포인터를 활용하면 N제곱이 걸릴수도 있는 문제를 N만에 풀 수 있다. 숫자 배열이 들어오면 일단

daily-programming-til.tistory.com

 

🗃️ 스프링 MVC 1편

  • 웹 서버(Web Server) vs. 웹 어플리케이션 서버(WAS)
    • 웹서버는 정적 웹페이지를 관리하고 웹 어플리케이션은 웹서버의 기능을 포함하면서 동적으로 애플리케이션 로직까지 실행해 웹사이트를 로드 할 수 있다.
    • WAS는 장애가 생길 가능성이 꽤 많으므로 Web server가 대답할 수 있는 건 최대한 대답하게 시키고, 나머지는 WAS가 하도록 하는 게 좋음!
  • 서블렛(Servlet)
    • 원래라면 TCP/IP 대기하고 소켓연결하고, HTTP 메세지 파싱하고 이런 작업들을 대신해주고 비즈니스 로직에만 집중할 수 있게 해주는 도구!
    • 서블릿 객체는 싱글톤으로 관리됨 - 역시나 공유 변수 사용 주의, 서블릿 컨테이너 종료시 함께 종료
    • 동시 요청, 멀티 쓰레드
      • 요청이 들어오면 쓰레드를 새로 만들어 줌
        • 단점: 쓰레드는 context switching 비용이 발생함, 쓰레드 생성 비용이 비쌈, 쓰레드 생성에 제한이 없음(서버가 죽을 수도)
      • Thread Pool: 여기에 쓰레드를 여러 개 만들어 놓고 쓰고 반납하고 하는 형태
        • 미리 만들어 놓으니까 생성 비용을 아낄 수 있고, 응답 시간이 빠르다.
        • 최대치가 정해져 있으니까 너무 많은 요청이 와도 안전하게 처리 가능.
      • 쓰레드 적정 갯수는 어떻게 찾을까??
        • 성능 테스트로 해야함...! 사실상 정답은 없고 테스트를 통해 각각 알맞게 해야하는 듯
      • 그래서 멀티 쓰레드 어떻게 관리할것인가!!
        • WAS가 알아서 다 해결해줌 (얼마나 편리한가)
        • 싱글톤이라는 것에 대해서만 주의하기!
    • CSR, SSR 
      • SSR(Server side rendering): 서버에서 이미 html을 다 만들어서 전송
        • JSP, Thymeleaf
      • CSR(Client side rendering): 웹브라우저의 JS가 동적으로 html을 만들어 냄, 필요한 부분부분만 변경 가능 
        • React, Vue
    • 스프링 부트는 빌드 결과(Jar)에 WAS서버를 포함해서 그냥 바로 빌드 배포 하면 됨

🎛️ 오늘의 TroubleShooting

Streamlit

  • CacheKeyNotFoundError: Key not found in disk cache
    • 이 에러가 계속 Streamlit 배포 할때 생겨서 여러가지 시도해 봤다. 결론적으로는 디렉토리를 만들어 주고 cache_data에 persist=True로 해주니까 해결되었다. 
Path("./.cache/files").mkdir(parents=True, exist_ok=True)

... 

@st.cache_data(show_spinner="Embedding file...", persist=True)
def embed_file(file):
	...
  • OPENAI_API_KEY which contains it, or pass openai_api_key as a named parameter.
    • 이거는 과제를 하면서 사용자의 API_KEY를 사용할 수 있도록 하면서 생긴 문제였는데, LLM을 설정시에 openai_api_key=API_KEY 이렇게 설정해 줘서 다 해결한 줄 알았다. 
    • 하지만 embeddings = OpenAIEmbeddings(openai_api_key=API_KEY) 여기에도 필요하다고 로그에 떠서 추가해 줬다.

👻 오늘 하루 복기

어우 목요일 정도 되니까 집중력이 좀 떨어진다.. 그래도 보통 수요일부터 떨어지는 데 잘 버텼다!! 오늘부터 다시 스프링MVC 패턴을 학습했다. 정처기 준비 틈틈히 하면서 네트워크 지식까지!! 바쁘다 바빠

728x90