[크래프톤 정글 3기] 2/3(토) TIL

ClassBinu·2024년 2월 3일
0

크래프톤 정글 3기 TIL

목록 보기
106/120

파인 튜닝
챗봇 고도화

AWS

S3

썸네일 이미지 람다로 자동 생성되는 건 구현했으나,
resized 버킷 객체에 public으로 접근이 안 됨.

버킷 정책 추가하니까 해결됨.

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "Statement1",
           "Effect": "Allow",
           "Principal": "*",
           "Action": "s3:GetObject",
           "Resource": "arn:aws:s3:::{버킷이름}/*"
       }
   ]
}

cors도 추가함

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "HEAD",
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]

stremlit

챗봇 고도화를 위해 강의 들으면서 겸사겸사 stremlit 공부

toml

toml에서 문자열을 .env와 다르게 따옴표를 써 줘야 함.

LLM

llama2 등 오픈소스 LLM을 다양하게 시도해봤지만, 한국어는 아직 자체로 돌리기에는 시기 상조

GPT 파인튜닝이 최적의 선택일 듯

Websocket

WebSocket은 단일 TCP 연결을 통해 전이중(full-duplex), 양방향 통신 채널을 웹 브라우저와 서버 간에 제공하는 통신 프로토콜입니다. 이는 HTTP 프로토콜 위에서 실행되며, 클라이언트(일반적으로 웹 브라우저)가 서버에 "업그레이드" 요청을 보내는 방식으로 시작됩니다. 이 요청은 웹 통신을 HTTP에서 WebSocket 프로토콜로 전환하겠다는 의도를 나타냅니다.

WebSocket 연결의 시작점은 클라이언트가 서버에 HTTP GET 요청을 보내는 것이며, 이때 특정 헤더를 사용하여 WebSocket 연결로의 업그레이드를 요청합니다. 주요 헤더는 다음과 같습니다:

Upgrade: websocket: 이 헤더는 클라이언트가 현재의 연결을 WebSocket 프로토콜로 전환하고자 함을 나타냅니다.
Connection: Upgrade: 이 헤더는 현재의 연결을 유지하면서 프로토콜 전환을 요청함을 나타냅니다.
Sec-WebSocket-Key: 클라이언트가 생성한 무작위 키로, 서버는 이 키를 사용하여 응답을 생성하고 클라이언트가 요청을 실제로 이해하고 있는지 확인합니다.
Sec-WebSocket-Version: 클라이언트가 지원하는 WebSocket 프로토콜의 버전을 나타냅니다.
서버가 이 요청을 수락하면, 101 Switching Protocols 상태 코드와 함께 응답을 보내고, 연결은 HTTP에서 WebSocket으로 업그레이드됩니다. 이후의 데이터 교환은 WebSocket 프로토콜을 따르게 되며, 이를 통해 서버와 클라이언트 간에 실시간, 양방향 통신이 가능해집니다.

WebSocket 연결이 성립되면, 클라이언트와 서버는 연결이 종료될 때까지 지속적으로 데이터를 주고받을 수 있습니다. 이 연결은 네트워크 지연이 적고, 실시간 통신을 요구하는 웹 애플리케이션에 이상적입니다. 예를 들어, 실시간 채팅 애플리케이션, 게임, 금융 시장 데이터 스트리밍 등에 널리 사용됩니다.

extends vs implements

웹 소켓 코드 중에 implements 보고 찾아 봄

상속 (extends)

클래스가 다른 클래스의 속성과 메서드를 상속받아 사용할 수 있게 합니다. 상속받은 클래스(자식 클래스)는 부모 클래스의 모든 공개(public) 및 보호된(protected) 멤버를 사용할 수 있으며, 필요에 따라 이를 오버라이드(재정의)할 수도 있습니다. 상속은 일반적으로 코드의 재사용성을 높이고, 계층적인 클래스 구조를 구성하는 데 사용됩니다.

구현 (implements)

클래스가 특정 인터페이스의 명세를 만족해야 함을 나타냅니다. 인터페이스는 메서드의 시그니처(이름, 매개변수, 반환 타입)만을 정의할 수 있으며, 구현 내용은 제공하지 않습니다. 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 하며, 이를 통해 특정한 계약(contract)을 준수하겠다는 것을 보장합니다. implements는 주로 다형성을 실현하고, 설계 시 계약에 기반한 코딩을 유도하는 데 사용됩니다.

fly.io

오늘 따라 계속 서버가 죽었다 살았다 하는 걸 반복
알고 보니 정전 이슈가 있다고 함.

이래서 서버를 분산해야 하나 보다.

0개의 댓글