인프런 커뮤니티 질문&답변

자르트님의 프로필 이미지
자르트

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: AWS로 시작하는 서버 운영

ec2 서버 + 디비

작성

·

500

1

안녕하세요 루키스님. aws를 완강하고 mmo server를 ec2에 올리기 작업을 진행중입니다. 제 노트북에서 아마존을 들어가 ec2 인스턴스를 열어 서버 창에서 listening 중이고 제 데탑에선 Client 파일을 유니티에서 데모로 실행해본 결과 접속을 성공하였습니다!!

다만 Part9의 마지막 완성본인 DB를 연동한 프로젝트는 접속이 되지 않았습니다.

없는 아이디와 비번을 입력시 destination host에 연결하지 못했다고 뜨는 것을 보니 AccountServer에 도착하지 못하는 것 같습니다.

아마 AccountServer의 IPAddress를 맞추지 않아서 인것 같아 찾아보고 있는데 AccountServer 프로젝트 내에서 쓰이는 IP주소가 있는 부분은

이 두 부분을 제외하고는 없었습니다. 어디를 고쳐야 할지 모르겠어서 이렇게 도움을 구해봅니다 ㅠㅠ...

DB의 update-database부분은 전부 실행하여서 현재 데이터는 안쌓여 있지만 테이블은 만들어진 상황입니다!!

+ 연동할때 넣은 IP 주소는 서버쪽에선 ec2 환경에서 cmd를 친후 ipconfig해서 나온 Ipv4 주소값을 넣어줬습니다.

클라이언트는 탄력적  IP 주소를 하나 생성하여 서버 ec2에 붙인후 해당 IP를 클라이언트의 NerworkManager.cs 안의 ConnectToGame 함수에 넣었습니다. 혹시 몰라 내용과 사진 첨부하겠습니다!

위의 3.39.241.233이 클라에 넣은 탄력적 IP주소 입니다.

서버는 서버의 Program.cs에 들어가

ipconfig해서 나온 Ipv4 주소를 넣은 곳 입니다(이렇게 하니 Part7의 서버 연동까지는 잘 됐었습니다!!)

 

답변 8

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

안녕하세요,
오랜만에 만지다보니 오늘 삽질좀 하다가 접속을 성공시켰는데요.

일단 Visual Studio에서 바로 띄워서 테스트할 경우,
launchSettings.json의 applicationURL에 
Private IP를 박고 유니티에서는 Public IP (탄력적IP)로 접속하면 됩니다.

보다 진지하게 배포해서 IIS에 띄울 경우,
강의 윈도우 배포에서 나온 내용 그대로 실습하면 잘 됩니다.
다만 DB가 문제인데 VS 상에서 테스트하는 로컬 DB는 작동하지 않는 것으로 보입니다.
따라서 AWS에서 제공하는 RDS에 MS-SQL로 설정해서 원격 DB를 붙였습니다.
RDS 사용할 경우 ConnectionSTring을 @="server=1;database=2;user=3;password=4";
1,2,3,4를 본인 정보대로 채워주시면 됩니다.

자르트님의 프로필 이미지
자르트
질문자

감사합니다!! 해결하여서 멀티가 잘됩니다!!ㅠㅠ

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

클라에서 AccountServer와 연결되는 포트도 당연히 설정해야 합니다.


강의 코드 기준으로는 BaseURL이 하드코딩되어 있지만
이 또한 데이터로 빼서 관리해야겠죠.

최근에 작업하는 온라인 게임 프로젝트 샘플 코드는 다음처럼 되어 있습니다.


1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

여기 보면 잘못된게 아니라 ip/port가 겹쳐서 그런건데

port 주소를 http / https 를 각기 다르게 해보세요.

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

ㅇㅇ



asp.net 설정 파일은 launchSettings를 수정하면 됩니다.

현재 제가 사용하는 버전에서는 위와 같이 뜹니다. applicationUrl 부분을 수정해보세요

0

자르트님의 프로필 이미지
자르트
질문자

그렇다면 루키스님이 보셨을 때 

AccountServer와 연결해주는 코드를 클라에서 수정하였고 AccountServer코드에선 해당 포트를 열어줬으니 문제가 없을 것 같은데 어디서 문제가 생기는 것인지 잘 모르겠습니다

 

이 부분이 제가 코드를 제대로 수정했다는 가정하에 이론적으로는 맞는말이니 환경적인 문제일 수도 있다는 말씀이실까요??

0

자르트님의 프로필 이미지
자르트
질문자

 

이렇게 ec2의 탄력적 ip를 클라에 박아주고 

ec2의 서버 프로젝트에선 위와 같이 설정하였습니다만 여전히 LoginScene에서 서버까지 도달하지 못합니다...혹시 8888포트가 문제인가 해서 클라의 url을 

 

public string BaseUrl { get; set; } = "http://3.39.241.233:9999/api";

 

https가 아닌 http로 바꿔주고 9999포트로 열고 해봤지만 되지가 않습니다...ㅠㅠ

AccountServer와 연결해주는 코드를 클라에서 수정하였고 AccountServer코드에선 해당 포트를 열어줬으니 문제가 없을 것 같은데 어디서 문제가 생기는 것인지 잘 모르겠습니다

 

AccountServer 콘솔창에도 해당 포트와 주소가 열린 걸 확인한 것 같습니다!

 

+ 혹시 할당받은 탄력적 IP를 대상으로 도메인을 산 다음 해당도메인을 applicationUrl에 박아야 할까요?? 어차피 도메인도 타고 타고 가다보면 해당 ip에 도달하는 형식이라 배운 것 같아서 시도는 해보지 않았습니다!!

Rookiss님의 프로필 이미지
Rookiss
지식공유자

음~ 환경 설정 문제라 사실 저도 정확히 알기가 힘듭니다.
운영체제 방화벽 뿐 아니라, ec2 보안 정책 설정에
막힌 것일 수도 있고 사실 경우의 수는 많습니다.

이번주 수~목 정도에 마침 저도 오랜만에 사내 테스트겸
asp.net을 aws에 띄울 일이 있는데 해보고
놓치는게 있다면 다시 말씀드리겠습니다.

자르트님의 프로필 이미지
자르트
질문자

알겠습니다!! 답변 감사드립니다!!

자르트님의 프로필 이미지
자르트
질문자

그렇다면 루키스님이 보셨을 때 

AccountServer와 연결해주는 코드를 클라에서 수정하였고 AccountServer코드에선 해당 포트를 열어줬으니 문제가 없을 것 같은데 어디서 문제가 생기는 것인지 잘 모르겠습니다

 

이 부분이 제가 코드를 제대로 수정했다는 가정하에 이론적으로는 맞는말이니 환경적인 문제일 수도 있다는 말씀이실까요??

0

자르트님의 프로필 이미지
자르트
질문자

빠른 답변 감사드립니다 루키스님! 답변 주신 내용을 바탕으로 해결중인데

위와 같이 포트번호를 걸고 Server와 AccountServer를 같이 실행해보니 

겹치는 문제가 발생하였습니다. 아마 서버를 열땐 7777포트를 사용하는데 이미 AccountServer에서 7777포트를 같은 ip로 사용중인게 문제 인 것 같아 Server에는 7777포트를 AccountServer에는 8888과 9999를 열어줬습니다.

이렇게 하니 충돌 없이 프로젝트 두개가 잘 구동 되지만 다른 로컬에서 LoginScene에서 로그인을 해보니 destination에 연결하지 못했다고 로그가 찍혔습니다. 혹시 몰라 Server 프로젝트를 끄고 AccountServer만

실행하여 확인을 해봤지만 마찬가지로 destination에 연결하지 못했다고 떴습니다...

+ 이렇게 해보니 제가 궁금한 점이 클라이언트에선 AccountServer와 연결되는 포트 같은 것을 따로 설정한 적이 없는 것 같습니다. 제가 지금 서버 코드를 위주로 수정중인데 클라이언트 코드는 따로 수정이 없어도 되는 것인지 궁금합니다!(방화벽은 aws강의에 나온대로 꺼놨습니다, 아마 방화벽 문제였다면 파트7의 프로젝트 서버 연결을 하였을때부터 안됐을 것이라 생각이듭니다)

 

0

자르트님의 프로필 이미지
자르트
질문자

말씀 주신대로 applicationUrl부분을 ec2 인스턴스 안에서 ipconfig해서 나오는 Ipv4값을 넣고 실행해봤습니다.

하지만

다음과 같은 에러가 났습니다. 아마 서버를 열때 ipconfig해서 나온 ipv4 주소를 사용해서 그런 것 같습니다. 그래서 탄력적 ip로 바꿔서 넣어봤습니다.

하지만

요청한 주소는 유효하지 않다고 하는 모습입니다. 그래서 탄력적 주소를 쓰는게 아닌것 같아 ipv4주소에서 포트만 8888로 바꿔봤습니다

하지만

처음 시도와 같은 에러를 내뱉으며 이미 존재하는 ip라고 합니다...

혹시 ipv6를 넣으면 되지 않을까 해서 넣어봤습니다.

하지만

거부당했고 혹시 몰라 https 도 붙여보고 포트도 바꿔보고 다양한 방법으로 접근해봤습니다.

하지만

이 방법은 애초에 컴파일도 되지 않았습니다.

 ec2에서 ipconfig해서 나온 모든 값을 넣어봤지만 대부분 유효하지 않다고 나왔습니다. 

어떤 IP를 넣어야 할지 잘 모르겠습니다. 죄송하지만 한번더 질문드립니다...ㅠㅠ

자르트님의 프로필 이미지
자르트

작성한 질문수

질문하기