Kotlin Koog에 대해 알아보자
·
KOTLIN
1. Koog이란 무엇인가 ?Koog는 JetBrains가 공개한 Kotlin 기반 AI Agent 프레임워크다. KotlinConf 2025에서 소개되었고 Python이나 JavaScript 중심으로 발전해 온 Agent 프레임워크 생태계 안에서 Kotlin/JVM 개발자도 자신이 익숙한 언어와 도구로 Agent를 만들 수 있게 하는 것이다. 공식 문서에서는 Koog를 JVM 생태계를 위해 설계된 오픈소스 AI Agent 프레임워크라고 설명한다. Kotlin 개발자에게는 타입 안정적인 Kotlin DSL을 제공하고, Java 개발자에게는 fluent builder 스타일 API를 제공한다. Kotlin Multiplatform을 활용하면 JVM뿐 아니라 JS, WasmJS, Android, iOS 타겟..
Compose SlotTable Internals
·
Android
SlotTable이란?Jetpack Compose의 UI 트리를 저장하기 위한 자료구조처음 이 정의를 접하면 두 가지 의문이 생긴다. UI 트리가 무엇인지? 그리고 왜 이걸 별도로 저장해야 하는지다. 이에 관해 하나씩 알아보자 Compose 코드를 작성하면 `Compose Compiler`는 이 코드를 해석해 결과적으로 다음과 같은 계층 구조를 만들어낸다.Column { Text("안녕") Row { Text("페토") }}// UI TreeColumn├── Text("안녕")└── Row └── Text("페토")Compose는 상태가 바뀌면 해당 컴포저블을 다시 실행해 화면을 업데이트하며 이것을 리컴포지션(Recomposition)이라 한다. var count by ..
2026 상반기 회고 : 번아웃
·
카테고리 없음
올해 들어 첫 회고글을 언제 작성할지 참 고민이 많았다. 사실 회고글을 쓸 만큼 커다란 이벤트나 깨달음이 있어야 쓰게 되는데 너무나도 차가운 취업 시장으로 인해 겪은 여러 번의 좌절로 인해 글을 쓸 마음이 잘 들지 않았다. 인생 첫 번아웃작년 12월부터 시작해 어느덧 5개월 차에 접어든 취준으로 인해 정신적으로, 신체적으로 너무나 힘든 시간을 보내고 있다. 개발을 시작한 이례로 5년 만에 처음 번아웃이 온 것 같은데, 요즘 들어 무기력증을 너무나 크게 느끼고 있기 때문이다. 나는 아무것도 하지 않고 휴식을 취할 때 오히려 불안함을 느낀다. 밤을 새워 코딩할 때 즐겁고 새로운 문제를 마주할 때 희열을 느낀다. 우테코가 끝나자마자 Yapp을 한 것도 단 한순간이라도 쉬면 안 된다고 생각했기 때문이다. 하지..
Compose Internals : 1. Composable 함수들(Composable functions)
·
Android
Jetpack Compose를 사용해 UI를 그릴 때 우린 당연한 것처럼 @Composable을 사용해 왔다. 하지만 @Composable 어노테이션이 정확히 어떤 원리로 화면을 그리며, 일반 함수와는 어떤 차이가 있는지 알지 못한다. 이 글에선 @Composable 어노테이션이 함수에 어떤 특성을 부여하는지, Compose Runtime이 이 특성을 어떻게 활용하는지를 하나씩 살펴볼 것이다.Composable 함수의 의미Composable 함수는 실행 시 자신의 정보를 메모리 속 트리에 노드로 기록하는데 이를 Compose 관용어로 "방출(emit)"이라고 한다. @Composablefun Greeting(name: String) { Text(text = "Hello, $name!")}위 함수가 ..
ART(Android Runtime)와 Baseline Profile 기초
·
Android
서론처음 설치한 앱은 실행하면서 코드를 그때그때 컴파일하기 때문에 처음 몇 번은 느리고 쓸수록 빨라진다. Baseline Profile을 사용하면 중요한 코드를 첫 실행 전에 미리 번역해 두므로 설치 직후부터 빠른 성능을 낼 수 있는데, Baseline Profile의 원리를 이해하기 위해 기초적인 개념부터 시작해 하나씩 이해해 보겠다.안드로이드 앱이 실행되기까지의 과정컴파일이란?컴파일이란 사람이 이해하는 고수준 언어(e.g kotlin, java...)를 컴퓨터가 이해할 수 있는 0과 1로 이루어진 저수준 언어(기계어)로 번역하는 과정을 말한다. 코틀린으로 작성한 코드가 스마트폰에서 실행되려면 총 3단계를 거친다.1단계 : Kotlinc Compile개발자가 작성한 코틀린 코드(.kt) 파일은 컴퓨터가..
Android Bitmap과 메모리 최적화
·
Android
픽셀픽셀(Pixel)은 Picture Element의 줄임말로, 디지털 이미지를 구성하는 최소 단위다. 각 픽셀은 빨강(R), 초록(G), 파랑(B), 투명도(A, Alpha) 네 가지 채널로 표현되며 각 채널은 0~255 범위의 값을 1byte로 저장한다. 따라서 ARGB_8888 포맷 기준으로 픽셀 하나는 4byte를 차지한다. ARGB_8888이 포맷에 대해서는 추후 자세히 다루겠다.색상RedGreenBlueAlpha빨강색25500255파란색00255255흰색255255255255투명0000비트맵비트맵(Bitmap)은 이 픽셀들이 압축 없이 메모리에 펼쳐진 형태다. JPEG, PNG 같은 이미지 파일은 압축된 상태로 저장되지만 화면에 렌더링 하기 위해서는 반드시 Bitmap으로 디코딩해야 한다. 때..
Android ExifInterface를 활용해 촬영한 사진이 회전하는 문제 해결하기
·
Android
현재 개발 중인 앱에서 사진을 촬영하고 서버에 업로드하는 과정에서 사진이 회전되는 문제가 발생했다. 함께 개발 중인 페어께서 이 문제를 발견하셨고 "회전 메타 데이터 활용해서 사진 안 돌아가게 수정해 주세요"라는 요구 사항을 전달받았다. 이와 관련된 내용을 조사하던 중 Exif 태그라는 것의 존재를 알게 되었고 이를 활용해 문제를 해결한 방법을 소개하고자 한다.기존 코드촬영된 이미지를 서버에 업로드하기 위해 Uri 형태의 이미지를 ByteArray로 변환하는 방식을 사용했다. UI Layer에서 사용의 편의를 위해 Context의 확장함수로 선언했으며 이 함수는 Android 시스템이 제공하는 Uri를 실제 이미지 데이터로 읽어 들인 뒤 ByteArray로 압축 변환하여 반환한다. 동작 과정은 다음과 같..
Compose 디자인 시스템 설계하기
·
Android
서론디자이너와 협업 시 가장 중요한 것은 디자이너가 의도한 디자인을 정확하게 구현하는 것이다. 특정 텍스트가 어떤 폰트를 사용해야 하는지, 글자 크기는 얼마인지, 자간과 행간은 어떻게 적용되어야 하는지까지 세세하게 정해져 있다. 같은 스타일의 텍스트를 구현하면서도 매번 폰트나 크기, 행간이나 자간을 다시 설정해야 하고 화면이 많아질수록 이러한 작업은 반복되어 개발 생산성이 점점 저해된다. 이러한 불편함을 줄이기 위해 디자이너가 설계한 디자인을 기준으로 재사용할 수 있는 시스템을 만드는 것이 바로 디자인 시스템이다. 디자인 시스템을 도입하면 디자이너의 요구사항을 일관된 방식으로 반영할 수 있고 이미 정의된 시스템을 활용해 보다 안정적으로 화면을 구현할 수 있다. 오늘은 실제 프로젝트에서 사용한 디자인 ..