본문 바로가기

til79

@Keep 1/2 Java 에서 @Keep 어노테이션은 주로 빌드 최적화 과정에서 특정 코드를 삭제하거나 이름을 바꾸지 말 것 을 지시하는 마커이다. 용도Java 빌드 도구인 ProGuard 나 R8 은, 앱 용량을 줄이기 위해 사용하지 않는 코드를 삭제(Shrinking) 하고, 보안을 위해 이름을 난독화(Obfuscation) 한다. 하지만, 이런 경우들에서는 최적화 도구가 코드를 미사용으로 잘못 판단할 수 있는데..이때 @Keep 을 붙이면 해당 요소는 최적화 대상에서 제외되어 안전하게 유지된다.리플렉션(Reflection) : 런타임에 클래스나 메서드 이름을 문자열로 찾아 호출하는 경우.JNI(Native 메서드) : C/C++ 등 네이티브 코드에서 Java 메서드를 호출하는 경우.JSON 라이브러리 : .. 2026. 1. 12.
DeepLink 12/31 DeepLink딥링크는 사용자를 모바일 앱 내의 특정 페이지나, 원하는 페이지로 직접 이동 시키는 기술이다. 특정 링크를 클릭했을 때나, 링크를 클릭하지 않았더라도 뭔가의 앱으로 이동하는 듯한 기능을 일상생활에서도 충분히 느껴본 적 있을 것이다.예를 들어보자면, 인터넷을 돌아다니다 보면 흔하게 납치(?) 당하는 쿠팡이라던가, 많은 기능들로 바로 유도되는 토스라던가.. 일련의 동작으로 앱만 켜지는 것이 아닌, 특정한 상품 링크 혹은 기능으로 바로 이동되는 것을 자주 겪었을 것인데, 그게 바로 이 DeepLink 라고 할 수 있다.현재 프로젝트 내의 기능으로도 넣어야 한다는 Tencent 측의 요청이 있어 작업을 시작했었고, 현재는 마무리했다.구현 방법에 대해 일일히 설명하는 것도 나쁘진 않지만.. 2026. 1. 10.
개발 반성회 (async / mvc) 03/04 또 한번 돌아온 반성회.. 이때도 다같이 회의실에 모여 개발하며 신경써야 하는 것들을 체크 Async 의 문제이건 무슨 문제였나면... async => await => promise 로 이어지는 구조에서, await 걸어놓은 상태로 객체가 없어진다거나 하는 경우, 그 이후 부분들이 전부 대상을 찾지 못해 에러가 발생하는 문제였다.심지어 await 가 돌아오기까지 어떻게든 돌아가는 것 처럼 보이는게 더 문제라서.. JS 엔진에는 존재한다고 나타나는 상태여도, 또 cocos 에는 이미 지워진 상태이기도 하고 디버깅을 어렵게 만드는 문제도 있었다. 이건 또 v8엔진의 가비지 컬렉터 문제이긴 한데.. 아무튼 총체적 난국이 발생한다는 뜻.그래서, await 이후로는 항상 async 걸어놓았던 것들이 .. 2025. 12. 30.
이벤트 루프 03/04 JavaScript 의 Event Loop 는, 단일 스레드 방식인 JS 가 비동기 작업을 수행하고 동시성을 지원할 수 있게 해주는 핵심 메커니즘이다. 'Call Stack 이 비었을 때만 Queue 의 작업을 가져와 실행한다' 라는 단순하지만 확실한 규칙의 반복으로, 단일 스레드 구조의 한계를 극복하는 똑똑한 방식.구성 요소로는,Call Stack : 현재 실행 중인 함수들이 쌓이는 곳. LIFO 방식으로 작동.Task Queue : 비동기 작업이 완료된 후 실행될 콜백 함수들이 대기하는 곳.Event Loop : Call Stack 이 비어 있는지 확인하고, 비어 있다면 Callback Queue 의 작업을 Stack 으로 옮겨 실행한다.큐는 크게 두 종류로 나뉘며, 우선 순위가 다르다... 2025. 12. 29.
SHA-256 서명 12/19 해시 함수는 수많은 시스템에서 보안과 데이터 무결성을 지 키기 위해 쓰이는 중요한 기술이다. 그 중, SHA-256 은 가장 널리 사용되는 해시 알고리즘 중 하나로... 단방향 알고리즘이라고도 한다. 더 발전된 다른 기술로는 양방향 알고리즘으로, AES-256 이라는 것도 있는 것 같은데.. 그건 다음 기회에 SHA-256SHA-256 은 Secure Hash Algorithm 256-bit 의 약자로, 입력값을 256비트(32바이트) 길이의 해시값으로 바꿔주는 함수이다.작동 원리는,입력값을 byte 로 변환하고(UTF-8 인코딩 등) >> 512bit 단위로 쪼개고, 부족한 부분은 0으로 패딩한 다음 >> 64번의 round 를 거쳐 내부 상태를 섞고 >> 최종적으로 256bit 의 해시값을.. 2025. 12. 24.
TypeScript 와 Enum 문제 03/26 Enum 은 보통, 자주 사용해야 할 관련된 상수들을 정의해서 모아놓을 수 있기 때문에, 편리하게 종종 사용하게 된다. 다시 말해, 어떤 변수가 가질 수 있는 값의 후보군을 미리 정해두고 그 안에서만 선택하게 만들기 때문에, 관리가 편하고 휴먼에러를 줄일 수 있는 방법으로서 유용하다.그런데 이런 Enum 도, TypeScript 에서 사용할 때는 문제가 생길 수 있다는데... Tree - shaking 불가능TS 는 enum 을 컴파일할 때 즉시 실행 함수(IIFE) 형태의 JavaScript 코드를 생성한다. 문제는, 이런 코드는 정적 분석이 어려워서 번들러(Webpack, Rollup 등) 가 사용하지 않는 코드를 제거하지 못하고 최종 번들에 포함시킨다는 것.너무 본론만 설명해서 (두괄식의.. 2025. 12. 23.