2026/03
애플리케이션에 임시 기능으로 체중계 연동을 함 표준 프로토콜이 아니고, 해당 업체에 연락해도 문서를 받을 수 없어서 스스로 패킷을 보면서 추리가 필요했음 2대 기기를 가지고 실험했으며, 브로드캐스팅, 마스킹으로 값 XOR연산(A ^ B = C 이면 C ^ B = A), 빅엔디안이라는걸 알게됨
문제는 마스킹 기준이 0.0kg를 기준으로 마스킹 하는데, 어떻게 0.0kg 패킷을 찾을 수 있는가? 였음
패킷을 보다보니 0.0kg라면 패킷 12바이트 중에서 뒤에 8바이트가 고정이라는 사실을 알게됨 그래서 변동되는 앞 4바이트 + 고정 8바이트로 마스킹 값을 추측했고, 2대를 실험해보니 과연, 의도한바대로 체중계를 받았음. 이후 로직에 대해서는 좀 더 지시하신 대표님와 협의가 필요할 것 같음 구현 자체는 기억하지 않도록 키, 나이, 성별을 입력 받고, 체중을 잰 다음 그 정보를 기반으로 bmi, bmr, 체지방률, 근육량, 수분정도를 보이게 함
이게 어느 정도 마무리되면 리디자인이랑 온디바이스 ai 구현, 애플스토어 출시할 예정
애플 출시를 위한 빌드 작업
아무리 수정을 해도 npx react-native run-ios가 안되었는데 /Users/mac/Desktop/app/ios/Pods/FirebaseCrashlytics/run: /bin/sh^M: bad interpreter: No such file or directory
이 에러가 딱 잡혀서 CRLF로 작업하던 것이 원인이라는 걸 알게되었다. LF로 바꾸니
sed -i '' -e 's/\r$//' ios/Pods/FirebaseCrashlytics/run
find . -type d \( -name node_modules -o -name Pods -o -name .git -o -name build -o -name ios/build -o -name android/app/build \) -prune -o -type f -exec sed -i '' -e 's/\r$//' {} +
정상 동작하더라, .gitattributes에
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto eol=lf
# Explicitly declare text files you want to always be normalized and converted to native line endings on checkout.
*.js text eol=lf
*.jsx text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.json text eol=lf
*.sh text eol=lf
*.rb text eol=lf
run text eol=lf
이렇게 해두면 이런 상황이 어떤 운영체제에서도 안생긴다고하여 변경했다. Git이 코드를 주고받을 때 알아서 LF 형식으로 강제 변환해 주기 때문에, 앞으로 줄바꿈 때문에 빌드가 꼬이지 않게 된다는 말과 함께
CRLF와 LF가 무엇인가하여 찾아보니 타자기 줄바꿈처리 역사에서 알 수 있었다.
종이를 물고 있는 원통(Carriage)을 오른쪽으로 끝까지 밀어쳐서 타점을 왼쪽 끝으로 보냄 => 이것이 CR (Carriage Return)
원통(Carriage)을 돌려서 종이를 한 칸 위로 올림 => 이것이 LF (Line Feed)
Unix (현재의 Linux, Mac의 조상): "낭비다. 하나만 쓰자!"
당시 컴퓨터 메모리와 저장공간은 엄청나게 비싸서 Unix의 창시자들은 "줄바꿈을 할 때마다 문자 2개(\r
)를 쓰는 건 용량 낭비다. 그냥 LF(
) 하나만 저장하고, 화면이나 프린터에 출력할 때만 운영체제가 알아서 처리해주자"라고 결정
MS-DOS (현재의 Windows 조상): "호환성이 최고지!"
Microsoft의 전신인 MS-DOS는 당시 널리 쓰이던 구형 프린터나 터미널 장비들과의 100% 호환성을 위해, 타자기의 원리 그대로 CRLF(\r
) 두 문자를 모두 기록하는 방식 선택.
개발 생태계의 중심이 Linux/Unix임: 우리가 만드는 서버(AWS, 클라우드, Docker 등), 스마트폰(iOS, Android), 오픈소스 도구들이 모두 Unix/Linux 기반(LF 사용)입니다.
쉘 스크립트 오류 (방금 겪으신 문제): React Native 등의 빌드 스크립트(.sh)를 Windows 방식인 CRLF로 저장하면, Mac이나 Linux는 뒤에 붙은 \r을 줄바꿈으로 인식하지 못하고 이상한 문자(^M)로 인식하여 에러를 뱉고 멈춰버립니다.
Git 충돌 방지: 코드는 똑같은데 줄바꿈이 LF냐 CRLF냐에 따라 Git은 "모든 코드가 변경되었다"고 인식합니다. 팀원 간에 이 기준이 다르면 Git Merge를 할 때 지옥을 맛보게 됩니다.
Microsoft(Windows)도 LF를 수용 중: 요즘 Windows에서 개발할 때 많이 쓰는 WSL(Windows Subsystem for Linux)도 LF를 씁니다. 심지어 절대 안 바뀔 것 같던 윈도우 기본 '메모장'조차 최근 업데이트로 LF를 정상적으로 지원하기 시작했습니다.
4가지 이유로 LF를 사용하라고 한다.
기술보호울타리의 핵심기술 모니터링 지원 사업 신청 기술보호 바우처 유망 ~ 선도기업도 노려볼 예정
앱인앱 방식을 같이 하는 업체에 구현해서 보내주고 있음 로직은 더 보완할게 있는데 상대방에게 묻는 중
react-native에서 MainActivity.kt(java)
-- super.onCreate(savedInstanceState)
++ super.onCreate(null)
이렇게 해두면 앱 재기동시에, 안정성이 높고, 재기동 로직이 필요하지 않음 대신 유저에게 경험면에서는 조금 낮을 수 있으나 이 편이 앱 구동에 안정성을 더 높음