log 2021-11-15
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