
그동안 앱스토어를 통해 판매한 앱 매출을 신고하는 부가세 신고 기간이 돌아왔습니다. 법인사업자는 예정신고까지 해서 연 4회 신고를 하지만, 개인사업자의 경우는 연 2회(7월, 1월)에 신고를 하면 됩니다. 원래 전에 했던 업무가 경영지원쪽이었던 관계로 저는 좀 수월하게 느껴졌지만, 아예 배경지식이 없는 분들은 신고가 힘드실 거 같아서 한 번 정리해봤습니다. '이 사람은 이렇게 했구나'하고 참고만 해주시면 되겠습니다. 혹시 제가 한대로 따라했다가 법적인 문제가 발생해도 저는 책임을 지지 않습니다.본 글은 세무 전문가의 자문이 아닌 개인의 경험 공유일 뿐이며, 세무 관련 결정은 국세청이나 세무사와 상의하시기 바랍니다.이 글은 2025년 7월 기준으로 작성된 개인의 경험입니다. 세법은 변동될 수 있으니 최신 ..

우연히 양자기술 컨퍼런스인 를 알게 되어 사전등록 후 다녀왔다. KAIST, IBM, KT, 메가존 클라우드, LG 등 정말 많은 곳들이 전시부스를 채우고 있었다. 말이 많았던 아이온큐. 성균관대의 양자컴퓨터도 보고. 양자컴퓨터를 보며 이해가 안 갔던 부분들에 대해서는 챗지피티와 이야기를 나누며 이해하는 시간도 가졌다. 더더욱 양자컴퓨터에 대해 관심이 생겼다. 사실 더더욱 이곳에 가야겠다고 생각했던 이유인 김상욱 교수님의 강연. 대중강연이라 그렇게 어려운 내용을 다루시진 않고 양자컴퓨터의 이야기를 주로 해주셨는데, 원래 '중첩'과 '얽힘'에 대해 알고 있기도 했고, 컴퓨터의 구조에 대해서는 잘 알고 있으니 이해하기 어렵지 않았다. 그런데 내가 그런 내용을 알고 있는 걸 차치하고 들어도 교수님은 일반인들이..

요즘 개발하고 있는 서비스는 다른 앱에 웹뷰 형태로 제공되는 서비스이다. 그래서 아무래도 기술적인 제약이 있는 편인데, 이번엔 스트리밍 형태의 STT에 대한 요구사항이 들어와서 기술조사 차원에서 구현해보았다. 안드로이드 기준으로 작성하긴 했지만 아이폰에서 사파리로 실행했을 때도 문제없이 STT가 동작했다. 웹뷰에서 마이크를 사용하기 위해선 우선 앱에서 웹뷰가 마이크를 사용할 수 있도록 권한을 허용해줘야 한다.(아래는 안드로이드 기준 설정. iOS라면 그에 맞는 별도의 설정이 필요) // 앱이 오디오 출력이나 오디오 경로, 볼륨 등을 조작하고 싶을 때 필요 만약 위 두 권한을 설정하지 않으면 NotReadableError: Could not start audio source 를 만날 수 있다.// 앱이 마..

앱스토어에서 실적이 저조한 앱을 아예 내리려는데, '현재 앱을 삭제할 수 없습니다.'라고 떴다. 삭제가 불가능한 경우는 아래와 같다.연관된 인앱 구매 항목이 존재판매중인 앱아래 상태의 앱Ready for Review (심사 준비됨)In Review (심사 중)Rejected (거절됨)Metadata Rejected (메타데이터 거절됨)Waiting for Review (심사 대기 중)다른 계정으로 이관 중인 앱앱 번들에 포함된 앱 나의 경우, 무료앱에 이미 배포가 완료된 상태였고, 다른 계정으로 이관이 진행중이라거나 앱 번들에 포함되지 않은 앱이었다. 그런데 앱을 삭제할 수 없었던 이유는 무료앱이더라도 가격은 0원으로 설정되었기 때문이다. 위와 같이 [가격 및 사용 가능 여부]로 이동해서 화면 제일 하단..
리액트 훅(Hook)함수형 컴포넌트에서 상태 관리나 라이프사이클 기능 등을 사용할 수 있게 해주는 React의 기능함수형 컴포넌트: 그냥 JavaScript 함수. props를 받아서 JSX을 리턴.자주 쓰는 기본 훅useState: 상태 관리 할 수 있게 해줌useEffect: 컴포넌트가 렌더링될 때, 혹은 특정 값이 변경될 때 실행되는 코드 작성useRef: DOM을 직접 참조하거나, 렌더링과 상관없는 값을 저장할 때 사용useMemo, useCallback: 컴포넌트가 불필요하게 다시 계산되거나 함수를 새로 생성하지 않게 최적화할 때 사용useReducer를 사용해서 로직을 컴포넌트로부터 분리하는 건 요즘 많이 쓰는 패턴 중 하나리액트 훅은 이름 앞에 항상 use를 붙임StateuseState로 S..

이번에 준비중인 서비스에서는 서비스 이용 보상으로 스탬프를 준다. 그런데, 그 스탬프 획득 조건이 여러 가지이다. 연속 학습을 했을 때 주는 스탬프도 있고, 특정 날짜에 들어왔을 때 주는 스탬프도 있고. 스탬프 기능을 구현하면서 이걸 JPA로 구현할 때 어떻게 하면 좀 더 객체지향적으로 할 수 있을지 고민했다. 이런식으로 서비스 이용 보상이 주어지는 경우는 많으니까 다른 분들은 어떻게 하실지 모르겠지만, 나는 아래와 같이 했다. 우선 스탬프 획득 조건이 크게 세 종류라고 생각하고 진행했다.CountCondition: 어떤 행동을 일정 횟수하면 주어지는 조건TimeRangeCondition: 어떤 기간동안 어떤 행동을 하면 주어지는 조건DateRange: 어떤 날짜에 어떤 행동을 하면 주어지는 조건 획득 ..

개발을 하다보면 매번 아무 것도 없는 상태에서 시작하는 게 버거운 순간이 온다. 그럴 때 필요한 건 바로 템플릿! 나도 몇 개 앱을 개발해보니 생각보다 따로 설정하기 귀찮은 부분이 있어 미리 설정을 다 해놓은 템플릿만 있으면 비즈니스 로직만 갈아끼우면 되니 편하겠다는 생각이 들었고, 그래서 오늘은 iCloud 동기화 기능이 담긴 Template Repository를 만들었다. 우선 XCode에서 사용할 수 있는 Project template 형태로 생성할까 했는데, 생성은 했는데 프로젝트를 생성할 때 팀 정보 입력하는 화면에서 안 넘어가는 이슈가 있었다. 그래서 아예 프로젝트덩어리째 템플릿화하는 방법을 생각했다. 깃허브에서 Template Repository 만들기 평소와 똑같이 깃허브에서 Reposit..

방금 있었던 일이다. 내가 초창기부터 런칭, 그리고 꽤 최근까지도 담당한 우리 회사의 서비스 상용 서버가 내려갔다. 그리고 약 15분만에 서버를 복구했다.(중간에 다른 문제로 시간이 좀 걸렸는데 그 문제만 아니었으면 더 빠르게 복구했을 것이라고 생각한다.) 사실 이렇게 서버 다운에 대응이 가능했던 이유가 있는데, 내가 서버 인프라 환경을 구축할 때 Prometheus + Grafana로 모니터링 시스템을 구축하며 서버가 다운될 경우를 대비해 메일이 전송되도록 해놨기 때문이다.(물론 서버 재시작 스크립트도 준비해놨다.) 사실 우리 회사는 자체 서비스가 처음이고, 작은 회사이니 해당 서비스 인프라 구축을 전적으로 내가 알아서 했는데, 모니터링 시스템을 구축해야겠다고 생각했었던 건 내가 다른 프로젝트들을 하며..