대표 포스트 OSIV 오피니언 DDD 도메인과 앱의 구분 실무 DB 설계 팁 JVM Stack 메모리 최신 포스트 시스템 디자인 알림 시스템 설계 알림 시스템 설계 시 구체화 해야 하는 명세들1. 알림의 종류 : 모바일 앱 푸시 / SMS / 이메일 → 알림의 종류별로 각기 다른 제3자 알림서비스를 사용해야 한다.2. 알림별 처리량(Throughput) : 1일 알림 건수 등 → 리소스 용량을 계획하는데 사용된다.3. 알림 실패 시 대응 정책 : 알림 실패시 재시도를 위한 장치가 필요하다. 4. 보안 수준 : 알림 발행 단계에서 보안을 위해 인증을 추가해야 한다. 알림 시스템의 구성1. 알림 발행을 위한 API2. 보안을 위한 인증 서비스3. 알림 내용 생성하기 위한 데이터베이스 및 캐시4. 메시지 큐5. 메시지를 읽고 알림서비스를 호출하는 알림 서버6. 실패 시 재시도 및 중복 방지를 위한 알림 로그7. 제3자 알림 서비스 메시지 큐 설계1... 시스템 디자인 분산 환경 ID 생성기 설계 트위터 스노우플레이크 접근법다음과 같이 64비트짜리 ID를 여러가지 섹션으로 구분하는 방법이다. 1비트 : 사인(sign) 비트로, 음/양을 구분한다.41비트 : 타임스탬프로, ID가 생성된 시점의 밀리초를 저장한다.5비트 : 데이터 센터 ID, 2^5 = 32개의 데이터센터를 허용한다.5비트 : 서버 ID, 데이터센터 당 32개의 서버를 허용한다.12비트 : 일련번호, 생성할때마다 1씩 증가 하며, 밀리초가 경과할때마다 0으로 리셋된다. 트위터 스노우플레이크의 한계타임스탬프는 2^41-1 = 2,199,023,255,551밀리초 = 약 69년까지 사용할 수 있다. 69년이 넘어가면 overflow가 발생하므로 이땐 새로운 체계로 아이디를 이전해야 한다. 마스터의 갯수 ID를 고유하게 발급하는 서버를.. Flutter setState() or markNeedsBuild() called during build 에러 원인과 해결 `setState() or markNeedsBuild() called during build` 에러의 원인정진규 Software Engineer 노션에 따르면 마치 Null Pointer Exception과 같은 광범위한 에러이다. 따라서 에러가 발생하는 시점에 관한 코드를 자세히 살펴보는 것이 좋다. 에러의 원인은 말 그대로 UI를 이미 빌드하고 있는데 해당 UI가 구독하고 있는 state에 변경이 일어나서 또 변경하게 생겼다는 것이다. `setState() or markNeedsBuild() called during build` 에러 원인 분석나의 경우에는 TestPage에 진입을 시도할 때마다 해당 에러가 발생하였다. 따라서 TestPage를 살펴보았다. TestPage는 TestState의 .. Flutter Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still active. 에러 원인과 해결 방법 기능 설명위 페이지는 `TestPage`이다. 들리는 단어와 일치하는 이미지를 클릭하면 되는 페이지이다. 오디오는 5초마다 한 번씩 재생되어야 하므로 `Timer`와 `AudioPlayer`가 필요하다. 두 객체는 `TestState`에서 관리된다. 증상문제는 다음과 같이 뒤로가기 버튼을 눌렀을 때 오디오를 강제로 종료하는 과정에서 발생하였다. `Navigator`에서 `pop` 되면서 TestPage가 `dispose` 될 때 `Timer`와 `AudioPlayer`를 삭제하려고 시도하자 `Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still a.. 시스템 디자인 TAO, Facebook의 분산 Social Graph TAO란?Facebook이 social graph를 서비스 하기 위한 데이터 모델의 구현체로 지리적으로 분산된 데이터 스토어이다. TAO의 목표기본적으로 1) 저지연성, 2) 고가용성, 3) 확장성, 4) 일관성을 지키고자 하지만, 조금 업데이트가 늦어도 문제 없다는 SNS의 특성에 따라 빠르게 읽기를 지원하는 대신 일관성 저하를 감수한다. 정리하면 다음과 같다. 저지연성(빠른 응답)↕ Trade-off, 저지연성을 위해 일관성 저하를 감수.일관성(데이터 업데이트가 빠르게 전역적으로 반영됨)고가용성(일부 장애가 발생해도 응답)확장성(스케일 아웃이 쉬워야 함) TAO의 차별점그래프 DB를 수평적으로 확장할 수 있도록 아키텍처를 설계했다는 점이 가장 특징적이다. 원래 그래프 DB는 노드간 탐색을 주로.. 이 블로그 인기 글 캐시 적중률(Cache hit ratio)과 캐시 적중률 높이는 법 Method Area 정의와 구성 JVM Stack 메모리의 정의와 구성 OSIV와 SSE