프로그래밍 381

[무료] 마인크래프트 서버 쉽게 열고 관리하기 - 초급편 (자바, 베드락)

⚠️ 들어가며 이글은 GCP로 마인크래프트 서버여는법 Step 6부터 시작합니다. 컴퓨터에 관한 지식이 거의 전무해도 따라할 수 있는 정도를 목표로합니다. 🐳 1. Docker 설치하기 Docker는 쉽게 말하면 컴퓨터안에 가상으로 컴퓨터를 띄울 수 있도록 해주는 프로그램입니다. 우리는 Docker로 마인크래프트 서버를 띄울 것입니다. 무슨말인지 모르셔도 상관없습니다! 앞선 글을 따라 Step6까지 진행하셨다면 터미널을 띄운 상태일 것입니다. * Ubuntu OS를 기준으로 합니다. sudo apt-get update && \ sudo apt-get install ca-certificates curl gnupg lsb-release -y && \ sudo mkdir -p /etc/apt/keyrings ..

[Kotlin] CompletableDeferred의 개념과 활용

Promise가 그리울때 이벤트 기반으로 통신하는 프로토콜을 구현중에, JS의 Promise나 Dart의 Completer와 비슷한 역할을 하는 Kotlin 친구가 없을까하다 찾게되었다. 완벽한 대체재다! CompletableDeferred는 public function을 이용해 완료하거나 취소할 수 있는 Deferred이다. 이를 활용하면 내가 원하는 시점까지 기다렸다가 값을 받을 수 있다. 그럼 SuspendableCoroutine이랑 뭐가 다르냐? 라는 생각이 들 수 있다. SuspentableCoroutine은 해당 블록 안에서만 complete/cancel을 제어할 수 있지만, CompletableDeferred는 그런 제약이 없다. CompletableDeferred : Functions ab..

Kotlin coroutine : async vs launch 차이

async vs launch async 결과를 반환하는 코루틴을 시작하는데 사용 예외(Exception)가 발생할 경우 결과를 반환에 포함한다. 결과 또는 예외를 포함하는 Deferred를 반환 launch 결과를 반환하지 않는 코루틴을 시작하는데 사용 본인 혹은 자신 코루틴의 실행을 취소하기위해 사용할 수 있는 Job을 반환 Job: Fire and forget Job Job은 생성될때 기본적으로 자동 시작된다. 하지만, 이를 자동시작 되지 않게하려면 CoroutineStart.LAZY를 사용할 수 있다. Job join() vs start() join: Job을 완료할때까지 대기한다. start: 애플리케이션이 Job이 완료될때까지 기다리지 않는다. Job의 라이프 사이클 New: 생성됨 Active..

[프로그래밍] 마인크래프트로 알아보는 랜덤이 랜덤이 아닌 이유

컴퓨터의 랜덤 술 먹고, 같이 먹은 사람들의 카드를 부채꼴로 펼치면서 식당 종업원에게 카드를 골라달라고 해본적있는가? 고를 확률은 랜덤이라고 할 수 있을까? 식당 종업원이 좋아하는 디자인 취향, 왼손잡이인지 오른손잡이인지에 따라 결과는 치우쳐질 수 있다. 이까지는 누구나 인지하는 사실이다. “그래! 이건 완전한 랜덤이 아니야!” 계산할 사람을 지목하는데에 네이버 사다리 타기를 이용하기로 했다. 흔히 이렇게 “랜덤성”을 컴퓨터 프로그램에 의존하고는 한다. 뭔가…뭔가 객관적이어 보이니까? 하지만 컴퓨터는 결정론적으로 동작하고, 어떻게 보면 랜덤과는 가장 거리가 멀다. 모든 프로그래밍 언어에는 random()이라는 함수가 있다. 그러면 이들은 어떻게 구현이 된걸까? 만약에 내가 구현한다면 어떻게 랜덤성을 부여..

HTTP ETag에 대해 알아보자

ETag란? ETag란 EntityTag의 줄임말로, 웹 캐시 유효성 검증에 사용된다. 리소스의 특정 버전에대한 고유값이 ETag의 값이되고, 리소스의 내용이 업데이트되면 ETag도 바뀐다. 클라이언트에서 캐싱하고 있는 버전과 서버에서 가지고 있는 버전이 동일하다면 서버는 내용없이 304 Not Modified 라는 상태코드로만 응답을 내려주어 response body에 대한 트래픽을 아낄 수 있다. ETag 작동방식 먼저 HTTP Request를 날려보자. 서버는 ETag와 함께 응답 (상태코드 200)을 내려줄 것이다. 이 요청에 대한 응답의 사이즈는 43.9KB였다. ETag의 검사기 종류에는 약한(Weak)과 강한(Strong)검사가 있는데, 약한 검사를 하는 ETag는 W/로 시작하고, 강한 검..

[Windows] Git Bash에 zsh (Oh-my-zsh) 설치해서 꾸미기

Windows zsh 설치방법 1. https://repo.msys2.org/msys/x86_64/zsh-5.8-5-x86_64.pkg.tar.zst 를 다운받는다. 2. 압축을 해제한다. 해제하면 zsh-5.8-5-x86\_64.pkg.tar파일이 있을텐데, 이것도 압축을 해제한다. 3. 안의 내용물을 C:/Program Files/Git 아래에 붙여넣는다. Git내에도 usr, etc가 있을건데 덮어써준다. 4. Git bash를 켜서 zsh라고 입력한다. 옵션을 잘 읽어보면 몇가지 기초설정에 들어갈 것이고, 이를 마치면 홈 디렉토리에 .zshrc 파일이 생겨났을 것이다. $ zsh 5. git bash가 아직도 모양이 바뀌지 않았다면, 아래 명령어를 쳐주자. $ source ~/.zshrc 6. 그..

LXD와 LXC의 차이

LXD란 무엇인가? 컨테이너 매니저다. LXD 자체는 컨테이너가 아니다. LXC라고하는 Linux Container를 구동할 수 있도록 해준다. 추가적으로, 클러스터링 같은 기능을 지원한다. LXC란 무엇인가? 리눅스 컨테이너. LXC container는 가상머신 같다.(VM-like) Docker 컨테이너는 변경사항이있고, 종료하고 다시 띄우면 변경사항을 잃는다. 반면에, LXC는 가상머신을 재부팅한 것처럼 변경사항이 유지된다.

[lxc] 인스턴스 생성 실패 Failed detecting root disk device: No root device could be found 해결방법

ubuntu@:~$ sudo lxc launch ubuntu:22.04 manager1 Creating manager1 Error: Failed instance creation: Failed creating instance record: Failed initialising instance: Invalid devices: Failed detecting root disk device: No root device could be found lxc 인스턴스 생성시에 No root device could be found 오류가 떴을 경우, profile에 root disk에 대한 storage 설정을 해주어야한다. storage 목록이 만약에 비었다면, $ lxc storage ls +------+--------..

[CI/CD] Firebase Test Labs UI Test 자동화하기

CI/CD Tool로 Bitrise (CLI)를 사용하고 있는데, Workflow에 UI Test 단계를 추가해보려고한다. gn_test Workflow를 살펴보면, git pull 로 프로젝트를 땡겨오고, 이전에 만든 test용 apk를 제거한다. UI Test용 빌드를 생성하고, Firebase Test Lab으로 기기에 테스트 한다. gn_test: steps: - script@1: inputs: - content: "bash $ROOT/scripts/gitpull.sh" - script@1: inputs: - content: "bash $ROOT/scripts/delete_test_apk.sh" - android-build-for-ui-testing@0: inputs: - project_locat..

Android Studio 이전 릴리즈 다운받는 방법

오늘 Dolphin으로 업데이트 했다가 완전 버그로 고생했다. ㅠㅠ 다운그레이드 해보려고 했는데 구글에서 제공하는 Android Studio 다운로드 자료실에는 버전이 몇 개 없었다. https://developer.android.com/studio/archive?hl=ko 1. 버전정보 복사하기 아래 JetBrain 사이트에서 확인하면 모~~~든 Release 리스트가 나온다. 여기에서 다운로드 할 버전 번호를 복사해둔다. https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html#2021 예를들면 Chipmunk Patch 2를 다운받고 싶다면 "2021.2.1.16"을 복사한다. 2. 자료실에서 다운로드 링크 복사 자료..