파이어베이스 기반의 SaaS로 짬.


세무법인쪽에서 구글 파이어베이스면 추후 AI/ML이랑 연동이 쉽다고(구글 제미나이때문에)


요청이 와서 작업함.


최종 완성본의 가격은 380만, 세무법인쪽은 서로 인맥이 있어서 추후에 다른 세무 법인에 소개해줄 수 있다고하여


추후에 커미션비 10% 떼주기로함.(계약했을시 소개료로)


파이어베이스에서 문서변경시 감지해서, 후속작업을 수행하기위해서


이벤트 기반 응답형 프로그래밍을 씀. 감사 로그 기록, 즉 특정 세무사가 작성할때 감사 로그를 남기기 위해서


트리거 함수를 기반으로 옵저버 패턴을씀


```

export const onClientWrite = functions

  .region('asia-northeast3')

  .firestore.document('clients/{clientId}')

  .onWrite(async (change, context) => {

    // 문서 변경 시 실행될 로직

  });

```

그다음 

사용자의 요청이나 명령을 캡슐화해서 실행 가능 단위로 처리함

HTTPS Callable 함수 사용해서 클라이언트 명령처리하는건 커맨드 패턴썼음

```
export const someCommand = functions
  .region('asia-northeast3')
  .https.onCall(async (data, context) => {
    // 인증 확인
    if (!context.au-th) {
      throw new functions.https.HttpsError('unau-thenticated', '로그인이 필요합니다.');
    }
    
    // 비즈니스 로직 실행
    // ...
  });
```

커맨드쪽은 추후에 핸들러 파이프라인을 표준으로 만들고

인증확인,권한 확인, 입력검증,비즈니스 로직,오류처리

이 순서가 반복되는데 여기에서 핸들러 자체를 만든 후 순수 비즈니스 로직만 input으로 받게 하는 식으로 핸들러로 만드는걸 생각중.

아마 리팩터링의 경우에 좀 더 고도화되면 할 예정

비즈니스 로직과 명령 요청을 분리해서 추후에 수정하기 쉽게 함

그다음에 쓴건 스케쥴러 패턴 정도일까

결과적으로 이번 서버리스 아키텍쳐를 만들면서 느꼈던것은 

추후 DB 멱등성 검증도 넣어야할 것이긴한데 아직은 고도화하기엔 시기상조인듯

다만 핸들러를 만든다면 팩토리 패턴으로 만들어야하는데, 이렇게 무거워질 경우 함수 실행속도가 느려지기때문에 zod 같은거 쓰고, 무거운 DB 초기화는

전역 스코프에서 싱글톤으로 처리해야 속도로 이상이 없을듯.

싱글톤을 안쓰고 싶긴하지만, 핸들러가 너무 많아지면 속도쪽 문제가 있어서, 전체 초기화같은 부분은 싱글톤을 여전히 쓰는게 빠르더라.

싱글톤은 쓰기 편하지만 가장 어려운 패턴이기도 한듯.