전체 글 494

Spring 뉴비가 배운 간단한 개념들

나도 확실하게 잘 다루는 서버 Framework를 하나 가지고 싶은데, 뭐로 할까 고민하다가 대중적이면서도 내가 현재 개발할때 익숙한 Java/Kotlin을 지원하는 Spring을 배워보자는 마음을 먹었다. "kotlin spring boot"이라고 검색하면 말은 느리지만 손은 빠른 아저씨의 유튜브 강의 시리즈가 나오는데, 이걸 보고 공부하고 있다. 이제...10강!까지들었다. 아직 찍먹한지 겨우 이틀되었지만 까먹기 전에, Spring에 관해 알아낸 것들을 간략히 정리 해 보겠다. Spring Framework vs Spring Boot https://spring.io/projects 에 가면 여러가지 Spring "프로젝트"라고 불리는 것들이 보인다. 이것은 Spring이라는 Framework에 속하거..

멀티 플레이 게임서버 구현 4편: 지연 보정

들어가며 이 글은 https://www.gabrielgambetta.com/lag-compensation.html의 글을 공부하면서 옮긴 것으로, 번역과 의역이 섞여있습니다. 이전 3편에 걸친 글에서 다룬 클라이언트 - 서버 아키텍쳐에대한 설명은 다음과 같이 요약할 수 있습니다. 서버는 모든 클라이언트에서 타임스탬프와 함께 입력을 받습니다. 서버는 입력을 처리하고 월드 상태를 업데이트 합니다. 서버는 모든 클라이언트에게 정기적으로 월드 스냅샷을 전송합니다. 클라이언트는 입력을 전송하고 로컬에서 그것을 시뮬레이션 합니다. 클라이언트는 월드를 업데이트 받고 로컬에서 예측한 상태를 서버에서 받은 상태와 동기화 합니다. 다른 엔티티의 과거 상태를 보간합니다. 플레이어의 관점에서 이것은 2가지 중요한 결과를 가져..

[Jetbrains IDE] 자주 쓰는 단축키(Shortcuts) 모음 (mac)

Mac 유저를 위한 InteliJ, Android Studio, PyCharm등의 Jetbrains의 IDE의 단축키 모음이다. 모두 유용하지만, 특히 숙지하면 좋은 단축키 기능에 * 체크를 해두었다. 기능 단축키 *Editor로 포커스 이동 ESC *자동완성 (Auto Complete) Command + Enter 메서드 오버라이드 (Override/Implement Members) Ctrl + O 인터페이스 구현 (Implement Members) Ctrl + I 커서가 가리키는 부분 Refactor Ctrl + T 커서가 가리키는 부분을 상수로 빼기 Command + Option + C *이름 일괄 변경(클래스, 변수, 기타 등등) Shift + F6 변수 생성 Command + Option + V..

나/이슈 2023.09.29

멀티플레이 게임서버 구현 3편: 엔티티 인터폴레이션

들어가며 이 글은 https://www.gabrielgambetta.com/entity-interpolation.html의 글을 공부하면서 옮긴 것으로, 번역과 의역이 섞여있습니다. 이번에는 동일한 서버에서 다른 플레이어가 컨트롤하는 캐릭터에 대해서 탐구해보겠습니다. 서버 타임 스텝(Server time step) 이전 글에서 서버의 동작은 비교적 간단했습니다. 클라이언트가 주는 입력을 받아서 게임 상태를 업데이트하고 다시 돌려주면 되었죠. 하지만 여러 클라이언트가 연결된 경우, 메인 서버 루프는 다소 달라집니다. 이 시나리오에서는 여러 클라이언트가 동시에, 그리고 빠른 속도로 연이어 입력을 보낼 수 있습니다. 모든 클라이언트에서 입력이 수신될 때마다 게임 월드를 업데이트하고 게임 상태를 브로드캐스트 하..

멀티 플레이 게임서버 구현 2편: 클라이언트측 예측과 서버측 재조정

들어가며 이 글은 https://www.gabrielgambetta.com/client-side-prediction-server-reconciliation.html 글을 공부하면서 옮긴 것으로, 번역과 의역이 섞여있습니다. 이전 글에서는 권위 있는 서버와 입력만 서버로 보내고 서버가 업데이트된 게임 상태를 보낼 때까지 렌더링하는 멍청한 클라이언트를 가진 클라이언트-서버 모델을 알아보았습니다. 그러나 이런 시스템을 그냥 구현하게 되면 사용자 입력과 화면 변경 사이에 지연이 발생하게 됩니다. 예를 들어, 플레이어가 오른쪽 화살표 키를 누르면 캐릭터가 움직이기 시작하기 전에 0.5초 정도의 시간이 걸립니다. 이는 클라이언트 입력이 먼저 서버로 이동하고, 서버가 입력을 처리하고 새로운 상태를 계산하며, 업데이트..

멀티플레이 게임서버 구현 1편: 클라이언트 - 서버 게임 아키텍쳐

들어가며 이 글은 https://www.gabrielgambetta.com/client-server-game-architecture.html 글을 공부하면서 옮긴 것으로, 번역과 의역이 섞여있습니다. 어떤 종류든 게임을 개발하는 것 자체가 어려운 일이지만, 멀티플레이어 게임은 완전히 새로운 문제를 다루어야하는 독특한 어려움이 있습니다. 호흡이 빠른 멀티플레이어 게임의 클라이언트 - 서버 아키텍쳐를 구성하는 방법에 대해서 알아보겠습니다. 부정행위 문제 (The Problem of cheating) 모든 것은 부정행위에서 시작됩니다. 게임 개발자로서, 싱글 플레이 게임에서 플레이어가 부정행위를 행하는지 여부에는 관심을 두지 않습니다. 그러나 멀티 플레이 게임은 다릅니다. 경쟁 게임에서 부정을 저지르는 플레이..

간단하게 살펴보는 HTTP의 진화과정

HTTP/1.0 HTTP/1.0에서는 클라이언트/서버간 각 요청/응답에 대해 새로운 TCP 연결을 생성한다. 그래서 각 요청전에 TCP 및 TLS 핸드셰이크가 완료되어야 했고, 모든 요청에 대기시간 패널티가 발생했다 HTTP/1.1 한번의 TCP 연결을 유지하고자 Keep-alive가 등장했다. 하지만 HTTP/1.1에서는 클라이언트가 한 번에 하나의 HTTP 요청/응답 교환만 허용했으므로 네트워크 계층에서 동시성을 얻는 유일한 방법은 TCP 연결을 병렬로 사용하는 것인데, Pipelining을 통해 여러 요청을 전송했을때, 첫번째 요청에 대한 응답이 지연되면 뒤에 따라오는 모든 응답도 같이 지연되었는데 이를 “Head of line Blocking”이라고 한다. 이는 RFC 2616에서 서버는 반드시 ..

마인크래프트 광물 / 블록 좌표 바이옴 정리

이 글은 2023년 1.20.1 업데이트 기준으로 새로 업데이트 되었습니다! 컴퓨터 마인크래프트에서 F3키를 누르면 X, Y 좌표를 볼 수 있는 화면이 뜹니다. 여기서 두번째 문단을 보시면 현재 플레이어가 위치한 X, Y, Z 좌표를 볼 수 있습니다. 이중에서도 Y는 위아래, 깊이와 높이 즉 고도(Altitude)를 말합니다. 즉 땅으로 파고 들어갈 수록 더욱 낮아지는 수치입니다. v1.20 이후 자원 별 Best Y좌표 자원 추천 Y 좌표 비고 석탄 44, 95, 136 구리 48 청금석 -1 철 15, 232 -8 ~ -56 사이에서 많이 발견됨 금 -16 악지 지형에서는 32 ~ 256 레드스톤 -59 에메랄드 236 (네더) 석영 10 ~ 114 (네더) 금 15 (네더) 고대잔해 13 ~ 17 ..

[안드로이드] 순서보장 무한 페이저(Endless Pager) 만들기 with Jetpack Compose

무한 페이저를 만들때 아주 단순하게 생각하면 이렇게 만들기 쉽다. 하지만 이 경우, 초기 페이지가 내가 원하는 페이지가 되지 않는다. 실제 배열의 0번째부터 시작해야하는데, 실제 배열의 길이가 바뀌면 초기 페이지도 어떻게 될지 보장 할 수 없게 된다. val pageCount = Int.MAX_VALUE val pagerState = rememberPagerState( initialPage = Int.MAX_VALUE / 2 ) 무한 페이저는 한 두번이 아니라 나도 초기 페이지 계산하는 공식을 때려 맞추고는 했는데 빡대가리라 뭔가 수학적으로 설명을 하는게 안되서… 헤메고 있던 차, Jetpack Compose Endless Pager만들기 YouTube 강의 영상에서 아주 좋은 댓글을 발견했다. 이 방법..