방대한 문서보다 동작하는 소프트웨어

전체 글 278

[React Native] CLI 프로젝트 생성

npx @react-native-community/cli init MoneyManager✔ Downloading template ✔ Copying template ✔ Processing template ✔ Installing dependencies ✔ Do you want to install CocoaPods now? Needed for running iOS project … yes ✔ Installing Ruby Gems ✔ Installing CocoaPods dependencies (this may take a few minutes) ✔ Initializing Git repository RN 0.71 이상부터는 --template 옵션을 사용하지 않고도 typescript 템플릿으로 제공된다.

개발 2025.09.24

[React Native] Metro Bundler 가이드

Metro Bundler 가이드📦Metro Bundler는 React Native 전용 JavaScript 번들러입니다.여러 개의 JavaScript 파일을 하나로 합쳐서 앱에서 실행할 수 있게 만들어줍니다.🍱 쉬운 비유: Metro는 도시락을 싸는 사람 같아요!여러 반찬(JS 파일들)을 하나의 도시락통(번들)에 예쁘게 담아서,핸드폰(앱)에서 바로 먹을 수 있게 준비해주는 거죠!🔄 Metro의 작동 과정1파일 스캔프로젝트의 모든 JS 파일을 찾습니다2종속성 분석어떤 파일이 어떤 파일을 사용하는지 파악3코드 변환최신 JS를 구형 기기에서도 실행되게 변환4번들 생성모든 코드를 하나의 파일로 합침5앱으로 전송완성된 번들을 디바이스로 전송⚡빠른 리로드코드를 수정하면 즉시 앱에 반영됩니다. Fast Refr..

카테고리 없음 2025.09.04

[React Native] Node.js 가이드

Node.js 가이드🟢Node.js는 JavaScript를 브라우저 밖에서도 실행할 수 있게 해주는 런타임 환경입니다.🏠 쉬운 비유: JavaScript가 집안에서만 살던 애완동물이었다면, Node.js는 그 애완동물을 밖에서도 자유롭게 뛰어다닐 수 있게 해주는 공원 같은 존재예요!🌐Node.js 이전JavaScript = 브라우저 전용• 웹페이지에서만 실행 가능• 서버 개발 불가능• 파일 시스템 접근 불가• 데이터베이스 직접 연결 불가⚡Node.js 이후JavaScript = 어디서든 실행!• 서버 개발 가능• 모바일 앱 개발 가능• 데스크톱 앱 개발 가능• 명령줄 도구 제작 가능🚀빠른 실행 속도Google Chrome의 V8 엔진을 사용해서 매우 빠르게 JavaScript를 실행합니다.🔄비..

카테고리 없음 2025.09.04

[React Native] 개발 도구 가이드

🚀 React Native 개발 도구 가이드📦npmNode Package ManagerJavaScript 패키지를 설치하고 관리하는 기본 도구입니다. Node.js와 함께 자동으로 설치됩니다.npm install react-nativenpm start⚡npxNode Package eXecute패키지를 설치하지 않고 일회성으로 실행할 수 있게 해주는 도구입니다. npm 5.2+ 버전에 포함됩니다.npx react-native init MyAppnpx expo start🧶YarnYet Another Resource Negotiatornpm의 대안으로, 더 빠르고 안정적인 패키지 관리를 제공합니다. Facebook에서 개발했습니다.yarn add react-nativeyarn start🌟ExpoReac..

개발 2025.09.04

[React Native] onLayout 이벤트

import { LayoutChangeEvent, View, Text } from 'react-native';const handleLayout = (event: LayoutChangeEvent) => { const { x, y, width, height } = event.nativeEvent.layout; console.log(`위치: (${x}, ${y}), 크기: ${width} x ${height}`);}; Hello WorldReact Native의 onLayout은 컴포넌트가 화면에 렌더링되고 레이아웃이 계산된 후에 호출되는 이벤트 핸들러다.컴포넌트의 위치(x, y)와 크기(width, height) 정보를 실시간으로 얻을 수 있다. 다만, 레이아웃이 변경될 때마다 onLayout이 호출되..

카테고리 없음 2025.09.04

[React Native] TextInput 에 포커싱 됐을 때 iOS 키보드가 올라오지 않는 현상

iOS 시뮬레이터에서만 나타나는 현상으로 실제 단말에서는 나타나지 않는다.자동으로 올라오게 하려면:iOS 시뮬레이터 메뉴의 I/O > Keyboard > Connect Hardware Keyboard 를 체크 해제 하면 된다. `Connect Hardware Keyboard` 는 물리적 키보드가 연결되어 있을 때 시뮬레이터의 키보드가 올라오지 않게 한다. 가령, 랩탑이나 별도의 키보드가 연결되어 있다면 시뮬레이터의 키보드는 올라오지 않게 하는 설정이다. 체크 ON이 기본 값이다.

카테고리 없음 2025.09.03

[안드로이드] adb로 딥링크를 테스트 하는 2가지 방법

1. 딥링크 URL을 직접 전달하는 방법adb shell am start -W -a android.intent.action.VIEW -d "app://open?toWebView=https://xxx.xxxx.co.kr/intro" io.github.ovso.app앱이 실행된 후 첫 화면의 intent 로부터 데이터를 받습니다.intent.data(Uri) 에 scheme, host를 포함한 모든 데이터가 들어 있습니다.intent.data.getQueryParameter("toWebView")로 데이터를 꺼냅니다.2. 추가 데이터로 딥링크를 전달하는 방법adb shell am start -W -a android.intent.action.VIEW -d "app://open" -e "toWebViewUrl"..

카테고리 없음 2024.08.20

[IntelliJ] 브레이크 포인트 성능

버깅(브레이크 포인트) 중에 인텔리J가 멈추거나 느려질 때가 있습니다. 디버깅 성능을 개선하는 방법을 젯브레인에서 소개하고 있습니다. 필자는, 코틀린으로 개발할 때 익스프레션 바디, 람다에서 메서드 브레이크포인트를 사용할 때 IDE가 멈춘적이 있습니다. 라인 브레이크포인트를 사용하니 해결됐습니다. 다른 설정을 사용해 보진 않았지만, 메서드 브레이크포인트를 사용하지 않음에도 성능이 좋지 않다면 젯브레인이 권하는 다른 방법을 시도해 보시길 권해드립니다. ・ 메서드 브레이크포인트: JVM 설계로 인해 성능이 크게 저하되므로, 일반적인 라인 브레이크포인트를 사용하는 것이 좋습니다.・ 메서드 반환 값 표시 옵션: 비활성화하면 성능이 향상됩니다.・ 컬렉션 클래스 대체 보기 및 toString() 객체 보기:toSt..

카테고리 없음 2024.05.23

[안드로이드] hiltAggregateDepsDebug 에러

에러 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:hiltAggregateDepsDebug'. > A failure occurred while executing dagger.hilt.android.plugin.task.AggregateDepsTask$WorkerAction > 'java.lang.String com.squareup.javapoet.ClassName.canonicalName()' ... .. 해결책 // 모듈 수준의 build.gradle hilt { enableAggregatingTask = false } 원인 최신버전(2.50)의 dagger-compiler 는 내부에..

개발 2024.02.14

[안드로이드] adb로 에뮬레이터, 디바이스 제어하기

에뮬레이터와 디바이스를 제어하기 위한 KEYCODE 가 정말 많아요 : ) adb shell input keyevent KEYCODE_BACK adb shell input keyevent KEYCODE_POWER adb shell input keyevent KEYCODE_APP_SWITCH adb shell input keyevent KEYCODE_ASSIST adb shell input keyevent KEYCODE_MUTE adb shell input keyevent KEYCODE_MUSIC adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_CALENDAR adb shell input keyevent KEYCODE_BRIGH..

개발 2023.11.28

[안드로이드] Android Studio 에서 커서가 두껍게 나올 때

갑자기 커서가 두꺼워진 적 있나요? 저는 플러그인으로 설치한 IdeaVim(vim) 때문이었답니다. 플러그인과의 충돌인 것 같아요. vim 이 disable 이었는데도 두꺼워 졌으니까요. vim을 enable 로 했다가 다시 disable 로 하니 괜찮아졌어요. 잠시.. 해결법으로 설정(⌘ + ,) > Plugin 에서 vim 을 disable 하니 커서가 정상으로(|) 돌아왔어요. 설치만 하고 쓰질 않으니 그냥 지워야 겠어요. 물론 vim 에서 두꺼운 커서는 읽기모드 에요.

개발 2023.11.08

[안드로이드] 라이브러리 업그레이드가 안될 때

라이브러러 업데이트가 안되는 상황 라이브러리 또는 오픈소스 버전을 업그레이드(10.0.6 -> 11.0.1) 했는데 External Libraries에선 여전이 10.0.6 을 가리키고 있을 때가 있습니다. (가끔 혹은 처음 / 회사 또는 개인) 로컬 Gradle 캐시를 의심해 봐야 합니다. 재밌는 것은(당사자는 노잼), 동료들은 괜찮은데 나만 그렇다는 겁니다. 해결하기(결론) 해당 안드로이드 프로젝트 디렉토리가 아닌 외부에 숨겨진 .gradle 에서 해당 라이브러리 캐시를 찾아서 관련 파일을 모두 제거후에 빌드 해야 합니다 경로는, /Users/{유저명}/.gradle/caches/ 입니다. 안.스의 External Libraries -> Gradle:{라이브러리 namespace} -> 커서메뉴(마우..

개발 2023.10.05

[안드로이드] ADB 로 앱 실행하기

adb 로 앱을 실행하는 것은 아주 간단합니다 : ) adb shell am start -n /. 위의 가이드를 아래와 같이 바꾸어 썼습니다. adb shell am start -n io.github.ovso/io.github.ovso.ui.SplashActivity 여기서, Flavor 를 통해 빌드변형을 했다면 어떻게 실행해야 할까요? adb shell am start -n io.github.ovso.stg/io.github.ovso.ui.SplashActivity / 의 앞부분만 stg 를 붙였습니다. / 이후는 실제 경로를 그대로 유지해야 합니다. 물론 실제 경로에 stg가 붙으면 / 앞부분과 동일하게 경로를 적어주면 됩니다. 그리고 / 전 후로 많이 다른 경우가 있을 수 있지요? 그럴 땐 아래와..

개발 2023.08.23

[안드로이드] ADB 로 액티비티 스택 알아보기

1. adb shell dumpsys activity recents 2. adb shell dumpsys activity activities 1번 과 2번 둘다 Activity 스택 정보를 보여줍니다. 1번은, recents 로 눈치 채셨을 수도 있습니다. 최근에 사용한 Activity 정보를 보여줍니다. 2번는, 방대한 정보를 보여줍니다. 방대하니까 보기가 어렵습니다. 정보의 범위를 좁혀볼까요? 아래와 같이 packageName 을 CLI에 추가해 줍니다. 1. adb shell dumpsys activity recents | grep io.github.ovso.activityfinish 2. adb shell dumpsys activity activities | grep io.github.ovso.a..

개발 2023.07.29

[안드로이드] Wireless Debugging 이 안될 때

GUI 로 하는 Wireless Debugging(무선디버깅) 이 안될 때 아래의 CLI 를 이용하면 잘 됩니다. 물론, 동일한 Wi-Fi 에 연결되어 있어야 하겠죠! adb connect device_ip_address:port 이 방법은, QR 코드로 기기 페어링(Pair device with QR code) 또는 페어링 코드를 사용하여 페어링(Pair device with pairing code) 이 동작하지 않을 때 유용합니다. 개인적인 경험으로, 둘 중 하나가 안되면 모두 안됐습니다. device_ip_address 와 port 는 개발자 모드의 Wireless Debugging 에서 확인할 수 있습니다. 다른 방법도 있습니다. 그러나 권장하지 않습니다. adb pair device_ip_add..

개발 2023.07.17

[안드로이드] Kotest 사용

Kotest 사용 안드로이드에서 Kotest 를 사용하려면 3 가지 설정이 필요합니다. 안드로이드 스튜디오 플러그인 설치 라이브러리 추가 JUnit Platform 그래들 플러그인 추가 안드로이드 스튜디오 플러그인 Kotest 에서 만든 플러그인 입니다. 안드로이드 스튜디오에서 플러그인을 검색하여 손쉽게 설치 할 수 있습니다. 라이브러리 추가 dependencies { ... testImplementation("io.kotest:kotest-runner-junit5:$version") ... } JUnit Platform 그래들 플러그인 추가 앱 수준의 build.gradle 에 플러그인을 추가합니다. android.testOptions { unitTests.all { it.useJUnitPlatform..

개발 2023.03.15

[코틀린] 이메일 유효성 검사 정규표현식

이메일 유효성 검증 로직 입니다. 유용하게 사용하시기 바랍니다. import java.util.regex.Pattern fun isValidEmail(email: String): Boolean { val pattern = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$") return pattern.matcher(email).matches() } fun main() { val email = "example@example.com" if (isValidEmail(email)) { println("Valid email address") } else { println("Invalid email address") } }

개발 2023.02.10

[Git] 깃 로컬 브랜치 경로 바꾸기

현재 사용 중인 깃 브랜치의 경로를 바꿔야 할 때가 있습니다. 브랜치 경로를 잘못 설정했거나, 단순 변경 할 때 입니다. 필자는, 브랜치의 depth 를 줄이기 위해서 사용했습니다. git branch -m {현재경로} {바꿀경로} git branch -m feature/qa/1101 feature/1101 도움말을 보면 이해하기가 좀 더 수월합니다. copy 를 의미하는 -c 옵션을 사용하면 복제가 됩니다. git help branch ... git branch (-m | -M) [] git branch (-c | -C) [] ... OPTIONS -m, --move move/rename a branch and its reflog -M move/rename a branch, even if target ..

개발 2022.12.16