custom header 값을 nginx 로그로 찍기
·
DevOps/nginx
기본 http header들은 nginx 에서 제공하는 variable로 찍으면 되는데..어플리케이션에서 직접 생성한 `custom header` 는 어떻게 찍을까? 우선 nginx 에서 지원하는 variable 리스트 중에 `$http_name` 이라는 값이 있다. 저 뒤 `_name` 부분에 custom 하게 생성한 header의 이름을 넣어주면 log에 기록할 수 있게 된다! log_format에 아래와 같이 추가해주면! 예쁘게 잘 찍힐것! log_format main '$remote_addr $http_x_forwarded_for [$time_local] ' '$host $request $status $body_bytes_sent ' '$request_time $upstream_response_t..
[Redis] Sorted Sets
·
DevOps/cache
Keys 명령어 returns all keys matching pattern. O(N) 데이터가 많은 DB를 상대로 수행하는 경우에 성능저하 발생 리얼 환경에서 사용하는 것을 지양 해당 명령어는 디버깅, 키스페이스 레이아웃을 변경하는 것 같이 특별한 상황에만 사용하는 것을 권장. Sorted Sets O(log(n)) 중복이 없는 문자열 콜렉션. 모든 데이터는 score와 매핑되어서 정렬되고 데이터자체는 유니크한 값이지만, score는 중복 될 수 있다. Sorted Sets에 데이터가 등록될 떄 순서대로 등록되기 때문에 (등록된 이후에 후처리로 정렬하는 것이 아님), 데이터의 범위와 랭크를 아주 빠르게 구할 수 있다. 중간에 있는 데이터에 접근 하는 것도 굉장히 빠르게 처리 가능. 배민에서 사용한 대표..
[docker] docker-compose 업데이트! 무엇이 바뀌었고 언제까지 바꿔야 하는가?
·
DevOps/docker
무엇이 바뀌었는가 내부 코드 v1 은 python으로 개발됨 v2 는 Golang으로 개발! (from scratch!) standalone binary 파일이 아니라서 설치 방식이 v1과 좀 다름docker-compose → docker compose 명령어 사이에 - 없이 사용 가능 v1과 v2의 compatibility를 위해 compose-switch 유틸 제공 docker-compose python 코드를 docker compose Golang으로 converting! container 명명 방식 변경 언더스코어(_) 에서 하이픈 (-) 으로 변경 container 이름 기준으로 스크립트를 개발하였다면, -compatibility옵션을 사용하여 에러가 발생하지 않도록 설정 가능 BuildKit ..
[뉴비개발자 시리즈] 신입 개발자의 일탈 - 봇 만들기
·
devlog/etc
2017-09-29에 작성한 글을 옮겨왔습니다. 동기들 채팅방에서 썼던 봇에 관한 글입니다. 방정맞은 말투는 이해 부탁드립니다.. 지금 보니 신입이었을땐 딴짓도 개발로 했었네요 🙄 꿀잼 봇 만들기 도롱뇽농땡이봇이 일을 하고있다. 추석연휴를 맞아 봇을 하나 만들었습니다. 네 1분안에 완성 가능합니다. 예. 단축안해서 업무가 손에 안잡혀서 글 올려봅니다. 코드랄 것도 없지만 파이썬으로 ★우리회사★ 로 메세지를 날려보겠습니다. import requests, time, datetime, sys def let_the_world_know(): hook_url=[사내 메신저 채팅방 web hook url] image_url=[이미지 업로드된 cdn url] lunch_url=[세상에서 제일 중요한 그날의 점심 메뉴 ..
[Kotlin] Annotation Targets
·
BE
2019-06-12 에 작성한 글을 옮겨왔습니다. @Doc 어노테이션을 붙였을 때 문서화가 안되는 에러가 발생하였습니다. 디컴파일된 자바코드를 확인해보기 전까지는 다른 건 Java로 짰는데 이 클래스는 코틀린이라서 그런가? 라는 말도 안되는 의심을 했습니다..!:joy: 코틀린은... 코틀린의 property는 자바의 필드, getter, setter, 그리고 접근자의 파라미터로 해석될 수 있습니다. 그리고 코틀린의 property가 primary constructor에 선언 된 경우에는 생성자의 파라미터로도 해석이 됩니다. 의도하지 않은 방향으로 코드가 생성 될 수도 있으므로, annotation의 use-site 같이 명확한 용도를 정의해줘야 합니다. Annotation Use-site Targets..
[nginx] 서비스 점검공지 올리는 방법
·
DevOps/nginx
2019-03-04-nginx-점검-페이지.md 라는 이름으로 github.io 블로그에 올렸던 내용을 가져온 내용입니다. nginx 에서 간단하게 503 에러코드를 사용하여 점검페이지를 띄워보자 서비스 점검 공지 서비스 점검 공지 페이지가 사용되는 경우가 종종 있음. 장애 무중단이 불가능한 빅 업데이트 내가 속한 팀에서는 주로 위와 같은 사유로 점검페이지를 사용함. Nginx 를 L4 뒤, application 앞에 두는 구조이기 때문에 점검 페이지를 nginx 쪽에서 관리하고있음. 실제 점검 페이지는 html 파일로, 마크업/디자인 팀에서 전달받은 파일을 nginx 서버에 업로드 하여 사용함. nginx 설정 nginx에서 점검 페이지를 관리하려면 conf 파일에 수정을 해야함. http status..
Transactional + DDD
·
devlog/TIL
2019년 12월 16일에 notion에 작성한 글을 옮겨 왔다.@Transactional + DDDfun requestRefund(request: RefundRequest): RefundResponse { val paymentInfo = 결제클라이언트.get결제정보(request.orderNo) return refund(refundDomainService.register(request, paymentInfo))}보통 외부의 호출이 일어날떄 transaction을 분리하는 경우는 다음과 같다.transaction이 이미 열렸고, 외부 호출을 하는 경우 timeout 같은 에러 발생 시, 지연된 시간만큼 transaction을 물고 있기 때문에 좋지 않다. → db lock 발생 가능 (그런데 ..
[리팩토링] 에러로그 리팩토링에 대한 개발자1의 의식의 흐름
·
BE/BE
2019-04-11-errorlog-refactoring-devlog.md 라는 이름으로 이전 github페이지 블로그에 올렸던 글을 가져온 내용입니다. 2019년도 당시에 개발했던 내용에 대한 고민을 회고방식으로 남겼습니다. intro주문, 결제 관련 개발을 하는 파트에서 일하고 있는 개발자1입니다.   주된 업무를 마치고 잠시 쉬어가는 타이밍에 side task 정도로 기존의 에러로그 리팩토링을 진행하였는데, 간단한 업무였지만 나름의 (?!) 고민을 이것저것 하였습니다. 약간 생각의 흐름대로 작성한 리팩토링 고민 입니다. 업무를 요약하자면 다음과 같습니다.결제 관련한 에러로그를 찍을 때, 주문/결제관련 request model, 결제키를 가진 model 등 개인정보에 민감한 주문자에 대한 정보를 담고..