1 minute read


blog

마크다운 기반 toc는 깃헙에서 보기에 좋으나, 블로그에서 이쁘지 않은 문제가 있다. 포스트 toc를 제거하고 블로그에서 전용 toc를 사용하도록 하는 쪽이 나을 듯한데, 테스트가 좀 필요하다.

project

epis

자동화를 위해, 환경 변수와 같은 설정들을 어떻게 해야 맞는 것일까 고민중, 각 설정들은 로컬/개발/배포 등 다양한 환경에서 다른 위치에 다른 값을 가질 수 있다:

  • env 환경변수
  • .env 파일
  • config 파일

등..

이러한 설정들을 깔끔하게 관리하고 빌드에 통합시키려면 어떻게 해야할까? 그런데, 일단 아래와 같은 링크의 설명을 보면, docker는 ‘한 번 빌드하여 모든 곳에서 실행’하는 것을 위한 도구이고, 가능하다면 그렇게 사용하는 것이 맞다. 그래서 빌드 타임 변수를 변경하여 사용하게 되면 매 번 빌드하게 되고, 비효율적인 프로세스가 된다.

https://stackoverflow.com/questions/29261811/use-docker-compose-env-variable-in-dockerbuild-file

그렇다면 어떻게 해야 할까?

카프카를 사용해보려 했으나, 상당히 사용법이 다르고 연결도 잘 되지 않아서 일단 일반 nest msa tcp transport를 사용하기로 했다.

여전히, docker-compose를 사용할 때 config 관리는 문제가 된다. nestjs에서 .env파일 설정을 읽으려면 ConfigModule을 사용해야 하는데, 기본 ConfigModule.forRoot() 함수를 사용하면 기본 .env를 읽게 된다. 나중에, docker 등 다양한 환경에서 실행을 고려하려면, 외부 변수에 따라 파일 경로를 바꿀 수 있도록 해야 하지 않나 싶다.

만약 개인 서버에 배포한다면 어떤식으로 배포라인을 구축해야 할까? 먼저, 개발환경은 맥 로컬에서 tmuxinator로 가능하다. 근데 배포라인은 가능하면 ci/cd로 github actions와 연동하고싶다.

  • spring에서와 마찬가지로, 메시지패턴 등 핸들러에서 여러 argument 사용할 때, nest js에서 @Payload 데코레이터 제대로 사용 안 하면 인수가 들어오지 않아 에러가 생긴다.

tcp 기반 msa로 돌렸고, .env 기반 설정 적용 완료. 다만 이렇게 되면, 서비스가 늘어날 수록 다른 모든 사용하는 서비스들을 등록시켜야 한다.

sport

bj 16951 - 블록 놀이

https://www.acmicpc.net/problem/16951

hint

처음엔 절댓값이 있는 줄 알았는데.. 아니다?? 그러면 그냥 계속 K씩 늘리기만 하면 되는문제.. 아 그런데, 그렇게까지 간단하진 않다. 시작값을 무엇으로 하냐에 따라 달라지기 때문이다. 아래와 같은 경우, 시작값을 2로 해야 최적이다.

4 1
1 3 4 5

따라서, 어떤 값을 기준으로 해서 일정한 간격을 가장 많이 가지는 경우를 찾아야 한다. 그러려면, 각 값을 K*idx만큼 빼서 생각하면 될 듯하다. 그 다음, 최빈값을 기준으로 생각.

그게 다인줄 알았는데, 상식적 제한 문제가 하나 더 있었다. 바로 가장 낮은 앞쪽 탑의 높이가 1이상이어야 한다는 것. 이것 때문에 2번 틀림.

py solution
def solve():
    from collections import Counter
    N,K=ria()
    arr=ria()
    sub=[]
    ans=0
    for idx,item in enumerate(arr):
        sub.append(arr[idx]-K*idx)
    cnt=Counter(sub)
    val=cnt.most_common()
    target=0
    for (start,cnts) in val:
        if(start>0):
            target=start
            break
    
    for item in sub:
        if(item!=target):
            ans+=1
    # print(sub, target)
    print(ans)
    pass

Comments