> For the complete documentation index, see [llms.txt](https://injun-woo30000.gitbook.io/growth-log/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://injun-woo30000.gitbook.io/growth-log/daily-review/2021/may/2021-05-27-thu.md).

# 2021-05-27(Thu)

## Facts (사실, 객관)

* 과기부 장관님 방문시간에 맞춰서 스파르타42 회의에 참여했다.
* 사이드프로젝트 페블 회의를 진행했다.
* 코드숨 4주차 과제를 진행했다.
* 일전에 반납했던 책들을 다시 빌려왔다.
* 컨디션이 좋지 않아서 저녁 시간은 휴식을 취했다.

## Feelings (느낌, 주관)

장관님 방문 일정이 갑자기 오전으로 바뀌는 바람에 4시간 밖에 못 자서 아침에 피곤했다.

페블 회의를 진행했다. 기획자님이 넘겨준 플로우를 보고 시퀀스 다이어그램을 그린 다음, API와 DB를 설계할 예정이다. 컨벤션 관련해서 키워드를 던졌었는데, 다른 팀원들이 생각보다 너무 잘 조사해오셔서 놀랐다. 우린 commit은 type을 명시하지 않는대신 branch에 작업의 성격이 나타나도록 신경쓰기로 했고, git-flow 대신 github-flow를 우선 시도해볼 예정이다. java는 구글 컨벤션으로, API 문서는 swagger로 작성해보기로 했다. 새롭게 해보는 시도가 많아서 즐겁다.

오브젝트, 이펙티브 자바 책을 다 읽지 못하고 반납했었는데, 미련이 남아서 다시 빌려왔다. 어서 독파해봐야지!

컨디션 문제로 코드숨 4주차 과제에 몰입하지 못한 느낌이다. 아쉽다. 내일은 꼭 몰입해보자.

## Findings (배운 점)

### invocation에 대해서

코드숨 4주차 강의를 복습하는데, 아래 예제에서 나온 invocation 단어가 낯설게 느껴졌다.

```
given(taskRepository.save(only(Task.class)).will(invocation -> {
  return invocation.getArgument(0);
}))
```

이 단어는 다른 [BDDMockito 예제](https://www.baeldung.com/bdd-mockito#2-returning-a-dynamic-value)에서도 자연스럽게 나온다.

```
given(phoneBookRepository.contains(momContactName))
  .willReturn(true);
given(phoneBookRepository.getPhoneNumberByContactName(momContactName))
  .will((InvocationOnMock invocation) ->
    invocation.getArgument(0).equals(momContactName) 
      ? momPhoneNumber 
      : null);
phoneBookService.search(momContactName);
then(phoneBookRepository)
  .should()
  .getPhoneNumberByContactName(momContactName);
```

일단 네이버 사전에서는 영 알 수 없는 뜻이 나온다.

> invocation
>
> * **1.**(신을 향한) 기도\[기원], (권한을 지닌 이를 향한) 탄원\[호소], (혼·영감 등을 비는) 주문(呪文)\[기도]
> * **2.**(법적 권한 등의) 발동\[실시]

조금 더 찾아보니 [Java API 문서](https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Invocation.html)에 인터페이스로 명시되어 있었다.

> ```
> public interface Invocation
> ```
>
> A client request invocation. An invocation is a request that has been prepared and is ready for execution. Invocations provide a generic (command) interface that enables a separation of concerns between the creator and the submitter. In particular, the submitter does not need to know how the invocation was prepared, but only how it should be executed (synchronously or asynchronously) and when.

그리고 [스택오버플로우](https://stackoverflow.com/questions/2486885/java-method-invocation-execution)에도 아래 내용이 들어있는 글을 찾을 수 있었다.

> * *invocation* is the event of issuing the call to the method; technically - placing the method onto the stack
> * *execution* is the whole process of running the method - from invocation till completion. And *execution time* is period during which the method body runs.

정리하면

* invocation은 execution의 전단계로써 메서드를 호출하는 개념이다.
* 제네릭 인터페이스를 제공한다.
* creator와 submitter의 관심을 분리시킬 때 요긴하게 쓰인다. submitter는 invocation이 어떻게 준비되는지 알 필요가 없다. 그냥 invocation을 실행시킬 때 필요한 정보만 알고 있으면 되는 것!

### 그로스해킹 분석

그로스 해킹은 데이터를 바탕으로 성장을 집요하게 파고드는 것을 말한다.

그로스 해킹을 처음 시작한다면 퍼널(Funnel) 구축부터 하자.

퍼널 구축은 아래와 같이 하면 된다.

* 비즈니스 흐름 그리기
* 처음에는 가능한 상세하게
* 시작은 큰 숫자부터
* 끝은 Goal을 기반으로

퍼널 분석은 AARRR을 기본으로 적용해보자. Cycle을 만들 수 있어서 좋다.

* Acquisition(인입/획득): 시작은 광고부터, 최대한 많은 사람에게 서비스 노출시키기
  * KPI: 노출량, 클릭량, CTR, CVR, Conversion 등
* Activation(활성화): 본격적으로 서비스를 이용
  * KPI: DAU, WAU, MAU
* Retention(유지, 재방문): 지속적으로 서비스를 이용
  * KPI: Retention Ratio, Life Time, 재방문율
* Revenue(매출,수익): 유저가 수익/매출을 가져옴
  * KPI: 매출액, eCPM, 총 광고 노출량
* Referrer(추천): 유저가 다른 유저들을 데려옴
  * KPI: 신규인입중 추천을 통한 인입 비율, 가입자당 추천 비율

#### 참고

[그로스해킹 기초](https://www.slideshare.net/keunbongkwak/ss-127085496?next_slideshow=1)

## Affimation (자기 선언)

* 나는 학에 몰입하는 개발자다.
