본문 바로가기

전체 글146

세상에... 소수점 대신 콤마를 쓰는 나라가 있다니! 지금 충전 기능이 안 된대요! 평화로운 어느 날, cs 채널에 외화 충전이 안된다는 문의가 들어왔다. 새로운 버전 앱을 배포한 지 얼마 안 되어서 설마 이번 버전에 문제가 있나 했지만 아무리 생각해 봐도 코드에는 문제가 없었다. 만약 문제가 있다면 다른 사용자들도 똑같은 증상이 있었을 텐데... 우리 팀은 사용자분께서 보내주신 화면 녹화 파일을 계속 돌려보았다. 한참을 보다가 사수 개발자분께서 한마디를 내뱉으셨다. 어? 여기가 왜 콤마로 되어있지? 사용자분의 앱 화면에는 예를 들어 1,400.23 이라고 적혀있어야 할 값이 1.400,23 이라고 적혀있었다. 소수점과 콤마 위치가 바뀌어있었던 것이다. 그래서 검증 로직을 통과하지 못했던 것 (녹화 화면을 보고 이를 알아챈 사수님도 눈썰미가 정말 대박이신 .. 2023. 10. 31.
뭐? 앱을 강제로 가로로 돌릴 수 있다고? 어라? 우리 앱은 가로모드를 지원하지 않는데... 어느 날 Firebase Crashlytics에 비정상 종료 이벤트가 올라왔다. 로그를 쭉 읽어보니 특정 페이지에서 앱을 가로방향으로 돌렸을 때 발생할 수 있는 Exception 이였다. 우리 회사 앱은 가로 방향을 지원하지 않기 때문에 고려하지 않았던 부분이었다. 정말 이해할 수 없었다. 왜냐하면 우리 앱은 세로방향으로만 사용할 수 있도록 되어있기 때문이다. 대체.. 이 사용자들은 우리 앱을 가로로 어떻게 돌린 거지????? 발생할 수 없는 상황이라 어떻게 문제를 해결해야 하나 고민하던 도중 단서를 하나 발견할 수 있었다. 바로 비정상 종료를 겪은 사용자들이 전부 갤럭시 폴드를 사용하고 있었던 것! 그래서 폴드라는 단서를 기준으로 원인을 찾기 시작했다... 2023. 10. 29.
PM의 입장에서 쓰는 넥스터즈 후기 1. 여는 말 2. 지원하기 전 2-1. 면접 2-2. 합격. 그리고 PM을 맡다. 3. 1주차 3-1. 선정 아이디어 발표 3-2. PM과의 대화 (Q&A, 어필) 3-3. 팀 빌딩 3-4. 팀별 만남 3-5. 1주차 회의 4. 2주차 4-1. 디자이너와 싱크 맞추기 4-2. UT 계획 세우기 5. 3주차 6. 4주차 1. 여는 말 넥스터즈를 하면서 배운점도 많고 다른 사람들에게 공유해주고 싶은 내용도 많다. 언젠가 써야지 써야지 하다가 2달이 지나서야 글을 쓰게 됐다. 사실 넥스터즈 후기와 정보는 구글에 널리고 널렸다. 그도 그럴만한 것이 지금이 23기고 한 기수에 몇십 명이나 되니까.. 그래서 나는 특별하게 PM의 관점에서 바라본 넥스터즈 후기를 써볼까한다. 약간 8주간의 일기 + 꿀팁 형식으로 글.. 2023. 10. 20.
stateflow가 같은 값을 update 하는 이유 1. 증상 2. 한 번만 update하는 stateflow 예제 3. 여러 번 update하는 stateflow 예제 4. 해결 방법 4-1. state flow 나누기 4-2. state를 관리하지 않고 단발성으로 emit 하기 5. 결론 1. 증상 stateflow는 분명 이전 값과 현재 값이 일치하면 다시 update하지 않는다. 예를 들어 이전 값이 false였고 현재 값도 false면 update 하지 않으며 현재 값이 true가 되면 그때서야 update 함수가 먹힌다. 하.지.만 내 코드에서 stateflow를 collect 하는 부분이 계속 호출되는 문제가 발생했다. 로그를 찍어보니 계속 똑같은 값을 update 하고 있는데 내 머리로는 이해가 가지 않았다. 알고 보니 엄청 허무하고 부끄러.. 2023. 1. 26.
[이펙티브 코틀린] 5장. 객체 생성 1. 생성자 대신 팩토리 함수를 사용하라 2. 기본 생성자에 이름 있는 옵션 아규먼트를 사용하라 3. DSL 1. 생성자 대신 팩토리 함수를 사용하라 (206p ~ ) 1-1. 팩토리 함수란? 객체를 만드는 방법에는 여러 가지가 있다. 다양한 생성 패턴이 있으므로 상황에 맞게 사용하면 된다. 그중 하나인 팩토리 함수에 대해 알아보자. interface HelloMessage { fun hello(name: String): String } class HelloMessageKor : HelloMessage { override fun hello(name: String): String { return "안녕하세요 $name 님" } } 환영 인사를 해주는 HelloMessage라는 interface가 있고 이를.. 2022. 12. 5.