분류 전체보기
-
Git Tag를 활용한 시멘틱 버전 관리Git 2026. 1. 15. 00:00
회사에서 개발 중인 프로젝트가 이제 실 운영에 들어가면서 버전 관리가 중요하게 되었다.그래서 Git Tag를 이용하여 버전 관리를 진행하기로 했다 버전은 시멘틱 버저닝으로 매기기로 했다. 시멘틱 버전은 앞에서부터 Major.minor.patch(1.1.1) 형식으로 이루어져 있다. 해당 시멘틱 버전을 이용하여, 패치와 마이너, 메이저 업데이트를 구분할 수 있다. 나무위키 피셜:더보기메이저 버전: 하위 호환성을 보장하지 않는 API 변경사항(breaking change)를 하나라도 포함한 버전에 해당한다. 가령 기존 API를 삭제하거나, 완전히 새로운 API로 통합하는 경우 등. 이러한 경우, 메이저 버전을 올려야 한다. 유일한 예외로, 메이저 버전이 0인 동안은 어떤 불안정한 API 변경사항이 발생하더..
-
Android DataStore 를 사용하여 파일에 간단한 정보 저장하기Java-Kotlin/Android 2026. 1. 14. 23:45
회사에서 제작하는 POS 프로그램의 정보(회사, 매장, 기기 번호)를 저장해 주어야 해서 Android에서 지원하는 두 개의 라이브러리를 비교해 보았다. SharedPreferences동기적으로 작동Atomic Read/Write 보장 안됨Key-Value 저장 지원파싱 에러 발생 시 RuntimeException Throw코드가 간단하여 러닝커브가 낮음DataStore(Jetpack)비동기적으로 작동Atomic Read/Write 보장 됨Key-Value, ProtoBuf(타입을 정의 및 직렬화 가능) 저장 지원오류시 IOException로 에러를 Throw코드가 SharedPreferences보다 복잡하여 러닝커브가 상대적으로 높음Kotlin Coroutine, Flow을 사용하도록 설계됨 고민해 본..
-
SCP-380CII 영수증 프린터 안드로이드 SDK 연동기Java-Kotlin/Android 2025. 12. 31. 15:45
기존에 Sewoo 영수증 프린터와 Epson 영수증 프린터를 안드로이드 POS/KIOSK 앱에서 사용할 수 있도록 연동시켜 놓았었습니다. 하지만 최근 영업팀이 SCP-380CII 프린터가 더 기기 값이 싸서 해당 프린터도 사용하고 싶다는 의견을 주셔서 해당 프린터도 자사 안드로이드 POS/KIOSK 앱에서 사용할 수 있도록 연동개발을 진행하였습니다. 먼저 해당 기기의 안드로이드 개발 예시 프로젝트를 훑어보았습니다. 해당 프로젝트에는 Sewoo에서 제공하는 Sewoo 영수증 프린터 안드로이드 연동 모듈을 사용하여 안드로이드 상에서 SCP-380CII 프린터를 제어하고있었습니다.한 줄에 들어가는 최대 문자 수인 CPL만 다르지 나머지는 Sewoo의 영수증 프린터의 Android SDK 모듈을 사용하는 기..
-
jSerialComm사용해서 read시 윈도우 환경에서의 끊겨서 읽히는 현상 트러블 슈팅Java-Kotlin 2025. 12. 24. 23:57
최근 안드로이드와 RFID 리더기를 연동하는 프로젝트를 진행하면서 겪었던 시리얼 통신의 데이터 파편화 문제와 그 해결 과정을 공유합니다.1. 문제 상황저는 jSerialComm 라이브러리를 사용하여 RFID 태그를 시리얼 통신으로 Read하도록 개발하였습니다. 맥(Mac) 환경에서 테스트할 때는 RFID 태그 데이터가 한 번에 잘 들어왔는데, 윈도우 환경이나 특정 태블릿에 리더기를 연결하니 이상한 현상이 발생했습니다.기대값: 10~20바이트의 전체 태그 데이터 (예: ABC12345...)실제값: 단 2바이트만 읽히고 read() 함수가 종료됨 (예: AB)심지어 read() 함수에 타임아웃을 넉넉히 주었는데도, 데이터가 조금이라도 들어오는 순간 함수가 리턴되어 버리는 문제였습니다. 또한, 태그를 찍지 ..
-
Kotlin Multiplatform(KMP) 윈도우 환경에서 File Lock을 이용한 중복 실행 방지Java-Kotlin/Android 2025. 12. 17. 20:25
Kotlin Multiplatform(KMP)으로 윈도우 데스크톱 애플리케이션을 개발하던 중, "프로그램이 이미 실행 중이라면 경고창을 띄우고 종료"시켜야 하는 요구사항이 생겼다.안드로이드와 달리 데스크톱 환경에서는 사용자가 빌드되어 설치된 exe 파일을 더블 클릭할 때마다 새로운 프로세스가 생성된다. 이를 방지하고 Single Instance Application을 구현하는 과정과, 그 과정에서 겪었던 IOException 트러블 슈팅 경험을 공유한다. 1. 중복 실행 방지 로직에 대한 접근 방법: File Lock (파일 잠금)윈도우에서 프로세스 간 통신(IPC)이나 Mutex를 사용할 수도 있지만, JVM 환경에서 가장 간편하고 확실한 방법은 파일 락(File Lock)을 사용하는 것이다. 원리는..
-
Kotlin에서 RfidReader와 USB Serial로 통신 기능 구현Java-Kotlin 2025. 12. 10. 22:33
사내 프로젝트에서 RfidReader와 USB Serial 통신을 통해 값을 읽어오는 기능을 구현해야 했습니다. 이를 위해 안정적이고 널리 사용되는 com.fazecast:jSerialComm 라이브러리를 사용하여 Serial Port 통신 어댑터를 개발한 과정을 공유합니다. 해당 기능은 com.fazecast:jSerialComm 라이브러리를 사용하여 구현하였습니다. 해당 라이브러리의 SerialPort.getCommPort("PortName") 함수에 포트 이름을 넣고 호출하면 SerialPort객체를 획득할 수 있습니다. (파라미터로 준 포트 명의 연결된 시리얼 포트가 없으면 null을 반환합니다)val commPort: SerialPort? = SerialPort.getCommPort("PortN..
-
Android에서 USB Serial 장치 연결 시 USB 권한 문제 해결기Java-Kotlin/Android 2025. 12. 3. 23:20
최근 안드로이드 프로젝트에서 POS장비에 USB Serial 포트 통신 기능을 구현하는 중에 예상치 못한 권한 문제를 마주쳤습니다.저는 이미 AndroidManifest.xml에 USB 관련 Permission을 다 줘놨는데도 권한 문제를 만나게 되어 놀랐습니다.. 마주친 에러로그exception in UsbManager.openDevice java.lang.SecurityException: User has not given 10161/org.example.android.pos permission to access device /dev/bus/usb/001/004 at android.os.Parcel.createExceptionOrNull(Parcel.java:3011) at android.hardwar..
-
Gitlab CI/CD에 Gitlab Runner 직접 붙여서 빌드하기CI-CD 2025. 11. 26. 22:02
지난번엔 gitlab-ci.yml에 빌드 파이프라인을 구축했다.이젠 미뤄둔 Windows 설치파일인 msi 파일을 빌드하기 위해서 Windows Gitlab Runner 를 등록해서 msi 빌드를 할 때가 됐다. 1. Gitlab Runner 등록 창으로 이동프로젝트에서 Settings>CI/CD 를 누르면 CI/CD Setting들이 나오는데 이중에서 Runners를 열면 현재 해당 프로젝트에 등록된 Gitlab Runner가 보인다. 해당 위치에서 Available Runners 오른쪽에 작게 있는 'Create project runner' 버튼을 누르면 등록 화면으로 이동한다. 2. 등록할 Gitlab Runner의 정보 입력등록할 Gitlab Runner의 정보를 입력해주어야 한다. 입력할 정보는..