분류 전체보기
-
프로젝트 오픈은 왜 항상 고통스러울까?일상/개발 관련 생각 2026. 3. 25. 18:17
회사에서 반년 간 도맡아 준비했던 프로젝트를 드디어 오픈했다. 준비하는 내내 '오픈만 하면 숨 좀 돌릴 수 있겠지'라는 마음이 컸다. 하지만 그건 그저 순진한 바람일 뿐이라는 걸 내심 알고 있었다. 막상 서비스가 라이브 환경에 배포되고 나면, 개발 환경에서는 전혀 예상치 못했던 기상천외한 예외 상황과 기획 수정 요청이 얽히고설켜 오히려 오픈 전보다 일이 더 많아지기 일쑤다. 이전 프로젝트 때도 그랬고, 이번에도 마찬가지다. 개발자로 일하는 이상 프로젝트 오픈은 숙명처럼 찾아온다.나는 이런 숙명을 피할 수 없기에, 왜 매번 이런 고통스러운 상황이 반복되는지, 그리고 어떻게 이 굴레를 끊어낼 수 있을지 한 번쯤 깊게 고민해 볼 필요가 있었다. (물론 고민한다고 당장 모든 게 마법처럼 해결되진 않는다...) ..
-
mac os에서 adb 응답 없음 & SDK 업데이트 "Stopping ADB..." 무한 로딩 해결Java-Kotlin/Android 2026. 3. 18. 21:36
평소처럼 안드로이드 개발을 하던 중, 갑자기 터미널에서 adb 명령어가 아무런 응답을 하지 않기 시작했습니다. adb kill-server를 입력해도 커서만 깜빡일 뿐 진전이 없었고, 아무 반응이 없어서 Command+C로 탈출하였습니다. 제가 시도해 본 방법처음에는 adb의 path가 잘못 잡혀있나 싶어서 확인해 보니 해당 경로는 잘 잡혀 있었습니다.그래서 SDK Platform-Tools를 Android Studio의 SDK manager에서 업데이트 또는 재설치를 진행하기로 하였습니다. SDK manager를 들어가보니 업데이트가 있어서 지웠다 깔기 대신 최신 버전으로 업데이트를 진행하였습니다. 하지만 업데이트 과정이 "Stopping ADB..." 로그만 뜨고 업데이트가 진행이 되지 않았습니다.원..
-
SQLite VACUUM 명령어를 통하여 안전하게 DB 백업Java-Kotlin/Android 2026. 3. 4. 23:07
Android POS/KIOSK를 개발하고 실제 운영하다보니 개발에서는 고려하지 못한 문제들이 한번씩 터지고, 그럴 때마다 데이터를 살리기 위한 DB 백업이 필요하다고 느꼈습니다. DB 백업이 있으면 어떤 시점이후 데이터는 날아갈 수 있어도, 그 시점 이전의 데이터는 모두 확정적으로 살릴 수 있기 때문입니다. DB 백업이 없을 때의 데이터 복원:모든 LOG를 수집LOG를 기반으로 모든 데이터를 수작업으로 복원 DB 백업이 있을 때의 데이터 복원:DB 직전 백업 시점까지의 데이터는 DB 백업을 복원나머지 DB 백업 시점 이후의 데이터는 LOG를 이용하여 복원 문제가 터졌을 때 LOG를 모두 수집하여 수작업으로 복원하는데에는 엄청난 시간도 걸리고, 중간중간 복원하는 사람이 빼먹거나 하면 데이터가 없어진다..
-
-
Android WebView에서 이어폰 연결 상태 감지하기 (JS Bridge)Java-Kotlin/Android 2026. 2. 19. 13:12
1. Android WebView에서 직접 이어폰 연결 상태를 감지할 수 없나요?예. 안드로이드의 WebView에서 직접 안드로이드 기기에 오디오 기기를 꽂았다는 상태를 알 수 없습니다. 웹 표준(HTML5)만으로는 하드웨어 단의 연결 상태를 직접 알 수 없음.특히 일반 이어폰(3.5mm)과 달리 USB-C 타입 오디오 장치는 시스템에서 TYPE_USB_HEADSET으로 별도 관리됨.일반 이어폰을 꽂는 동작은 ACTION_HEADSET_PLUG으로 관리됨.이를 해결하기 위해 Android 네이티브 코드에서 감지하고 안드로이드 WebView(JS)로 브릿지를 통해 신호를 주는 전략이 필요함. 2. 구현저는 해당 기능을 구현 할 때 BroadcastReceiver와 AudioDeviceCallback 둘중 ..
-
Android 14(API 34)에서 USB Serial 장치 연결 시 권한에 의한 Crash 트러블슈팅Java-Kotlin/Android 2026. 2. 11. 23:29
2025.12.03 - [Java-Kotlin/Android] - Android에서 USB Serial 장치 연결 시 USB 권한 문제 해결기 Android에서 USB Serial 장치 연결 시 USB 권한 문제 해결기최근 안드로이드 프로젝트에서 POS장비에 USB Serial 포트 통신 기능을 구현하는 중에 예상치 못한 권한 문제를 마주쳤습니다.저는 이미 AndroidManifest.xml에 USB 관련 Permission을 다 줘놨는데도 권한 문parkstate.tistory.com 저는 이전에 Android에서 USB Serial 장치를 연결 한적이 있습니다. 해당 코드를 이용하여 RFID Reader를 잘 사용 하고 있었습니다. 그러나 키오스크 타겟 장비가 기존보다 좀 더 높은 Android 버..
-
[Ktorm] MSSQL "String or binary data would be truncated" 트러블 슈팅 (varchar vs text)Java-Kotlin 2026. 1. 21. 10:22
1. 문제 상황Kotlin 기반의 ORM인 Ktorm을 사용하여 MSSQL 데이터베이스 마이그레이션 기능을 구현하고 있었습니다. 마이그레이션이 수행될 때마다 실행된 SQL 스크립트 전문(DDL)을 이력 테이블(ddl_dsl_migration_schema)에 저장하는 로직이 있는데, 길이가 긴 CREATE TABLE 스크립트를 저장하는 순간 아래와 같은 에러가 발생하며 프로세스가 중단되었습니다.2. 에러 로그 com.microsoft.sqlserver.jdbc.SQLServerException: String or binary data would be truncated in table 'CROSS_POS_DB.dbo.ddl_dsl_migration_schema', column 'script'. Truncat..
-
Git Tag를 활용한 시멘틱 버전 관리Git 2026. 1. 15. 00:00
회사에서 개발 중인 프로젝트가 이제 실 운영에 들어가면서 버전 관리가 중요하게 되었다.그래서 Git Tag를 이용하여 버전 관리를 진행하기로 했다 버전은 시멘틱 버저닝으로 매기기로 했다. 시멘틱 버전은 앞에서부터 Major.minor.patch(1.1.1) 형식으로 이루어져 있다. 해당 시멘틱 버전을 이용하여, 패치와 마이너, 메이저 업데이트를 구분할 수 있다. 나무위키 피셜:더보기메이저 버전: 하위 호환성을 보장하지 않는 API 변경사항(breaking change)를 하나라도 포함한 버전에 해당한다. 가령 기존 API를 삭제하거나, 완전히 새로운 API로 통합하는 경우 등. 이러한 경우, 메이저 버전을 올려야 한다. 유일한 예외로, 메이저 버전이 0인 동안은 어떤 불안정한 API 변경사항이 발생하더..