본문 바로가기

Develop33

[Android] 잡았다 리컴포지션! (Layout Inspector, Compose Compiler Metrics) 터닝에서 4차 프린트가 끝나고 리팩토링을 진행하기로 했다.➡️터닝 레포지토리: https://github.com/teamterning/Terning-Android 어떤 리팩토링을 진행할지 회의를 했는데, 다같이 진행하기 좋은 리팩토링은 "리컴포지션 잡기"라고 생각했다.따라서 각자 구현한 뷰들의 리컴포지션 여부를 파악하고 이를 다양한 방법으로 개선해보기로 했다. 그 해결방법을 간단하게 소개해보고자 한다!위 사진은 지금까지 터닝의 리팩토링 과정을 정리한 표이다.한번 쓰윽 구경하고 가도 좋을 것 같다:)이벤트 파라미터 분리리컴포지션이 발생하는 부분을 파악하기 위해 Layout Insepctor를 활용하였다.Layout Insepctor는 상단 Tools를 클릭하면 바로 확인할 수 있다.그럼 화면에 이벤트가 발.. 2025. 9. 5.
[DroidKaigi] CMP로 iOS 첫 빌드 도전기 (컨트리뷰션) 오늘은 필자의 두 번째 컨트리뷰션 도전기에 대해 작성해보려고 한다. DroidKaigi의 앱 기여가 시작되고 있다는 소식을 접하고, 관심이 생겨서 이슈들을 눈여겨 보고 있었다.기존에 있던 이슈들은 다른 분들이 이미 손을 드셔서, 남은 것 중에 보다가 CMP 환경에서 ContributorsScreen으로 네비게이션하는 이슈를 발견하게 되어 지원하게 되었다! 비교적 간단한 이슈였지만, CMP 구조를 파악하고 iOS를 빌드해보는 의미 있는 경험이었기에 기록해본다. 💡해당 이슈는 아래에서 확인이 가능합니다. 【ComposeMultiplatform】Implement the transition to the ContributorsScreen by leeeyubin · Pull Request #497 · DroidK.. 2025. 9. 1.
[Kalendar] KMP에 Typograpy 적용하기 유어슈 동아리에서 캘린더 라이브러리를 KMP로 만드는 프로젝트를 진행 중이다. KMP의 K와 Calendar를 합쳐서 Kalendar의 이름이 탄생하게 되었다. 이 프로젝트를 진행하게된 목표는 Compose Multiplatform(iOS, Desktop 포함) 환경에서 플랫폼별 의존성 관리 능력을 향상시키고, 배포 과정을 경험해서 실제 오픈소스 프로젝트를 완성하기 위함이다!총 두 달 동안 진행될 예정이며, 각 기능을 스프린트 별로 나누어 진행하고 있다.캘린더 디자인의 경우 유어슈 디자인 팀에 문의하여 디자인을 받았다. Material을 참고문서로 보냈기 때문에 Material과 디자인이 유사하다. 이번에 내가 담당한 부분은 디자인시스템을 구현하는 것이다.KMP 환경에서의 Typograpy 적용 과정을 .. 2025. 8. 18.
[DroidKnights] Retrofit -> Ktor 마이그레이션 (컨트리뷰션) 오늘은 필자의 "첫 컨트리뷰션 도전기"에 대해 적어보고자 한다. 항상 오픈소스에 기여를 하고 싶다는 생각이 있어서 여러 오픈소스의 이슈들을 주의깊게 보고 있었다. 그러다 마침 '국내 최대 규모 안드로이드 컨퍼런스 드로이드나이츠 앱'에서 KMP로 마이그레이션하면서 여러 이슈들이 올라온 것을 보았다. 이미 UI를 다루는 이슈들은 대부분 다른 분들이 하겠다고 하셔서 남아 있는 이슈들 중에 골랐다. Koin으로 마이그레이션 하는 이슈와, Ktor로 마이그레이션 하는 이슈가 중에 고민이 되었다. Koin은 저번에 마이그레이션을 한 경험이 있었기 때문에 이미 알고 있는 이슈보다는 새로운 기술에 도전해보면서 내 스스로도 성장을 하고 싶어 Ktor 마이그레이션 이슈를 고르게 되었다! 💡해당 이슈는 아래에서 확인이 가.. 2025. 5. 28.
[Server] Kotlin SpringBoot 프로젝트에 ktlint 적용하기 이번에 Kotlin으로 Spring Boot를 개발하는 프로젝트에 들어가게 되었다. 이에 Kotlin 관련 코드 컨벤션을 정하면 좋을 것 같다는 이야기가 나왔고 이를 효율적으로 해주는 ktlint 설치를 담당하게 되어 이를 정리해보고자 한다.ktlint ktlint란, Kotlin 코드의 스타일을 자동으로 검사하고 포맷팅해주는 도구이다.이를 통해, 코드를 깔끔하게 유지하고 팀 스타일 가이드를 지킬 수 있다는 장점이 있다. 📍ktlint는 pinterest의 오픈소스를 대부분 사용한다고 한다. GitHub - pinterest/ktlint: An anti-bikeshedding Kotlin linter with built-in formatterAn anti-bikeshedding Kotlin linter.. 2025. 5. 5.
[Server] JPA 개념부터 Spring Data JPA까지 JPA는 스프링부트에서 DB에 접근하는 방법을 알 수 있는 중요한 기술 중 하나이다. 그래서 JPA가 어떤 것인지 기초부터 심화까지 알아보았고 그 내용을 정리하고자 한다. JPAJPA란, Java 객체를 데이터베이스 테이블에 매핑(ORM) 해주는 표준 "인터페이스"이다. 즉, SQL을 직접 쓰지 않아도 DB와 소통할 수 있게 도와주는 도구라고 볼 수 있다.JPA를 구현한 대표적인 오픈소스로는 "Hibernate"가 있다. JPA의 장점은 다음과 같다.JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다. 구현방법구현방법에 대해 알아보기 전, 이해를 위해 전체적인 다이어그.. 2025. 5. 5.
[IT 인프라] Ch4 기본 이론 (큐, 배타적 제어, 상태 저장/비저장) 📚 를 읽고 그 내용을 정리하였습니다 큐'큐(Queue)'는 우리말로 '대기 행렬'이라 표현할 수 있다. 큐(대기 행렬)에서는 줄을 설 때는 가장 마지막에 서고, 처리는 선두부터 순서대로 된다.먼저 들어온 데이터가 먼저 나가는 큐 동작을 FIFO(First In First Out) 방식이라고 한다. 큐는 컴퓨터 세계에서 다양한 곳에 행렬이 만들어진다.CPU 처리를 기다리고 있는 프로세스나 스레드 행렬하드 디스크 등의 저장소 읽기 처리를 기다리고 있는 I/O 요구 행렬네트워크 접속 성립을 기다리고 있는 접속 요구 행렬 이때 CPU를 기다리고 있는 프로세스 행렬을 런큐(Run-Queue)라고 한다.'런큐에 쌓인 프로세스 수를 코어 수로 나누어서 1이라면 문제 없다' 라는 것이 일반적이다. 참고로, C.. 2025. 5. 3.
[Android] FCM 푸시알림 커스텀 구현기 (딥링크 활용) 필자가 속해 있는 프로젝트 에서 FCM 푸시알림 기능을 맡았다. 이에 대해 알아보면서 안드로이드 알림에는 어떤 종류가 있는지, 어떻게 커스텀하면 되는지, 딥링크로 어떻게 화면 이동하는 지 등을 공부했고 이를 기록하고자 한다. FCM 푸시알림그럼 FCM 푸시알림이란?Firebase Cloud Messaging의 약자로, Google 클라우드 메세징 서비스이다. 이를 통해 FCM 토큰으로 사용자를 식별하여 쉽게 푸시알림을 구현할 수 있다. 서버랑 통신할 때는 위와 같은 흐름을 따른다. 정리하면 다음과 같다.1. Firebase에서 토큰을 발급하여 Client에게 보낸다.2. Client는 발급받은 토큰을 Server에게 보낸다.3. Server는 이 토큰을 이용해 Firebase에게 메시지 전송을 요청한다.. 2025. 4. 28.
[AI] Prompt Engineering으로 AI 모델 제어하기 AI가 많은 인기를 끌고 있는 만큼 이를 활용할 수 있는 개발자가 되고 싶어서 AI 스터디에 들어갔다.스터디에서 AI의 Prompt Engineering에 대해 알아보고 이를 통해 AI 모델을 제어하는 과제를 수행하여 그 과정을 기록하고자 한다. Prompt EngineeringPrompt Engineering이란 다양한 애플리케이션과 연구 주제에 언어 모델(LM)을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화하는 분야를 의미한다. 즉, AI 모델을 원하는 형태로 제어하는 것이다. 몇 가지 파라미터의 설정만으로도 AI 모델을 제어할 수 있다.max_tokens: 모델이 생성하는 토큰의 최댓값이다.temperature: 창의성을 제어한다. 낮은 temperature일수록 사실적이고 간결한 응답을.. 2025. 4. 23.
[IT 인프라] Ch3 3계층형 시스템 (웹 데이터, 가상화) 📚 를 읽고 그 내용을 정리하였습니다 3계층형 아키텍처3계층형 아키텍처에 대한 구성요소를 살펴보면 위와 같다.웹 서버, AP 서버, DB 서버로 이루어져 있다.이 세 대의 서버는 스위치를 경유해서 연결돼 있다. 각각의 서버를 확대해서 보면 CPU, 메모리, 디스크, NIC/HBA 같은 하드웨어 부품이 나열돼 있다. 이제부터 OS를 이해하는 데 있어서 필수 개념이라고 할 수 있는 프로세스와 스레드, 커널에 대해 알아보자. 프로세스와 스레드프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS상에서 실행돼서 어느 정도 독립성을 가지고 동작하는 것이다.프로세스와 스레드가 활동하기 위해서는 메모리 공간이 필요하다. 이것은 커널에 의해 메모리상에 확보된다. 프로세스 시작 시에 벌어지는 순서는 다음과 같다.. 2025. 4. 12.
[KMP] Kotest로 알아본 Stub vs Fake (테스트 더블) 📚 책의 가장 마지막 장인 12장에서는 "코루틴 단위 테스트"에 대해 다룬다.이때 테스트 더블에 대해 설명해주면서 그 종류 중 하나인 Stub을 들어주었다. 그러나 책을 읽던 당시의 나는 테스트 코드를 처음 접했기에 Stub을 왜 사용하는지 이해가 되지 않았다. 그러다, KMP 프로젝트에서 kotest를 이용해 테스트 코드를 작성할 기회가 있었는데 기존에 사용한 Mockk 라이브러리는 멀티플랫폼에서 사용이 불가하기에 Stub으로 구현해야만 했었다. 이 과정 덕분에 Stub이 무엇인지 이해가 되었고 그 과정을 설명해보려 한다. 테스트 더블우선 테스트 더블에 대해 먼저 알아보자.테스트 더블이란, 다른 객체와 의존성을 가진 객체를 테스트하기 위해 사용하는 것으로 "객체에 대한 대체물"을 의미한다.위 그림처.. 2025. 3. 22.
[KMP] Kotest로 테스트 코드 멀티플랫폼에 적용하기 Kotest멀티플랫폼인 KMP에서 테스트코드를 작성하기 위해서는 Kotlin에서 제공하는 테스트 프레임워크인 Kotest를 사용해야 한다. Kotest에는 종류가 여러 가지가 있는데 나는 BehaviorSpec을 선택했다.그 이유는 BehaviorSpec은 아래처럼 given - when - then 형식으로 표현이 가능하여 더 체계적으로 작성할 수 있겠다고 생각했기 때문이다.class UiStateTest : BehaviorSpec({ given("테스트 조건 환경이 주어졌을 때") { ... `when`("테스트 대상 행위가 발생하면") { ... then("의도한 결과가 검증될 것이다.") { ... .. 2025. 3. 9.