Skip to content

[Feat] PostHog를 도입하고 analytics tracker 구조를 정리해요#500

Merged
PeraSite merged 7 commits intodevelopfrom
feat/posthog-event
Mar 17, 2026
Merged

[Feat] PostHog를 도입하고 analytics tracker 구조를 정리해요#500
PeraSite merged 7 commits intodevelopfrom
feat/posthog-event

Conversation

@PeraSite
Copy link
Member

@PeraSite PeraSite commented Mar 16, 2026

Summary

기존 EventLogger 중심 호출을 typed analytics event + tracker fan-out 구조로 바꾸고, Firebase와 PostHog를 같은 진입점에서 처리하도록 정리했어요.

  • core/commonAnalyticsEvent / AnalyticsTracker / AnalyticsIdentity 모델을 추가했어요.
  • app에서는 DefaultAnalyticsTracker가 Firebase/PostHog로 fan-out 하도록 구성했어요.
  • 로그인/로그아웃/유저정보/화면 진입/리뷰/지도/위젯 이벤트를 새 tracker 경로로 옮겼어요.
  • debug에서 PostHog 로그를 바로 확인할 수 있도록 debug 모드를 켰어요.
  • 관련 unit test를 새 구조에 맞게 보강했고 ./gradlew :app:testDebugUnitTest 통과했어요.
image

Describe your changes

  • core/common
    • EventLogger를 제거하고 typed analytics contract 및 payload/identity 모델을 추가했어요.
    • 기존 이벤트 enum 기반 호출을 sealed analytics event로 정리했어요.
  • app/analytics, app/di
    • DefaultAnalyticsTracker, FirebaseAnalyticsTracker, PostHogAnalyticsTracker, AnalyticsIdentityManager를 추가했어요.
    • Hilt multibinding으로 tracker fan-out을 구성했어요.
    • PostHog SDK 초기화와 debug 로그 활성화를 연결했어요.
  • presentation, domain
    • BaseActivity / BaseFragment / IntroActivity / Map / Review / Widget 등에서 새 tracker를 사용하도록 바꿨어요.
    • 로그인 이후 identify, 로그아웃 이후 reset, 유저정보 갱신 이후 identify 흐름을 연결했어요.
  • app/src/test
    • analytics 전용 unit test를 추가했어요.
    • 기존 ViewModel/UseCase spec을 새 analytics 의존성에 맞게 갱신했어요.

Issue

  • 없음

To reviewers

  • screen_view, app_launch, click_menu, write_review_v2 같은 기존 이벤트가 새 typed event로 동일하게 전달되는지 봐주세요.
  • 로그인 이후 identify, 로그아웃 이후 reset 흐름이 누락 없이 연결됐는지 봐주세요.
  • debug 환경에서 PostHog 로그와 session replay 설정이 의도한 수준인지 봐주세요.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 Pull Request는 앱의 분석 로깅 시스템을 현대화하고 확장성을 높이는 중요한 변경 사항을 포함합니다. 기존의 단일 EventLogger 객체에서 벗어나, 타입 안전성을 갖춘 AnalyticsEvent와 여러 분석 서비스(Firebase, PostHog)로 이벤트를 동시에 전송할 수 있는 AnalyticsTracker 팬아웃 구조를 도입했습니다. 이를 통해 분석 이벤트 관리의 일관성을 확보하고, 새로운 분석 요구사항에 유연하게 대응할 수 있는 기반을 마련했습니다. 사용자 로그인/로그아웃 및 정보 변경 시 분석 시스템에 정확한 사용자 식별 정보를 전달하는 로직도 함께 개선되었습니다.

Highlights

  • PostHog 도입 및 분석 트래커 구조 개편: 기존 EventLogger 중심의 분석 로깅 방식을 PostHog를 도입하고, Firebase와 PostHog를 동시에 지원하는 타입 기반의 AnalyticsEventAnalyticsTracker 팬아웃(fan-out) 구조로 전면 개편했습니다.
  • 사용자 식별 및 초기화 로직 강화: 로그인, 로그아웃, 사용자 정보(닉네임, 단과대, 학과) 변경 시 AnalyticsIdentityManager를 통해 분석 시스템에 사용자 정보를 식별(identify)하거나 초기화(reset)하는 로직을 통합하고 명확히 했습니다.
  • 기존 이벤트 로깅 시스템 마이그레이션: 앱 실행, 화면 진입, 리뷰 작성 및 완료, 지도 상호작용, 위젯 추가/삭제 등 기존에 EventLogger를 통해 기록되던 모든 분석 이벤트를 새로운 AnalyticsTracker 인터페이스를 사용하는 방식으로 전환했습니다.
  • Hilt를 이용한 의존성 주입 및 확장성 확보: Hilt 멀티바인딩을 활용하여 DefaultAnalyticsTracker가 여러 분석 트래커(Firebase, PostHog)에 이벤트를 분산 전송하도록 구성하여, 향후 다른 분석 도구 추가 시 용이하도록 확장성을 확보했습니다.
  • 디버그 환경 PostHog 로그 활성화: 디버그 빌드에서 PostHog SDK의 디버그 모드를 활성화하여 개발 중 분석 이벤트 및 세션 리플레이 로그를 즉시 확인할 수 있도록 설정했습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • app/src/main/java/com/eatssu/android/App.kt
    • PostHog SDK의 직접적인 초기화 로직을 제거했습니다.
  • app/src/main/java/com/eatssu/android/analytics/AnalyticsIdentityManager.kt
    • 사용자 식별(identify) 및 초기화(reset) 로직을 관리하는 클래스를 추가했습니다.
    • 이메일, 닉네임, 단과대, 학과 정보를 기반으로 사용자 식별 데이터를 구성합니다.
  • app/src/main/java/com/eatssu/android/analytics/AnalyticsIdentityProperties.kt
    • AnalyticsIdentity 객체를 속성 맵으로 변환하는 내부 확장 함수를 추가했습니다.
  • app/src/main/java/com/eatssu/android/analytics/ComposeAnalytics.kt
    • Compose 환경에서 AnalyticsTracker를 제공하기 위한 LocalAnalyticsTrackerProvideAnalyticsTracker 컴포저블을 추가했습니다.
  • app/src/main/java/com/eatssu/android/analytics/DefaultAnalyticsTracker.kt
    • 여러 AnalyticsTracker 구현체에 이벤트를 분산 전송하는 DefaultAnalyticsTracker를 추가했습니다.
    • 트래커별 이벤트 전송 실패 시에도 다른 트래커에 영향을 주지 않도록 예외 처리를 적용했습니다.
  • app/src/main/java/com/eatssu/android/analytics/FirebaseAnalyticsTracker.kt
    • Firebase Analytics에 이벤트를 전송하는 FirebaseAnalyticsTracker 구현체를 추가했습니다.
    • AnalyticsEvent를 Firebase Analytics의 logEvent 형식에 맞게 변환하는 로직을 포함했습니다.
  • app/src/main/java/com/eatssu/android/analytics/PostHogAnalyticsTracker.kt
    • PostHog에 이벤트를 전송하는 PostHogAnalyticsTracker 구현체를 추가했습니다.
    • AnalyticsEvent를 PostHog의 capture 형식에 맞게 변환하는 로직을 포함했습니다.
  • app/src/main/java/com/eatssu/android/di/AnalyticsModule.kt
    • 분석 관련 의존성 주입을 위한 Hilt 모듈을 추가했습니다.
    • Firebase Analytics 및 PostHog SDK 인스턴스를 싱글톤으로 제공합니다.
    • Hilt 멀티바인딩을 사용하여 DefaultAnalyticsTracker에 여러 AnalyticsTracker 구현체를 주입하도록 구성했습니다.
    • PostHog SDK 초기화 시 디버그 모드 및 세션 리플레이 설정을 적용했습니다.
  • app/src/main/java/com/eatssu/android/domain/usecase/auth/LogoutUseCase.kt
    • 로그아웃 시 AnalyticsTracker를 통해 사용자 식별 정보를 초기화하는 로직을 추가했습니다.
  • app/src/main/java/com/eatssu/android/domain/usecase/user/GetUserEmailUseCase.kt
    • 사용자 이메일을 가져오는 GetUserEmailUseCase를 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt
    • 사용자 닉네임, 단과대, 학과 정보 변경 시 AnalyticsIdentityManager를 통해 분석 시스템에 사용자 정보를 동기화하는 로직을 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt
    • 화면 진입 시 EventLogger.screenView 호출을 analyticsTracker.track(ScreenViewEvent)로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt
    • 화면 진입 시 EventLogger.screenView 호출을 analyticsTracker.track(ScreenViewEvent)로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/CafeteriaFragment.kt
    • 식사 시간 선택 및 요일 선택 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/info/InfoBottomSheetFragment.kt
    • 식당 정보 클릭 및 화면 진입 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuAdapter.kt
    • MenuSubAdapter 생성자에 AnalyticsTracker를 전달하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuFragment.kt
    • AnalyticsTracker를 주입받아 MenuAdapter에 전달하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuSubAdapter.kt
    • AnalyticsTracker를 주입받아 메뉴 클릭 이벤트 로깅에 사용하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewComposeActivity.kt
    • AnalyticsTracker를 주입받아 Compose 환경에 ProvideAnalyticsTracker를 통해 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt
    • 리뷰 작성 버튼 클릭 이벤트 로깅을 EventLogger에서 LocalAnalyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt
    • 리뷰 작성 완료 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt
    • 앱 실행 경로 및 화면 진입 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/login/LoginViewModel.kt
    • 로그인 성공 시 AnalyticsIdentityManager를 통해 사용자 식별 정보를 분석 시스템에 전달하는 로직을 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/map/MapFragment.kt
    • AnalyticsTracker를 주입받아 Compose 환경에 ProvideAnalyticsTracker를 통해 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt
    • 지도 필터 변경 및 제휴 식당 클릭 이벤트 로깅을 EventLogger에서 LocalAnalyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/map/MapViewModel.kt
    • 지도 필터 변경 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt
    • 문의하기 클릭 시 화면 진입 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/language/LanguageSelectorActivity.kt
    • AnalyticsTracker를 주입받아 Compose 환경에 ProvideAnalyticsTracker를 통해 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/myreview/MyReviewListActivity.kt
    • AnalyticsTracker를 주입받아 Compose 환경에 ProvideAnalyticsTracker를 통해 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/terms/WebViewActivity.kt
    • 웹뷰 화면 진입 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoViewModel.kt
    • 사용자 정보(닉네임, 단과대, 학과) 변경 시 AnalyticsIdentityManager를 통해 분석 시스템에 사용자 정보를 동기화하는 로직을 추가했습니다.
  • app/src/main/java/com/eatssu/android/presentation/util/AnalyticsUtil.kt
    • 화면 뷰 이벤트 추적 로직을 EventLogger에서 LocalAnalyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/widget/MealWidgetReceiver.kt
    • 위젯 제거 이벤트 로깅을 EventLogger에서 analyticsTracker로 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/widget/ui/WidgetSettingActivity.kt
    • AnalyticsTracker를 주입받아 Compose 환경에 ProvideAnalyticsTracker를 통해 제공하도록 변경했습니다.
  • app/src/main/java/com/eatssu/android/presentation/widget/ui/WidgetSettingScreen.kt
    • 위젯 추가 이벤트 로깅을 EventLogger에서 LocalAnalyticsTracker로 변경했습니다.
  • app/src/test/java/com/eatssu/android/analytics/AnalyticsIdentityManagerTest.kt
    • AnalyticsIdentityManager의 동작을 검증하는 단위 테스트를 추가했습니다.
  • app/src/test/java/com/eatssu/android/analytics/DefaultAnalyticsTrackerTest.kt
    • DefaultAnalyticsTracker의 동작을 검증하는 단위 테스트를 추가했습니다.
  • app/src/test/java/com/eatssu/android/analytics/FirebaseAnalyticsTrackerTest.kt
    • FirebaseAnalyticsTracker의 페이로드 변환 로직을 검증하는 단위 테스트를 추가했습니다.
  • app/src/test/java/com/eatssu/android/analytics/PostHogAnalyticsTrackerTest.kt
    • PostHogAnalyticsTracker의 페이로드 변환 로직을 검증하는 단위 테스트를 추가했습니다.
  • app/src/test/java/com/eatssu/android/domain/usecase/auth/AuthDelegatingUseCasesBehaviorSpec.kt
    • LogoutUseCase 테스트에 AnalyticsTracker 의존성을 추가하고 resetIdentity 호출을 검증했습니다.
  • app/src/test/java/com/eatssu/android/presentation/MainViewModelBehaviorSpec.kt
    • MainViewModel 테스트에 GetUserEmailUseCaseAnalyticsIdentityManager 의존성을 추가하고 사용자 식별 동기화 로직을 검증했습니다.
  • app/src/test/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModelBehaviorSpec.kt
    • WriteReviewViewModel 테스트에서 EventLogger 목킹을 제거하고 AnalyticsTrackertrack 호출을 검증하도록 변경했습니다.
  • app/src/test/java/com/eatssu/android/presentation/login/LoginViewModelBehaviorSpec.kt
    • LoginViewModel 테스트에 AnalyticsIdentityManager 의존성을 추가하고 로그인 후 사용자 식별 동기화 로직을 검증했습니다.
  • app/src/test/java/com/eatssu/android/presentation/map/MapViewModelBehaviorSpec.kt
    • MapViewModel 테스트에서 EventLogger 목킹을 제거하고 AnalyticsTrackertrack 호출을 검증하도록 변경했습니다.
  • app/src/test/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoViewModelBehaviorSpec.kt
    • UserInfoViewModel 테스트에 GetUserEmailUseCaseAnalyticsIdentityManager 의존성을 추가하고 사용자 정보 업데이트 후 식별 동기화 로직을 검증했습니다.
  • core/common/build.gradle.kts
    • Firebase Analytics 관련 의존성을 제거했습니다.
  • core/common/src/main/java/com/eatssu/common/EventLogger.kt
    • 기존 EventLogger 파일을 제거했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsEvent.kt
    • 타입 기반의 다양한 분석 이벤트를 정의하는 AnalyticsEvent 인터페이스와 구현체들을 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsIdentity.kt
    • 사용자 식별 정보를 담는 AnalyticsIdentity 데이터 클래스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsPayload.kt
    • 분석 이벤트의 이름과 속성을 담는 AnalyticsPayload 데이터 클래스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/analytics/AnalyticsTracker.kt
    • 분석 이벤트를 추적하고 사용자 식별을 관리하는 AnalyticsTracker 인터페이스를 추가했습니다.
  • core/common/src/main/java/com/eatssu/common/enums/EventType.kt
    • 기존 EventType enum 파일을 제거했습니다.
Activity
  • PeraSite님이 PostHog 도입 및 분석 트래커 구조 개편을 위한 초기 변경 사항을 제출했습니다.
  • 기존 EventLogger를 제거하고 새로운 AnalyticsTracker 인터페이스와 구현체들을 추가했습니다.
  • 앱 전반에 걸쳐 기존 분석 로깅 호출을 새로운 트래커 시스템으로 마이그레이션했습니다.
  • 사용자 식별 및 초기화 로직을 AnalyticsIdentityManager를 통해 통합 관리하도록 변경했습니다.
  • 새로운 분석 구조에 대한 단위 테스트를 추가하고 기존 테스트를 업데이트했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

애널리틱스 추적 시스템을 타입 안전하고 확장 가능하게 리팩토링한 점이 인상적입니다. AnalyticsTracker 인터페이스를 중심으로 Firebase와 PostHog 구현을 분리하고, Hilt를 이용한 의존성 주입과 fan-out 구조를 깔끔하게 구현했습니다. 전반적으로 코드 품질이 크게 향상되었습니다.

한 가지 작은 수정 사항을 제안합니다. DaySelected 이벤트에서 요일 값을 기존 EventLogger와 동일한 축약형으로 보내도록 수정하여 데이터 일관성을 유지하는 것이 좋겠습니다. 이 부분을 제외하고는 로그인/로그아웃 시 사용자 식별, PostHog 디버그 설정 등 요청하신 사항들이 모두 의도대로 잘 구현된 것으로 보입니다.

@PeraSite PeraSite self-assigned this Mar 16, 2026
@PeraSite PeraSite requested a review from HI-JIN2 March 16, 2026 08:56
Copy link
Member

@HI-JIN2 HI-JIN2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AnalyticsTracker를 PostHogAnalyticsTracker, FirebaseAnalyticsTracker가 상속받게 구현한게 OOP 스럽네요

core/common 말고 core/analytics 모듈로 분리하는것도 고려해봐도..? 좋을듯합니다

그리고 제가 생각했을때는 앱모듈에 analytics 관련 클래스가 너무 많아보여요. app 모듈이 아니라 feature 모듈로 나눠서 바꿨을때로 생각해도 현재 app 모듈에 있는 analytics 관련 클래스들이 feature모듈에 있을지 궁금합니다!

@PeraSite
Copy link
Member Author

AnalyticsTracker를 PostHogAnalyticsTracker, FirebaseAnalyticsTracker가 상속받게 구현한게 OOP 스럽네요

core/common 말고 core/analytics 모듈로 분리하는것도 고려해봐도..? 좋을듯합니다

그리고 제가 생각했을때는 앱모듈에 analytics 관련 클래스가 너무 많아보여요. app 모듈이 아니라 feature 모듈로 나눠서 바꿨을때로 생각해도 현재 app 모듈에 있는 analytics 관련 클래스들이 feature모듈에 있을지 궁금합니다!

사실 저도 core/analytics로 처음엔 나눴다가 다시 돌렸었습니다... core에서는 android, posthog, firebase 등 외부 종속성에 영향 받지 않는 순수한 타입 선언 등만 넣으려고 했었기 때문이에요!
의존성 방향도 무조건 app이 core에 의존하고, core는 app을 모르게끔 설계되어야 한다고 생각했습니다.

그런데 feature 모듈이라는 개념으로 app을 쪼개는 방향이라면, 당연히 feature 별로 나눌 것 같아요!
core/analytics에 순수 analytics 관련 인터페이스, data class를 선언하고, 이의 구현체가 feature/posthog, feature/firebase 등에 포함되고, app이 feature를 참조하는 식이겠죵

app -> feature -> core
이런 방향으로만 의존성을 가지게끔 설계하면 좋을 것 같습니다!
app은 android 관련된 모든 파일, feature는 android는 모르지만 외부 종속성(posthog 등)을 알고 있고, core는 순수한 타입이나 비즈니스 로직만 있는거죵.
그래도 여전히 feature를 쪼갠다는거 자체가 정말 작은 팀에서 유의미한가?는 확실히 고민해보아야 한다고 생각해요.

@PeraSite PeraSite merged commit a04254b into develop Mar 17, 2026
2 checks passed
@PeraSite PeraSite deleted the feat/posthog-event branch March 17, 2026 05:54
@PeraSite PeraSite mentioned this pull request Mar 17, 2026
@HI-JIN2
Copy link
Member

HI-JIN2 commented Mar 17, 2026

그래도 여전히 feature를 쪼갠다는거 자체가 정말 작은 팀에서 유의미한가?는 확실히 고민해보아야 한다고 생각해요.

@PeraSite 흐음 이건 저도 애매하다고 생각합니다. app에서 domain/data/presentation으로만 나눠도 괜찮을 것 같아요

@PeraSite
Copy link
Member Author

PeraSite commented Mar 17, 2026

그래도 여전히 feature를 쪼갠다는거 자체가 정말 작은 팀에서 유의미한가?는 확실히 고민해보아야 한다고 생각해요.

@PeraSite 흐음 이건 저도 애매하다고 생각합니다. app에서 domain/data/presentation으로만 나눠도 괜찮을 것 같아요

infrastructure 라는 패키지를 추가해서 posthog, firebase 등... 완전한 외부 의존성을 분리하는 것도 좋아보여요!
백엔드 개발할 때 domain, infrastructure로 나눠서 했었던 적이 있는데, 꽤 우아하게 구조가 짜여졌었거든요

@HI-JIN2 HI-JIN2 linked an issue Mar 17, 2026 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PostHog 이벤트 도입

2 participants