본문 바로가기

전체 글17

GitHub Actions Self-hosted Runner 서비스 시작이 안될 때 ⏰ 상황GitHub Actions에서 Self-hosted Runner를 설정해 사용하는 도중, Runner가 정상적으로 설치되어 있고 PC도 켜져 있음에도 불구하고 Runner 상태가 오프라인으로 뜨고, 서비스가 자동으로 꺼지는 현상이 발생했습니다.🚨 문제 상황 요약PC는 켜져 있고 Runner 서비스도 설치되어 있음하지만 GitHub에서 Runner가 "Offline" 상태로 표시됨서비스를 수동으로 시작해도 몇 초 만에 자동으로 중지됨[2025-07-09 17:52:15Z INFO BrokerMessageListener] Retriable exception: The token expired on 07/09/2025 17:57:15. Current server time is 07/10/2025 08:.. 2025. 7. 10.
[Unity] 스마트폰 기울기로 오브젝트 이동시키기 📱 Unity에서 스마트폰 기울기로 오브젝트 이동시키기Unity를 활용해 스마트폰의 기울어진 방향에 따라 오브젝트를 움직이고 싶을 때, 어떤 센서를 사용해야 할까요? 이 글에서는 가속도 센서(Input.acceleration, Accelerometer)와 자이로 센서(Input.gyro)의 차이를 정리하고, 기울기 기반 오브젝트 이동 예제까지 구버전 InputManager와 신버전 InputSystem을 기준으로 각각 소개합니다.🔍 센서 비교: 가속도 vs 자이로항목가속도 센서자이로 센서측정 대상가속도 (중력 포함)회전 속도 (각속도)멈춰 있을 때기울어진 상태 유지됨값이 0에 수렴기울기 감지가능 (중력 벡터 활용)❌ 직접 감지는 불가사용 목적캐릭터 이동, 드리프트 감지 등카메라 회전, VR/AR 추적.. 2025. 7. 3.
[AI]💠Gemini CLI 설치 가이드 Gemini CLI (Command Line Interface)를 사용하면 터미널에서 직접 Google의 강력한 Gemini AI 모델을 활용할 수 있습니다. 복잡한 API 연동 없이 빠르게 Gemini 모델을 테스트하고 개발에 적용해보세요.1️⃣ 사전 준비: Node.js 설치Gemini CLI는 Node.js 18 이상이 필요합니다.Node.js 버전 확인node -vNode.js 설치 또는 업데이트https://nodejs.org/en/download 에서 운영체제에 맞는 설치 파일을 다운로드하여 설치합니다.2️⃣ Gemini CLI 설치 및 실행방법 1: npx로 즉시 실행 (추천)npx https://github.com/google-gemini/gemini-cli방법 2: npm으로 전역 설치n.. 2025. 7. 3.
[Unity] 리플렉션(Reflection)이 null을 반환할 때? MonoBehaviour를 의심해보자! 🧩 문제 상황토이 카드게임 프로젝트를 진행하면서, 유닛마다 고유한 스킬을 가지는 시스템을 구현하고 있었습니다.스킬 정보를 관리하는 SkillManager를 싱글톤으로 만들고, 다양한 스킬 클래스들의 인스턴스를 Dictionary에 저장하여 참조하는 방식으로 설계했죠.그런데 스킬의 수가 많아지면서, 이를 매번 수동으로 등록하는 대신 리플렉션(Reflection)을 이용해 런타임 시 자동으로 불러오는 구조로 전환하려고 했습니다.하지만 문제 발생!❗ 리플렉션 결과가 null?!Type.GetType()으로 타입을 가져오고, Activator.CreateInstance()로 인스턴스를 생성했지만결과가 null로 나왔습니다.디버깅해보니 타입 정보는 잘 들어오는데, 인스턴스 생성이 되지 않고 있었던 겁니다.🔍 .. 2023. 11. 6.
[C#] 프로퍼티 (Property) get, set 📚 목차프로퍼티란?get, set 접근자프로퍼티에 접근법(사용법)🔍 프로퍼티란?C#에서 클래스 내부의 필드를 외부에 안전하게 노출하기 위한 방법 중 하나가 바로 프로퍼티(Property)입니다.class Player{ private int hp;}위처럼 private 필드는 외부 접근이 불가능하므로 보통 다음과 같이 메소드를 통해 접근합니다.class Player{ private int hp; public int GetHp() { return hp; } public void SetHp(int hp) { this.hp = hp; }}하지만 필드가 많아질수록 코드가 복잡해지고 가독성이 떨어지게 됩니다. 이 문제를 해결하기 위해 C#에서는 프로퍼티 문법을 제공합니다.class Play.. 2023. 8. 30.
[C#] 선형 자료구조 기초 목차 선형 자료구조와 비선형 자료구조 배열의 장단점 및 선언 동적 배열의 장단점 및 선언 연결 리스트의 장단점 및 선언 선형 자료구조와 비선형 자료구조 선형 자료구조란? 자료를 순차적으로 나열한 형태로 대표적으로 다음과 같은 자료구조 등이 있다. 배열 연결 리스트 스택 / 큐 비선형 자료 구조란? 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태로 대표적으로 다음과 같은 자료구조 등이 있다. 트리 그래프 배열의 장단점 및 선언 장점 연속된 공간을 사용 단점 자료의 추가/축소가 불가 public int[] data = new int[5] 동적 배열의 장단점 및 선언 장점 자료의 개수를 유동적으로 변경 가능 - 충분한 공간 할당 필요 연속된 공간을 사용 단점 중간에서 자료의 삽입/삭제가 발생할 경우 관련된 .. 2023. 8. 24.
[C#] 인터페이스 (Interface) 목차 인터페이스란? 인터페이스를 사용하는 이유 인터페이스의 특징 인터페이스 구현/사용법 인터페이스란? 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템이라고 한다. - Wikipedia 위 정의를 개발자의 입장에서 해석을 해보면 개발자가 '인스턴스를 쉽게 동작시키는데 도움을 주는 시스템' 이라고 생각하면 될 것 같다. 인터페이스를 사용하는 이유 언어에 따라 다르지만 C#의 경우, 클래스를 통한 다중 상속을 지원하지 않는다. 이유는 다음과 같다. abstract class Animal { public abstract void Cry(); } class Dog : Animal { public override void Cry() { Console.WriteLine("멍멍"); } } class Cat : .. 2023. 8. 24.
[C#] 일반화 (Generic) 코드를 작성하다 보면 다음과 같이 타입은 다르지만 형식이 같은 경우를 다루게 된다. class IntArray { int[] arr = new int[5]; } class FloatArray { float[] arr = new float[5]; } 하지만 타입이 많아질 경우 코드가 비효율적이게 되는데, 이러한 경우에 다음과 같이 타입을 일반화(Generic)하면 된다. class MyArray { T[] arr = new T[5]; } public void Swap(ref T a, ref T b) { T temp; temp = a; a = b; b = temp; } 위와 같이 일반화를 위해서는 클래스명 또는 메소드명 우측에 와 같이 형식 인수를 추가해주면 된다. 제네릭 클래스/메소드를 호출할 때에는 형식.. 2023. 8. 23.
싱글톤(Singleton) 패턴 싱글톤 패턴이란? 객체의 인스턴스가 오직 하나만 생성되는 패턴 장점 최초 한 번만 고정된 메모리 영역을 할당 받고 사용하기 때문에 메모리가 낭비되지 않는다 다른 클래스 간에 데이터 공유가 쉬워진다 단점 여러 클래스의 인스턴스에서 데이터에 동시에 접근하게 되면 동시성 문제가 발생할 수 있다 자원이 공유되기 때문에 매번 인스턴스의 상태를 초기화하지 않으면 테스트를 온전하게 수행할 수 없다 자식 클래스를 만들 수 없다 Unity에서의 싱글톤 패턴 구현 public class GameManager : MonoBehaviour { static GameManager s_Instance; public static GameManager Instance { get { Init(); return s_instance } }.. 2023. 8. 23.
Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 강의 노트 인프런에서 제공되는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 강의를 수강하며 복습차원에서 정리한 내용이며 일부 제외된 내용들이 있을 수 있습니다. 자세한 내용이 궁금하신 분들은 강의를 수강해보시기 바랍니다. Part 1 : C# 프로그래밍 입문 일반화 (Generic) 인터페이스 (Interface) 프로퍼티 (Property) Part 2 : 자료구조와 알고리즘 Big-O표기법 [C#] 선형 자료구조 기초 (tistory.com) Part 3 : 유니티 엔진 Singleton 패턴 Part 4 : 게임 서버 Part 5 : 데이터베이스 Part 6 : 웹 서버 2023. 8. 22.
빅오(Big-O) 표기법 알고리즘의 효율을 측정하기 위해 두 알고리즘 A와 B를 비교하는 경우, 두 알고리즘 사이의 실행 속도가 애매모호함 운영체제, 하드웨어 등 실행 환경에 의존적임 입력이 적은 구간과 많은 구간에서의 성능 차이가 확연 위와 같은 경우들에 대한 대안으로 Big-O 표기법을 사용한다. O(1) O(Log N) O(N) O(N Log N) O(N2) O(2N) O(N!) Big-O 표기법 수행되는 연산의 횟수를 '대략적으로' 판단 (ex. 1, N, N2, ...) public int Add(int n) { return n + n; } 위의 코드에서는 n + n의 연산이 한 번 이루어지기 때문에 연산 횟수는 1이다. public int Add(int n) { int sum = 0; for(int i = 0; i <.. 2023. 8. 22.
Level2 - 더 맵게 [C++] ▶ 문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. ▶ 제한 사항 sc.. 2022. 3. 30.
[자료구조 / C++] 우선순위 큐 (Priority Queue)란? ▶ 우선순위 큐(Priority Queue)란? 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조 -> 데이터를 우선순위에 따라 처리하고 싶을 경우 사용 자료구조 추출 데이터 스택(Stack) 가장 마지막에 삽입된 데이터 큐(Queue) 가장 먼저 삽입된 데이터 우선순위 큐(Priority Queue) 가장 우선순위가 높은 데이터 ▶ 구현 방법 1. 리스트를 이용하여 구현 2. 힙(Heap)을 이용하여 구현 구현 방법 삽입 시간 삭제 시간 리스트 O(1) O(N) 힙(Heap) O(logN) O(logN) N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업만으로도 정렬이 수행됨 - 이 경우의 시간 복잡도는 O(NlogN) ▶ 기본 메소드 ˙push() : 우선순위 큐에 원소 추가 ˙pop() : 우.. 2022. 3. 29.
자료구조(Data Structure) 란? 프로그래머스의 코딩테스트 문제들을 풀이하고, 해석하기 위해서는 자료구조에 대한 이해가 기본이 되어야 한다고 판단하여 쉽게 찾아볼 수 있도록 본인 블로그에 정리하게 됨. 각각의 자료구조에 대한 자세한 내용은 나눠서 자세하게 공부할 예정 자료구조란? 저장된 데이터에 대한 작업을 보다 효율적으로 수행할 수 있는 방식으로, 컴퓨터에 데이터를 구성하고 저장하는 특수한 수단. 자료구조는 컴퓨터 과학 및 소프트웨어 엔지니어링 분야에서 광범위하고 다양한 사용 범위를 가지고 있음. 1. 배열(Arrays) 배열은 동일한 데이터 형식의 항목을 보유할 수 있는 고정 크기의 구조. 정수배열, 부동점 번호 배열, 문자열 배열 또는 배열의 배열(ex. 2차원 배열)일 수 있음. 배열은 인덱싱 되므로 임의의 액세스가 가능. 2. .. 2022. 3. 23.
[JAVA] 이클립스 main함수 인자값 입력하기 이클립스에서 자바 main함수에 인자값을 입력하는 방법에 대해 알게되어 포스팅합니다. 우선 이클립스를 실행한 뒤, main함수의 인자값인 args를 출력하는 클래스를 생성하고, 상단 메뉴바에 보이는 Run을 눌러준 뒤, Run Configurations...를 들어가줍니다. Run Configurations에 들어간 뒤, 좌측에서 본인이 생성한 프로젝트를 선택하고, 상단 메뉴에 보이는 Arguments에 들어가 Program arguments: 입력란에 인자값으로 입력할 문자열을 입력해줍니다. 마지막으로 하단의 Run을 클릭하면 하단의 콘솔창에서 Program arguments: 란에 입력했던 문자열이 그대로 출력되는 것을 확인할 수 있습니다. 항상 비주얼 스튜디오만 사용하다 이클립스를 접하니 어려운 부.. 2022. 3. 21.
[C++] sort algorithm 설명 및 사용법 sort 알고리즘이란? sort 알고리즘은 C++STL에서 제공해주는 알고리즘으로, 인자를 오름차순, 내림차순 정렬할 때에 편리하게 정렬을 가능하게 해준다 ▶ 헤더파일에 속해있음. ▶ 원형은 아래와 같음. template void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred) ▶ sort(First, Last, Order) 형태로, [First, Last)의 범위를 정렬해줌. ▶ 3번째 인자(Order)를 주지 않을 경우, Default로 오름차순 정렬. ▶ sort(First, Last, greater()); -> 내림차순 sort(First, Last, less()); -> 오름차순 sort(First, Last, 사용자지정함수); -> 지정 조.. 2022. 3. 14.
Level1 - 약수의 개수와 덧셈 [C++] ▶ 문제 설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. ▶ 제한사항 1 ≤ left ≤ right ≤ 1,000 ▶ 입출력 예 left right result 13 17 43 24 27 52 ▶ 풀이 코드 #include #include using namespace std; int solution(int left, int right) { int answer = 0; int count = 0; //약수 개수 저장할 변수 for(int i = left; i 2022. 3. 13.
반응형