Leethub v2 수정해서 NOTES.md 도 업로드 하기
·
devlog/etc
new UI가 적용되면서 기존에 동작하던 Leethub 앱이 동작하지 않게 되었다.이에 따라서 여러 개발자들이 v2, v3 등등 개선한 버전을 공유하고있다! 대부분의 케이스에서는 잘 동작하는 것 같다. 👍이렇게 동작하지 않는 이유로 검색하다가, algorithms 풀이를 한 repo에서 관리할수있게, 그리고 이걸 difficulty 기준으로 폴더 정리해서 나눌수있게! 해주는 블로그 글을 발견했다. 이렇게 정리하면 기존에 알고리즘 문제 풀이 하는 repo도 싹 정리가능해서 적용했다! 잘됨!잘 쓰다가, 문득 notes도 같이 업로드 되었으면 좋겠다! 는 생각에 기존 코드를 좀 뜯어 보기 시작했다.나는 지금 V2버전을 수정해서 사용하고있는데, 이 코드 기반으로는 notes가 업로드 되는 부분이 생략되어있다...
모바일, PC 화면 Nginx로 분기 처리하는 방법
·
DevOps/nginx
위의 네이버 화면 처럼, 접속하는 디바이스에 따라 모바일, PC 화면으로 분기 처리를 해야함! Proxy로 사용되는 Nginx로 해보자! 어떻게? error page named location header에 있는 user-agent 를 기반으로 분기 처리 error page 란? 에러가 발생한 요청을 지정한 uri로 redirect 하는 nginx module 400대 에러나 500대 에러의 redirect 설정을 하기 위해 보통 사용! → 하지만! 이미 사용하고있는 에러코드를 덮어쓸수는 없으니, error code 418을 사용해서 PC,mobile 분기 처리를 하도록 하겠다! 418 에러코드가 뭐지?? client error 응답 코드로 서버가 커피 내리기를 거부한다는 의미를 가진다 - 왜냐면 서버는..
[LeetCode] 347. Top K Frequent Elements
·
BE/algorithm
문제 링크 https://leetcode.com/problems/top-k-frequent-elements/description/ Intuition 주어진 array에서 가장 중복이 많은 k개의 element를 결과값으로 반환 그렇다면 정렬하고, 중복을 찾기 위해선 hash를 써야겠군 Approach hash를 쓰기 위해서는 python의 dictionary를 사용 가장 많이 중복되는 element 별로 저장된 dictionary를 그 후에 정렬! 정렬된 중복_숫자_맵 에서 k개의 key값을 반환 dict에서 get()함수는 parameter가 2개! 두번째 param은 optional로 조회하는 key 값이 없는 경우에 반환할 값을 설정 numMap[num] = numMap.get(num,0) → nu..
[LeetCode] 49. Group Anagrams
·
BE/algorithm
문제 링크 https://leetcode.com/problems/group-anagrams/description/ Intuition 동일한 길이를 가지고 동일한 문자열 구성을 가져야 하는 anagram! 그럼 저번에 문제 풀이 했을 때 처럼 set을 사용해서 풀어볼까? 그런데 이 전 문제와 다르게 grouping 해야하는 문제니까 hash 를 써야할듯 Approach 단어가 3글자라고 주어진 input에서 3개 묶음의 단어가 다 있으리라고는 보장 X 있는 element를 기준으로 hash에 저장해서 확인해야함 python에서 hash는? → dictionary! dict의 key 값은 정렬한 값으로 저장 → 모든 element가 정렬된 값을 기준으로 hasKey() operation을 해야하므로 valu..
[LeetCode] 1. Two Sum
·
BE/algorithm
문제 링크 https://leetcode.com/problems/two-sum/description/ Intuition 주어진 array의 element 중에 target 값으로 합의 수가 맞는 조합을 찾아야 하면..모든 element를 합해서 확인해 보자 first + second index element의 합을 확인하고 넘어가야 한다 Approach 당장 생각나는건...outer loop에서는 index 0 부터 좌항에 들어가는 인자를 iterate하고 inner loop에서는 우항에 들어가는 인자를 iterate 해서 둘의 합을 확인하는 방법 Complexity Time complexity: O(N^2) Space complexity: Code class Solution: def twoSum(sel..
[LeetCode] 242. Valid Anagram
·
BE/algorithm
Intuition Anagram은 주어진 문자열의 character를 재배치 했을 때에도 다 같은 구성의 character를 가지는 단어 혹은 문구를 뜻한다고 한다. 그러니 길이가 같아야지? 같은 구성의 character를 가져야하겠네? Approach 같은 구성의 문자를 가진것을 어떻게 비교하면 좋지? 정렬한 후에 같은지 확인하면 효율적이지 않을까 길이가 다른 경우는 먼저 False를 반환 하는게 좋을 것 같다 Complexity Time complexity: O(nlogn) 평균 / W.C (= worst case) 이유는 python의 sorted() 함수는 Timesort라는 정렬 알고리즘을 사용 Timesort 알고리즘이란? insertion sort 와 merge sort의 장점만을 합쳐서 만..
[LeetCode] 217. Contains Duplicate
·
BE/algorithm
Intuition python 으로 문제 풀이를 하기로 했으니 counter 함수를 사용해서 풀이하면 될것같다! Approach counter 함수로 첫번째 풀이를 했는데, time limit exceeded 가 떴음 두번째 제출에서는 set 자료구조를 사용해서 풀이 set은 중복을 허용 X 주어진 data set을 set에 넣으면 중복이 사라져서 전체 사이즈가 달라짐 set의 사이즈와 nums의 사이즈를 비교! Complexity Time complexity: first attempt: O(N^2) list.count() 함수는 내부적으로 모든 PyObject를 iterate 하고, 주어진 입력값과 compare 하기 때문에 O(N) complexity를 가진다 참고: https://stackoverf..
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 등 개인정보에 민감한 주문자에 대한 정보를 담고..