일단 로긘을 해야겠지?
난 아이디도 없어서 회원가입부터함

쭉 진행하다 보면 카드 정보 입력하고 어디사는지 입력하라고 뜨는데 그거까지 다 해주고 로그인 ㄱㄱ
다음에 이 사이트를 들어가서 EC2를 검색(로그인 돼있으면 사진처럼)

인스턴스를 누르고
오른쪽 위 인스턴스 시작 ㄱㄱ


첫번째 프리티어 사용 가능이니까 그거 선택

.pem 파일을 다운로드
키 페어 이름도 프로젝트 이름으로 해줬음
여기서 ppk로 하는게 좋을듯 어차피 나중에 ppk도 필요해서(근데 난 pem으로 함)

인스턴스 시작하면 만들어집니당

다시 대시보드로 돌아와서 인스턴스ID를 클릭하면(사진에서 가려놔서 안 보이는거지 클릭할 수 있게 돼있음)

가릴거 참 많다,, 여기서 보안 들어가면

보안 그룹이라는게 보이는데 이걸 누르삼


50000.0.0.0/0) — 테스트용
얘가 귀찮음
https://winscp.net/eng/download.php
여기서 얘 다운 받고 키면 로그인하라는 창이 뜨는데 여기다 파이썬 모듈을 옮겨줄거임
3.34.xxx.xxx)아까 그 대시보드에서 이 부분을 복사해오면 됨

ubuntu (반드시 소문자)
여기서 냅다 로그인하면 안되고 고급에서

... 버튼을 눌러 내 컴퓨터에 있는 .pem 파일을 선택.pem 파일이 보임
만약에 ppk로 했으면 그거 넣고 pem으로 했으면 이렇게 넣어줌

그럼 이런 창이 뜨면서 확인 누르면 됨
만약 안 뜬다!! 하면 공개 키 표시 버튼을 눌러보세요(난 이렇게 해결함 왜인진 모름)
이제 내 컴퓨터에 있는 아래 4개 파일을 마우스로 잡아서 오른쪽 칸으로 드래그하면 끝
일단 내가 만든 서버에 접속해야되니까 이거부터 해줌
서버 접속 (SSH): 터미널이나 PuTTY를 통해 서버에 접속
ssh -i "키파일이름.pem" ubuntu@내-EC2-IP주소
키파일이름은 아까 만든 이름으로 하면 되고
내 EC2 IP 주소는 아래 사진에 보이는 퍼블릭 IPv4 주소를 쓰면댐

파이썬 환경 설치
sudo apt update sudo apt install python3-pip -y pip3 install flask gensim
패키지 목록 업데이트
sudo apt update
파이썬 설치 확인 및 pip(설치 도구) 설치
sudo apt install python3-pip -y
필요한 라이브러리 설치
pip3 install flask gensim
실행 테스트
python3 run.py
(에러 없이 Complety Loading Model이 뜨는지 확인!!)
백그라운드 실행
nohup python3 run.py > output.log 2>&1 &
ps -ef | grep run.py로 프로세스 ID를 찾아 kill 명령어를 사용만약
Loading FastText...
Killed
라는 오류가 떴다면 메모리 부족으로 뜨는 오류로 다음과 같이 순서대로 진행
1. 2GB 크기의 스왑 파일 생성
sudo fallocate -l 2G /swapfile
2. 파일 권한 설정 (보안)
sudo chmod 600 /swapfile
3. 파일을 스왑 공간으로 포맷
sudo mkswap /swapfile
4. 스왑 공간 활성화
sudo swapon /swapfile
5. 설정이 잘 되었는지 확인
free -h
결과 확인: Swap: 부분에 2.0Gi라고 나오면 성공입니다!
이후에 다시 python3 [run.py](http://run.py) 를 입력해서 실행
이제 유니티의 PythonConnectManager.cs 파일에서 URL만 변경하면 끝!
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Text;
using Newtonsoft.Json;
using System.Collections.Generic;
using System;
[System.Serializable]
public class ResultData
{
public List<string> result;
}
public class ResultData2
{
public float? result;
}
public class PythonConnectManager : MonoBehaviour
{
private string serverIP = "본인 퍼블릭 IPv4 주소";
}
//단어와 몇개의 유사한 단어를 가져올 것인지 입력
public IEnumerator MostSimilarty(string inputWord, int num, Action<List<string>> callback)
{
string url = $"http://{serverIP}:5000/most_similarty";
var data = new { word = inputWord, num = num };
string jsonData = JsonConvert.SerializeObject(data);
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string jsonResponse = request.downloadHandler.text;
Debug.Log("서버 응답: " + jsonResponse);
ResultData responseData = JsonConvert.DeserializeObject<ResultData>(jsonResponse);
if (responseData.result != null && responseData.result.Count > 0)
{
callback(responseData.result);
}
else
{
callback(new List<string> { "부정확한 단어" });
}
}
else
{
Debug.LogError("요청 실패: " + request.error);
callback(new List<string> { "요청 실패" });
}
}
}
//두 단어 사이의 유사도
public IEnumerator SimilartyTwoWord(string inputWord, string inputWord2, Action<float?> callback)
{
string url = $"http://{serverIP}:5000/similarity";
var data = new { word1 = inputWord, word2 = inputWord2 };
string jsonData = JsonConvert.SerializeObject(data);
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string jsonResponse = request.downloadHandler.text;
ResultData2 responseData = JsonConvert.DeserializeObject<ResultData2>(jsonResponse);
if (responseData != null && responseData.result.HasValue)
{
callback?.Invoke(responseData.result.Value);
}
else
{
Debug.Log("부정확한 단어");
callback?.Invoke(null);
}
}
else
{
Debug.LogError("요청 실패: " + request.error);
callback?.Invoke(null);
}
}
}
}
나중에 서버를 업데이트하거나 끄고 싶을 때는 아래 명령어를 터미널에 입력하면 됩니당~
pkill -f run.py