Flutter로 안드로이드 앱을 개발하면서 Google Sign-In과 Firebase Authentication을 함께 사용하는 경우가 많다. 나 역시 Windows 환경에서 Antigravity IDE를 사용하여 Flutter 앱을 개발하고 있었고, 개발 중에는 Google 로그인이 정상적으로 동작했다. 하지만 앱을 Google Play Console의 내부 테스트 트랙에 배포한 후 테스트를 진행하자 예상치 못한 문제가 발생했다. Google Sign-in failed. GoogleSignInException( code: GoogleSignInExceptionCode.canceled, activity is cancelled by the user. ) 처음에는 정말 사용자가 로그인을 취소한 것처럼 보였다. 하지만 실제 원인은 전혀 다른 곳에 있었다. Debug에서는 정상인데 Release에서는 왜 실패할까? 개발 중에는 Antigravity에서 Debug 모드로 실행했기 때문에 모든 것이 정상적으로 동작했다. Google 계정을 선택하면 Firebase Authentication까지 문제없이 로그인되었다. 하지만 Release App Bundle(AAB)을 만들어 Google Play 내부 테스트에 업로드한 후 설치하면 Google 계정 선택 이후 바로 예외가 발생했다. 처음에는 Firebase 설정이나 코드의 문제라고 생각했지만, 실제 원인은 앱이 서명(Signing)되는 방식에 있었다. Google Sign-In은 SHA-1을 이용해 앱을 인증한다 Google Sign-In은 단순히 패키지 이름만 확인하는 것이 아니다. Android 앱은 다음 두 가지 정보를 이용해 인증된다. Package Name SHA-1 인증서 지문 Firebase Console에 Android 앱을 등록할 때 SHA-1을 입력하는 이유도 바로 이것이다. Debug 환경에서는 Debug Keystore의 SHA-1이 사용된다. Release APK를 직접 설치하면 Relea...
간접흡연이란? 간접흡연은 비흡연자가 다른 사람이 피운 담배 연기를 흡입하는 것을 의미한다. ‘수동흡연’이나 ‘타인흡연’이라고도 한다. 간접흡연은 흡연자가 내뿜는 주류 연기와 담배 끝에서 나오는 부류 연기로 나뉘는데, 특히 부류 연기가 더 많은 유해물질을 포함하고 있어 건강에 더 해롭다. 세계보건기구(WHO)와 미국 질병통제예방센터(CDC)에 따르면, 간접흡연도 직접흡연만큼 건강에 해로우며 여러 질병을 유발할 수 있다. 특히 어린이, 임산부, 노인, 만성질환자들은 간접흡연의 영향을 더 크게 받을 가능성이 높다. 간접흡연의 종류 간접흡연은 일반적으로 다음과 같은 두 가지 유형으로 나뉜다: 주류 연기(Mainstream Smoke) : 흡연자가 들이마신 후 내뱉는 연기를 의미한다. 이 연기는 필터를 거쳐 나오므로 상대적으로 유해물질이 적을 수 있다. 부류 연기(Sidestream Smoke) : 담배 끝에서 직접 나오는 연기를 의미하며, 주류 연기보다 더 높은 농도의 유해물질을 포함하고 있다. 부류 연기는 공기 중으로 바로 퍼지기 때문에 비흡연자가 흡입할 가능성이 더 크다. 이 외에도 **3차 흡연(Thirdhand Smoke)**이라는 개념이 있다. 이는 담배를 피운 후에도 실내 공간, 벽, 가구, 의류 등에 남아 있는 유해물질이 다시 공기 중으로 방출되면서 발생하는 간접흡연의 한 형태이다. 특히 어린이들은 바닥이나 가구에 손을 대고 입으로 가져갈 가능성이 높아 3차 흡연의 영향을 더욱 크게 받을 수 있다. 간접흡연이 건강에 미치는 영향 1. 폐암 위험 증가 간접흡연은 폐암을 유발하는 주요 원인 중 하나이다. 담배 연기에는 벤젠, 포름알데히드, 니코틴 등 7,000가지 이상의 화학물질이 포함되어 있으며, 이 중 최소 70가지가 발암물질로 알려져 있다. 연구에 따르면, 간접흡연에 지속적으로 노출된 비흡연자는 폐암 발병 위험이 20~30% 증가한다고 한다. 특히 장기적으로 노출되면 폐 기능이 저하되거나 만성 폐쇄성 폐질환(COPD)이 발생할 ...