전체 글
-
Unity 스크립팅 백엔드 : Mono(JIT) vs IL2CPP(AOT), 무엇을 써야 할까?카테고리 없음 2026. 5. 6. 22:40
안녕하세요. 최근에 빌드 설정을 Mono에서 IL2CPP로 바꿨더니 게임 퍼포먼스가 개선된 경험이 있었습니다. 대부분의 상황에서 잘 작동했는데 무조건 IL2CPP를 선택해야 할까요? 이를 분석하기 위해 JIT과 AOT 동작 방식을 발펴보고, IL2CPP가 실제로 퍼포먼스 이점을 만들어내는 원인을 코드 레벨에서 파악해보려고 합니다. 1. JIT(Just-In-Time) Mono 백엔드JIT 컴파일러는 C# 코드를 먼저 IL(중간 언어, Intermediate Language)로 컴파일한 뒤, 프로그램 실행 중 필요한 IL 코드를 네이티브 코드로 변환합니다. 즉, 실행 시점에 필요한 코드만 그때그때 컴파일하는 방식입니다.장점빌드 시간이 빠릅니다 -> 잦은 빌드, 빠른 결과 생성에 유리동적 코드 생성과 리플..
-
유니티를 사용할수록 점점 느려지는 이유Unity 2026. 4. 19. 05:38
유니티를 오랫동안 이용하면서 장시간 사용했을 때 점점 느려지거나 게임을 켜둔 채 방치하면 프로그램이 강제종료되는 현상을 몇번 겪은 적이 있습니다. 그때는 컴퓨터가 안좋아서 그런거겠지라며 프로그램을 재시작하는 방법으로 해결하며 넘겨왔지만 지금 다시 생각해보면 그때 당시의 원인을 알 수 있을 것 같아 끄적여봅니다. 물론 앞서 말한 사건의 원인은 다양하게 있겠지만 그중 가장 흔한 메모리 이슈에 대해 다뤄보려고 합니다. 1. 개념설명1.1 가비지 컬렉터본래 메모리를 할당하면 수동으로 해제해줘야 하지만 C#을 포함한 몇몇 언어들은 이것을 자동으로 해주는데 가비지 컬렉터라고 이름을 칭합니다. 메모리를 자동으로 관리해주기 때문에 매우 편리하다는 장점이 있지만 언제 해지되는지 타이밍을 알 수 없다는 점과 GC가 메모리..
-
무수히 많은 충돌체를 처리하는 방법Unity 2026. 4. 6. 19:46
탄막(Danmaku) 게임을 만들다 보면 누구나 한 번쯤 성능 문제에 직면하게 됩니다. 단순히 Instantiate로 클론을 생성하고 Rigidbody2D와 Collider2D를 붙여 구현하면, 탄환이 100개일 때는 괜찮지만 1,000~2,000개를 넘어가는 순간 프레임 드랍이 눈에 띄게 발생합니다.최근 저 또한 이 문제에 직면했고, 프로파일링을 통해 원인을 분석하며 해결해 나간 과정을 공유하고자 합니다. 유니티 엔진으로 탄막게임을 만들면 성능 이슈를 무시할 수 없습니다. 단순히 프리팹을 클로닝하고 Rigidbody와 Collider 컴포넌트로 충돌을 구현한다면, 적지 않은 개수일 때 눈에 띄는 프레임 드랍이 발생합니다. 최근에 저도 이러한 이슈를 직면했고 해결하기 위해 고민했던 흔적들을 적어보고자 합..
-
정말 사소해 보이는 시간초과의 원인C++ 2026. 3. 11. 01:49
https://www.acmicpc.net/problem/2580 저는 늘상 그렇듯 코딩테스트 문제를 풀고 있었습니다. 하지만 전혀 납득이 되지 않은 이유로 시간초과가 발생했는데 해당 코드는 아래와 같습니다. #include #include #include #include #include #include using namespace std;typedef pair Point;int arr[9][9];vector zeroList;unordered_set GetValidNums(Point p){ unordered_set hash; for (int x = 0; x hash = GetValidNums(p); for (int i = 1; i > arr[y][x]; if (arr..
-
Composite 패턴의 편리함 속에 숨겨진 함정설계에 대한 고찰 2026. 2. 10. 00:34
public class A{ virtual void Handle(){}}public class Composite_A : A{ A[] a_list; override void Handle() { foreach(var a in a_list) { a.Handle(); } }} Composite패턴은 기존 여러 기능들을 합쳐 하나의 기능처럼 사용할 수 있게 해줍니다. 예를들어 공격과 방어가 있다면, 공격과 방어를 동시에 수행할 수도 있죠. 기능 재사용과 조립에 용이하다는 점에서 매우 뛰어나다고 생각하지만 그만큼 단점이 존재합니다. Composite 입장에서 A의 기능이 정확히 무엇인지 알 수 없고, 깊이를 가늠할 수 없습니다. 사용자 입장에서 이..
-
Inbound Port, Outbound Port설계에 대한 고찰 2026. 1. 22. 23:55
최근에 회사에서 도메인 관련 지식을 배우는 중인데 그중 나도 쓰고있었지만 정확한 개념은 모르고있던걸 글로 정리해보려고 한다. Inbound PortClient에서 Domain을 참조 및 기능을 호출하기 위해 직접적인 의존성이 생길 경우, 인터페이스를 사용해서 그것을 끊어낼 수 있음. 이 설계의 이점은, 도메인이 정확히 무엇인지 Client가 알 필요가 없으며, 직접적인 의존성이 없어졌기 때문에 로직 수정에 용이함. public interface IGameService{ void GameStart();} Outbound Port도메인에서 기능을 수행하기 위한 외부API 등을 호출하기 위해 인터페이스를 호출하는 구조. 위와 마찬가지로 직접적인 의존성 제거, 도메인에는 순수 로직만 남게 됨. public i..
-
최근에 이직을 성공했습니다.개뻘글 2025. 11. 30. 18:04
원래 다니고 있던 회사를 그만두고 6개월이라는 공백기간과 함께 드디어 이직에 성공했고 현재는 재직 3주차인 날입니다. 이 글을 쓰는 목적은 요새 개발자가 취업난이라는 소리가 많이 들리는 상황이고 내가 어떻게 그것을 헤쳐나갔는지 풀어보고자 합니다. 참고로 이력서나, 포트폴리오에 채울 내용에 대해 설명하는 글은 아니고 그 이외의 것에 대해 제가 직접 경험하고 연구한 것에 대해 느낀걸 작성하는 글입니다. 먼저 요약하자면 이렇습니다, "전략적으로 취업을 공략하자." 면접제의를 받았다는 것은 이미 절반 이상 온 것입니다. 왜냐하면 회사에서 그 사람이 마음에 들었기 때문에 면접 가서 첫인상만 잘 보여주면 되죠. 하지만 저는 아무런 연락을 받지 못했습니다. "전에 작성했던 포트폴리오는 내용적으로 문제가 없는데?" 정..