서버 개발기
어제 제대로 정리 못한것을 정리하면서 시작해보자.
일단 게임씬으로 이동 후 게시판 post를 만들어야 했다. 클라이언트의 대부분은 치타단 동료 뿌추님이 만들어줬기 때문에 서버, db연동만 하면 됐다.
포스트 ui에 title, author, content를 입력하고 post버튼을 누르면 db에 전송이 되게 만들었다.
그에 따라서 db에 post라는 테이블을 만들고 후에 만들 댓글을 위해서 id를 primary key, 그리고 comment의 id를 foreign key로 지정했다.
이제 이 보드와 상호작용을 하면 지금까지 post한 게시글들을 불러와서 보여주어야 했다.
동적생성을 사용하기 위해서 unity instantiate 함수를 사용해주고, 새로 생긴 오브젝트들이 스크롤뷰로 차례대로 정렬되어야 했기 때문에 그에 따른 transform을 조절해주는 함수를 구현했다.
동적 생성은 완료되었으니 이제 이 동적 생성된 오브젝트들에 db.post에 있는 데이터들이 들어가야했다.
여기서 문제가 발생했다.
이전까지 서버와 통신한 것과 같이 'packet_id' + '/' +'data' 의 구조로 통신을 했다.
처음의 계획은 일단 post의 개수를 return받고, 그 개수만큼 0부터 n-1까지 index로 query접근을 해서 값을 받아와서 하나씩 동적 생성하면서 값을 채워넣는 계획이었다.
open_post를 통해서 post에 저장된 게시글의 수를 받아오고, for문을 통해서 stream.write를 보내며 요청을 하는 것이었다.
여기서 25/1 , 25/2, 25/3, 25/4 ... 이런식으로 들어가서 하나씩 요청하고 그에 대한 값들을 받아올 수 있을거라고 생각했는데, 처음 값은 잘 들어가지만 그 다음 값부터 125/2/253/25 이런식으로 들어갔다.
분명 지금까지 같은 통신을 하고, 그런데 다른 결과가 나오니 어떤게 문제일까 고민을 했다. 그래서 여러 방법을 사용해보다가 결국 전의 코드들과 무엇이 다른지 고민을 했고, for문이 추가되서 그렇다라는 생각을 했다. 그에 관련되어 찾아보니 비동기성 문제였다. write함수가 비동기성이여서 끝나는 것을 기다리지 않고 write가 발생해서 일어난 문제였다.
그래서 요청을 한번에 받아 서버에서 처리해주는 식으로 했다.
db에서 데이터를 for문을 통해서 인덱스로 모아서 보내주고, 클라이언트에서 그것을 받아 파싱해서 해결했다.
받은 데이터로 이제 동적 생성 오브젝트에 넣으려고 하는데, 이 데이터들이 오브젝트에 들어가지 않는 오류가 있었다.
동적 생성된 오브젝트에 값들을 어떻게 넣어주어야 하는가 여러 고민을 하고 조사하다가 프리팹을 사용하기로 생각을 했다. 프리팹으로 게시판 목록을 만들고, 동적 생성을 할 때, 그 값을 넣어주는 식으로 코드를 작성했다.
위에서 파싱한 데이터들을 객체에 넣어주었다.
이런식으로 동적 생성된 객체에 들어가는 것을 확인했다.
추가로 비슷하게 이 객체를 클릭했을 때 게시판이 나오도록 설정했다. 여기서 버튼이 클릭했을때 그 화면이 setactive되야 하는데 위의 button.onclick.addlistener 라는 함수를 통해서 onclick이벤트를 등록시켜줬다.
이런식으로 아까 저장한 게시글이 나오도록 구현했다.
ReadMe작성완료
StackGrowth/README.md at main · EririnG/StackGrowth
StackGrowth/README.md at main · EririnG/StackGrowth
KraftonJungle 12-13 Weeks. Contribute to EririnG/StackGrowth development by creating an account on GitHub.
github.com
휴!
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.04.19 C++ (0) | 2024.04.20 |
---|---|
24.04.18 AWS 강연 (1) | 2024.04.18 |
24.04.16 서버 개발기 (0) | 2024.04.17 |
24.04.15 서버 개발기 (0) | 2024.04.16 |
24.04.14 서버 개발기 (0) | 2024.04.15 |