월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
3~4일 간격으로 CPU 99% 사용되는 문제
안녕하세요? 루키즈님 덕분에 서버에 대해 많은 것을 배우고 저만의 프로젝트도 개발하고 있는 개발자 입니다.(항상 감사하게 생각하고 있습니다.) 질문은3~4일 간격으로 CPU가 99% 사용되는 문제가 발생하여 원인 분석 차CPU가 99% 사용되는 현상이 발현된 시점에 visual studio 성능 프로파일러를 통한 결과를 얻었습니다.헌데 ServerCore.Listner.OnAcceptCompleted에서 많은 양의 CPU를 사용하고 있는 것으로 파악되는데실제로 Connect요청은 없었습니다.심지어 DummyClient를 이용해 1000명의 플레이어가 기본플레이 까지 했을때도 발생안하다가, 3~4일 후 아무도 접속안하고있는 시점에 발생합니다. 아래 RecvBuffer 코드와 diagsession 정보를 보시고 답변 부탁드립니다.혹여 정보가 부족하거나 추가로 확인 필요한 부분 말씀해주시면 다시 확인해서 질문드리겠습니다.감사합니다.diagsession 캡쳐화면RecvBuffer 코드buffer size : 65535public class RecvBuffer { ArraySegment<byte> _buffer; int _readPos; int _writePos; public RecvBuffer(int bufferSize) { _buffer = new ArraySegment<byte>(new byte[bufferSize], 0, bufferSize); } // [r] [] [] [w] [] [] [] [] [] [] [] 일때 // <Data>[r] [] []</Data> <Free>[w] [] [] [] [] [] [] []</Free> // read의 위치 public int DataOffset => _buffer.Offset + _readPos; // read ~ write까지의 사이즈 public int DataSize => _writePos - _readPos; // write의 위치 public int FreeOffset => _buffer.Offset + _writePos; // wirte ~ buffer의 마지막 public int FreeSize => _buffer.Count - _writePos; public ArraySegment<byte> ReadSegment => new ArraySegment<byte>(_buffer.Array, DataOffset, DataSize); public ArraySegment<byte> WriteSegment => new ArraySegment<byte>(_buffer.Array, FreeOffset, FreeSize); public void Clean() { int dataSize = DataSize; if (dataSize == 0) { // 남은 데이터가 없으면 커서 위치만 리셋 _readPos = _writePos = 0; return; } // 남은 데이터가 있으면 시작위치로 복사 Array.Copy(_buffer.Array, DataOffset, _buffer.Array, _buffer.Offset, dataSize); _readPos = 0; _writePos = dataSize; } public bool OnRead(int numOfBytes) { if (numOfBytes > DataSize) return false; _readPos += numOfBytes; return true; } public bool OnWrite(int numOfBytes) { if(numOfBytes > FreeSize) return false; _writePos += numOfBytes; return true; } }
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
JobSerializer 관련
안녕하세요. 강의 다 듣고 포트폴리오 프로젝트를 만들면서 JobSerializer 관련해 궁금증이 생겨 질문 드립니다. 강의에서 채택한 방식은GameRoom 단위로 JobSerializer를 두는 방식으로 이해했습니다. 그렇다면 Zone은 비대해진 GameRoom의 커버영역을 논리적으로 잘게잘게 쪼개서 최적화 하는 것이라고 보면 될까요? (만약, 좁은 영역을 다루는 보스방 같은 곳은 BossRoom 같이 새로 만들어서 Zone 없이 구현하면 되는건가요?) GameRoom을 여러 개로 나누는 시점은 독립적인 공간 (이를테면 보스방, 건물내부 등)이 생길 때 인가요?강의에서는 GameLogicTask에서 모든 GameRoom에 대한 Flush를 하였는데, 메인월드(대륙)처럼 처리해야 하는 영역이 방대한 GameRoom에 대해서는 Thread 1개 전체를 할당해 주는 등 각 GameRoom의 무게(?) 에 따라서 Thread 1개당 몇개의 GameRoom을 Flush 할 것인지 정하면 되는 것인가요?만약, Object 단위로 JobSerializer를 둔다면 Thread 하나당 담당할 Object 개수를 정해서 하는 건가요? 여담으로 예전에 면접에서 동접자수에 관련된 질문을 받았는데.. CPU 성능에 따라 천차만별이라 크게 의미 있는 질문인가 싶지만 이런 지표를 뽑아내려면 정확히 어떤 기준으로 뽑아내는 건가요? (대충 눈으로 끊김 없는 한계 동접자 수, CPU 로드율 일정% 이상 등등..) 감사합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
3D 게임 이동 동기화
안녕하세요 파트 3부터 9까지 전부 완강을 하고 지금은 3D MMO를 제작하고 있는데 이동 동기화에 관련해서 질문이 있어 글 남깁니다. 현재 제가 구상한 것이 올바른지 확신이 서지 않습니다. 흐름은 다음과 같습니다.플레이어는 A,B가 있다고 했을 때(클라이언트) 1. A가 만약 지정한 좌표(마우스 우클릭 등의 입력으로 이동을 원하는 좌표)로 가고 싶다면 그 좌표가 이동 할 수 있는 위치인지 클라이언트에서 선 판별하고 갈 수 있다면 서버로 지정한 좌표 값을 패킷으로 보냄2. 서버에 도착한 좌표 패킷이 이동 할 수 있는 위치인지 한번 더 판별한 뒤 정상적인 좌표라면 같은 공간에 있는 클라이언트 A,B에게 A의 이동 허가 패캣을 보냄3. 이동 허가 패킷을 받으면 A는 본인을 B는 A객체를 Navigation mesh를 통해 길을 찾아 목적지로 이동.4. A가 목적지에 도착하면 서버에게 도착 좌표를 건네주고 서버에서 그 값이 초기 목적지랑 같은 좌표인지 확인해서 검증함.현재는 이렇게 구상하고 있는데 서버쪽에서 길찾기 연산을 하지 않고 클라쪽 Naviagtion Mesh에 의존해도 되는지 궁금합니다.만약 서버쪽에서도 길찾기 연산이 필요하다면 클라에서 Navagation mesh로 bake한 값을 서버쪽에서 파싱해서 같이 연산을 해줘야할까요?3D에서 이동 동기화(롤이나 스타처럼) 하는 부분을 어떻게 구현해야할지 감이 잘 안잡히네요.항상 좋은 강의 감사합니다.!!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
GameLogic 쓰레드에서 모든 GameRoom을 처리하나요?
안녕하세요.강의를 듣다보니 궁금한 점이 생겨 질문 남깁니다.GameLogic을 담당하는 쓰레드가 있고 이 쓰레드에서 모든 GameRoom(GameRoom이 여러개 있을 때)의 코드들을 전부 실행하는게 맞을까요?? GameLogic에서 Update를 통해 자신의 Job을 Flush함과 동시에 소유한 GameRoom의 Update를 통해 쌓은 Job을 처리한다고 이해했습니다.그렇기 때문에 부하가 큰 Send 등의 처리를 다른 쓰레드(GameLogic 쓰레드에서 다른 쓰레드로)에게 넘기는 작업을 한거로 생각합니다.그런데 위처럼 하면 만약 GameRoom이 많아진다면 속도가 매우 느려질 거 같은데 따로 처리할 수 있을지 궁급합니다.제대로 이해하지 못하고 질문을 남겨 문맥이 이상할 수 있으니 감안해주세요 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Async와 Job방식의 차이가 궁금합니다.
이전 강의에서 PacketHandller 부분에서 Async를 사용하지 않고 Blocking 방식을 사용하는 이유가 EAP 기반이기 때문에 이미 패킷마다 할당된 쓰레드에 의해 I/O가 이루어지기 때문이라고 이해했습니다.하지만 GameRoom같은 경우엔 GameRoom 담당 쓰레드가 존재하고 GameRoom 쓰레드의 동기화를 위해 JobSerialize를 이용하여 각 쓰레드가 GameRoom의 Job을 Push하여 동기화를 진행하는데이때 Job 안에서 DB I/O가 Blocking으로 이루어질 경우 GameRoom 쓰레드가 Blocking이 되고 그렇게되면 GameRoom이 느려지는 상황이 되기때문에 DB I/O 전용 쓰레드(JobSerialize)를 만들어 쓰는것으로 이해했습니다.결국 개념적으로 봤을때 GameRoom 쓰레드는 메인쓰레드 역할을 하고 DB I/O 처리는 서브쓰레드에게 맡기고 완료됐을때 결과만 다시 메인쓰레드에 돌려받는 NonBlocking I/O 방식인데Async/Await 역시 호출한 쓰레드를 Blocking 하지 않고 서브쓰레드에게 I/O를 맡긴뒤 작업이 완료되면 메인쓰레드에 결과를 반환하여 Await 이후에 처리한다고 이해하고 있습니다.그렇다면 복잡하게 DB I/O 전용 쓰레드를 만들어주지 않고 Async/Await만 사용해도 될것같은데 이렇게 하는 이유가 있을까요?아니면 이후에 강의에 이에 대한 개선이 나오는걸까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
EF사용시 async사용
EF 변경사항을 저장할 때 SaveChangeAsync가 아닌 SaveChange를 사용하게되면 해당 쓰래드는 blocking이 발생할텐데 괜찮나요? 제 추측으론EAP 기반 IO 통신이기때문에 어차피 패킷요청마다 개별의 쓰래드에서 처리가되니 굳이 async를 사용안해도 다른 패킷(Thread)에 대한 blocking이 이러나지 않으니까 그냥 SaveChange를 사용한건가? 라고 생각하긴 했는데 선생님의 답변을 듣고싶습니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
해당 강의를 듣고있는 학생입니다.
강의를 기반으로 포트폴리오를 만들고있는데요. 파티를 만들어서 던전에 입장할때 하나의 새로운 Room으로 만들고그 Room에 들어온 파티원들을 새로운 던전Scene으로 이동시킬때. Unity에서 scene전환을 동기시킬 방법이 뭐가있을까 궁금하여 질문드립니다. 항상 좋은강의 올려주셔서 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
해당 강의를 완강하면 실제 여러 대 PC의 환경에서 MMO구현이 가능할까요?
안녕하세요. 간단히나마 실제 멀티게임 구현을 목표로 이전 강의(Part7)들 듣고 있습니다. 아직 Part7을 듣고 있어서 그런데 해당 강의 Part9를 들으면 실제 서버 전용 PC를 두고 여러개의 클라PC가 각 .exe파일을 실행하는 환경을 구축하는 내용이 포함되어 있을까요? 만약 그렇지 않다면, 다른 강의에서는 혹시 위 내용이 포함된 강의가 있을까요? 루키스님은 물론이고, 다른 수강자 선배님들, 인프런 AI 인턴 답변 모두모두 환영합니다. 답변 미리 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Room마다 Thread를 만들기
안녕하세요 루키스님 덕분에 서버개발자로 취업하였습니다.루키스님의 강의를 체화하기 위해서 간간히 코드를 보면서 잊어먹을랑 말랑한 것들을 다시 강의로 듣곤 합니다그러다가 아래 코드를 보면서 문득 의문이 들었는데요.while(true) { GameLogicTask.Instance.Update() }게임 실행 시 위 로직을 타면서 메인쓰레드 하나서 모든 Room의 Update를 담당하고 있는데Room에 유저수가 많아지게 되면 메인 쓰레드에 점점 부하가 더 많아지는게 아닌가해서 질문을 드립니다.메인쓰레드 부하가 많아지면 컨텍스트 스위칭이 생겨도 Room마다 Thread를 생성하여남은 자원을 Update가 바쁘게 돌아가는 Room쪽에 쓰레드를 조금 더 할당해 주어도 될까요?(밑에 질문에 답변해 주셨네요 ^^; Room마다 쓰레드를 더 만들겠습니다.) 심리스 월드에서 Actor마다 JobSerializer를 할당하는 방법을 쓰면,쓰레드를 너무 많이 만들게 될것 같은데 컨텍스트 스위칭 외에 또 생기는 성능적인 사이드 이펙트를 뭘 또 고려하면 좋을까요?Actor마다 JobSerializer를 쓴다고 하면 Actor단일로서는 lock을 걸지 않아도 되지만서로 상호작용이 일어나는 상황에서는 어쩔수 없이 lock을 걸어줄수 밖에 없을 것 같은데, 그러면 결국은 JobSerializer를 쓰지 않아도 되지 않나 부족한 지식으로 어렴풋이 생각이 듭니다.또한 JobSerializer를 Flush 하기 위해선 Actor마다 while(true) 루프를 돌면서 계속해서 잤다가 깼다가 확인 하는 과정과 컨텍스트 스위칭비용이 점점 더 늘어날 것 같은데 이런 비용을 감안하면서 사용하는 것인지요. 아니면 딱히 신경쓰지 않아도 될만한 부하인지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
DB연동, Connector, Session, Packet
안녕하세요. 강의 정말 잘 듣고있습니다.DB연동 부분에서 궁금한 점이 있어서 질문드립니다. 네트워크는 사용하지 않고, DB만 사용하는 게임을 만드려고 합니다. Connector로 Server와 Client를 연결하고, Session을 두고 Packet 을 보내는 작업이 꼭 들어가야 하나요?EFCore를 사용하려면 꼭 해야 하는 부분일까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
20분35초 Broadcast 관련 질문 입니다.
안녕하세요. Broadcast에서 패킷을 보낼 때 마다 컨텍스트 스위칭이 일어난다 하신게 이해가 어렵습니다.현재 코드에서 GameRoom이 JobSerializer의 상속을 받아서 모든 행동을 큐에 넣고 특정 타이밍에 현재 쌓여있는 큐에 있는 내용을 실행합니다.특정 타이밍에 GameRoom을 Flush하려고 접근한 스레드가 쌓여있는 큐에 있는 행동을 모두 수행하면서 쌓여있는 Broadcast들도 모두 수행하는데, 여기서 어떻게 컨텍스트 스위칭이 일어나는지 모르겠습니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Cannot resolve destination host 오류가 뜹니다
AccountServer #2 강좌에서 유니티 클라와 웹서버 연동 테스트하는 부분이 있는데테스트로 GameScene에다가 다음 두줄을 넣고 테스트하는 부분입니다. Managers.Web.BaseUrl = "https://localhost.5001/api"; WebPacket.SendCreateAccount("AAA", "1234"); 브레이크 걸고 확인해보니 웹서버에는 CreateAccount([FromBody] CreateAccountPacketReq req)가 실행조차 되지 않았습니다.웹서버에 연결 자체가 안되는 것 같은데 구글에 쳐봐도 잘 모르겠고어디가 문제인지 모르겠습니다.심지어 웹서버쪽 코드와 유니티쪽 WebManager.cs, Webpacket.cs 코드는 죄다 복붙으로 만들어서 오타가 있을 리가 없을텐데...로그가 생긴 함수는 다음과 같습니다.uwr.isNetworkError가 true라서 로그가 발생했습니다. IEnumerator CoSendWebRequest<T>(string url, string method, object obj, Action<T> res) { string sendUrl = $"{BaseUrl}/{url}"; byte[] jsonBytes = null; if (obj != null) { string jsonStr = JsonUtility.ToJson(obj); jsonBytes = Encoding.UTF8.GetBytes(jsonStr); } using (var uwr = new UnityWebRequest(sendUrl, method)) { uwr.uploadHandler = new UploadHandlerRaw(jsonBytes); uwr.downloadHandler = new DownloadHandlerBuffer(); uwr.SetRequestHeader("Content-Type", "application/json"); yield return uwr.SendWebRequest(); if (uwr.isNetworkError || uwr.isHttpError) { Debug.Log(uwr.error); } else { T resObj = JsonUtility.FromJson<T>(uwr.downloadHandler.text); res.Invoke(resObj); } } } 유니티 로그는 다음과 같습니다. Cannot resolve destination hostUnityEngine.Debug:Log (object)WebManager/<CoSendWebRequest>d__5`1<CreateAccountPacketRes>:MoveNext () (at Assets/Scripts/Managers/Contents/WebManager.cs:46)UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
17분 30초 부분 질문드립니다.
안녕하세요 선생님, 항상 좋은 강의 감사드립니다.다름이 아니라 강의 17분 30초경에S_CreatePlayer newPlayer = new S_CreatePlayer() { Player = new LobbyPlayerInfo() };newPlayer.Player.MergeFrom(lobbyPlayer);부분에서 질문드립니다.여기에서S_CreatePlayer newPlayer = new S_CreatePlayer() { Player = lobbyPlayer}; 와 같이 위에서 만들어 놓은 lobbyPlayer를 바로 사용하여 코드를 작성하지 않고, 새롭게 LobbyPlayerInfo 객체를 생성해 MergeFrom(LobbyPlayerInfo)를 하는 방식으로 해야 하는지가 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
비밀번호 암호화 질문
안녕하세요 강사님!다름이 아니라 비밀번호 암호화와 관련한 질문이 있습니다.실제로는 비밀번호 암호화가 필요할텐데 일반적으로 클라에서 비밀번호를 암호화 한 상태로 서버에 넘기는지, 클라에서는 비밀번호를 쌩으로 넘기고 서버에서 암호화를 해서 DB에 저장하는지 궁금합니다 !
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
아이템 드랍 확률 조정 질문
안녕하세요 강사님! 다름이 아니라 지금 강의에서는 probability를 백분율 기준으로 세팅한다고 하셨는데 만분율이나 1억만분율 기준으로 세팅하고 싶으면 코드의 어느부분을 손대야하는건지 궁금합니다. 사실 지금 백분율 기준으로 세팅했다고 하셨는데 그 부분도 어디서 세팅하는건지를 모르겠어서..ㅠㅠ 급한 마음에 질문이 앞서 이와 관련해 뒷 강의 부분에 나오면 그거 참고해서 하겠습니다!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
서버가 로직 도중에 중단되는 상황을 테스트가 가능할가요?
6분쯤에 코드가 중간에 서버가 크래시 나거나 db실행이 도중에 중단되어 로직이 반만 실행됬을때 ~ 라고 하셨는데 바쁘다보면 정신놓고 기계적으로 코딩하는 상황이 올테고 그러다보면 저런 실수가 충분히 가능할거 같은데 발생한다쳐도 테스트가 너무 어려울거 같더라구여.. 혹시 코드에 도중에 멈추면 큰일나는짓을 했는가 같은걸 알수있는 방법이 있을까요? 혹은 회사에서 실무코딩 하시는분들은 저런걸 테스트 가능한 환경이 구성되어 있나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
마우스 이벤트 처리방법(오브젝트간 인터렉션)
안녕하세요. 강의 잘 보고 있습니다.마우스 이벤트 처리 관련해서 현업에선 어떤식으로 처리하는지 궁금해서 여쭤봅니다.(web개발자라.. 게임개발은 생소하네요.) 먼저 구현하고 있는 게임은 2d mmo 게임입니다. mmo 필수 마우스 이벤트들이 있을텐데요.. 가령 상대방 케릭 또는 몬스터 좌클릭(공격), 우클릭(스킬공격) ui 상에서 아이템 클릭 후 타 케릭쪽으로 드롭하는 행위 등.. 이벤트 처리시 자신의 케릭정보와 클릭?된 오브젝트간에 데이터를 가지고 공격로직같은걸 구현해야할 것으로 보입니다. 구글링해보니 gameobject 에 마우스이벤트 처리를 위해 onenter 와 같은 핸들러를 구현 할 수 있더라구요.. 오브젝트 마다 하나하나 구현하자니 다른 방법이 있을거 같아 혹시 다른 방식이 있는지요?(제가 생각해본건 마우스이벤트 처리 클래스 생성 후 오브젝트에 마우스 이벤트 핸들러에서 이벤트를 넘겨줄때 해당 오브젝트 정보를 넘겨 처리하면 되지않을까.. 라고 어렴풋 생각해봤습니다.) 현업에선 어떻게 처리하는지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
RecvArgs_Completed에서 lock을 안하는 이유
RecvArgs_Completed에서 lock을 안하는 이유는 하나의 클라이언트당 하나의 thread로 recv를 받기 때문인가요?그래서 PacketHandler에서 연관된 작업을 모두 처리한 후 (공유 자원을 참조할 땐 job으로만 저장)다시 RecvArgs_Completed으로 돌아와 RegisterRecv를 호출 하여 threadpool에서 하나의 thread로 recv를 받는게 맞나요?recv는 하나의 thread로만 작업하는지 궁굼합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Entity framework 질문드립니다.
entity framework로 db 생성하면 sqlserver에는 만들어지지 않나요?보통 프로젝트 할 때 ado.net와 entity 중 어떤 걸 많이 사용하는지 궁금합니다.(다른 방법이 있다면 키워드만 알려주실 수 있으면 감사하겠습니다.) 제가 질문드리는 이유는 sqlserver에서 직접 테이블을 만들고 프로시저등을 만들어서 프로그램과 연동하고 싶기 때문입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
json 직렬화
제가 작업을 하다가 키 값이 프론트 코드에 그대로 남는게 조금 그렇기도 하고 보안을 강화하고 싶어서키 값을 json 파일로 보관하고 유니티에서 로드해서 읽어오는 방식(이게 직렬화 맞죠?ㅎ)으로 변경한 후에빌드를 했습니다.azure를 이용한 key vault 라는 서비스가 있다는 걸 알게됐지만이정도만 해도 어느정도 보안성이 있을까요?? 이렇게 하면 장점이랑 단점은 뭘까요답변을 드릴만한 분이 없으셔서 여쭤봅니다 루키스님!