728x90

터미널에서 대량의 로그 데이터를 다루는데 무척 유용한 명령이 awk 입니다. awk 는 기본적으로 파일 내의 컬럼 구분자가 공백이라는 가정하게 동작합니다. 데이터를 추출하려는 원본 로그 파일이 공백을 구분자로 이용하는 경우 문제가 없지만 CSV (Comma Seperated Value) 형태 혹은 파이프와 같은 구분자로 컬럼을 식별하는 경우에는 구분자가 어떤 문자인지 awk 에게 전달해 주어야 합니다.


[ 예시 로그 파일 ]

$ cat domain.log

2016-03-28, 09:00:00, www.samsung.com

2016-03-28, 09:00:00, www.naver.com

2016-03-28, 09:00:00, www.apple.com

...


위와 같이 사용자들이 접근한 도메인에 대한 이력을 정리한 로그파일이 있다고 가정해 보겠습니다. 각 도메인별로 사용자의 요청 횟수를 카운트 하고 싶다면 아래와 같은 명령이 머릿속에 떠오르실 겁니다. 


$ cat domain.log | awk '{print $3}' | sort | uniq -c | sort -rn


하지만 위의 명령은 awk 의 기본 구분자인 공백을 사용하기 때문에 원하는 결과가 제대로 나오지 않게 됩니다. 로그 파일이 콤마를 명시적인 구분자로 사용하고 있기 때문에 아래와 같이 awk 의 파라메터로 구분자를 알려주어야 합니다. 


$ cat domain.log | awk -F ',' '{print $4}' | sort | uniq -c | sort -rn


자주 사용하지만 자꾸만 잊어버리는 명령어들 시리즈였습니다 ;-)


728x90
728x90

터미널에서 다량의 로그, 텍스트 파일을 핸들링 할때 awk 명령을 파이프로 연결하여 작업하는 경우가 많습니다. 예를 들어 텍스트 파일의 첫번째 컬럼이 "A" 인 행의 세번째 필드를 출력하는 방법은 대략 아래와 같을겁니다.


$ cat sample.txt | awk '$1=="A" {print $3}'


그런데 가끔은 특정한 조건을 만족하는 행의 모든 내용을 출력하고 싶을 때가 있습니다. 컬럼이 몇 개 안된다고 하면 print 명령으로 모든 컬럼을 지정하면 되겠지만 컬럼이 많다면 쉽지 않습니다. 이때는 print 의 파라메터로 $0 을 넘기면 모든 컬럼이 출력되게 됩니다.


$ cat sample.txt | awk '$1=="A" {print $0}'


자주 사용하지 않으면 잊어버리기 때문에 기억을 위해 남겨둡니다.


- NoPD -

728x90
728x90

HTTP/2 에 대한 이야기들 중 근래에 가장 논란이 되고 있는 것 중 하나가 TLS 에 대한 요구사항일 것 같습니다. 처음 SPDY / HTTP/2 에 대한 이야기가 나오면서 TLS 가 필수 조건이라는 소식에 이제 웹 환경이 완전히 Secure 로 넘어간다는 생각들을 많이 했었습니다. 그런데 결국 TLS 를 이용해야만 한다는 것은 연결을 만드는 과정에 오버헤드가 발생한다는 것이고 Let's Encrypt 등의 도움에도 불구하고 서비스 혹은 상황에 따라 부담이 될 수 있는 여지가 있었습니다.


이 때문에 HTTP/2 Working Group 에서는 암호화 되지 않은 HTTP/2 프로토콜 스펙에 대한 이야기가 오가고 있었고 정확한 시점은 확인해 보지 못했지만 TLS 의 지원이 필수는 아닌 것으로 정리된 것 같습니다. 스펙상으로 이부분은 h2c 라는 용어로 통칭되고 있고 TLS 터널링을 이용하지 않은 Non-encrypted 전송에 대한 이야기라고 이해하시면 되겠습니다 (자세한 이야기는 여기에 : https://http2.github.io/faq/#does-http2-require-encryption)




다만 표준의 진행이 이렇게 가고 있다 하더라도 브라우저들이 HTTP/2 스펙을 구현한 상황을 확인해 보면 이야기는 다소 달라집니다. 현재까지 HTTP/2 를 지원하는 것으로 알려진 모든 브라우저들은 HTTP/2 프로토콜 이용의 조건으로 TLS Handshake 를 전제하고 있습니다. 웹 컨텐츠를 소화하는 방식이 웹 브라우저만 있는 것은 아니겠지만, 대다수가 브라우저 기반이라고 가정했을 때 원본 서버에서 HTTP/2 를 이용하기 위한 전제조건으로 TLS 를 제공해야 한다는 것은 변함이 없을 것 같습니다.


참고 : http://caniuse.com/#search=http2


- NoPD -


728x90
728x90

에디터를 여러가지 사용하다 보니 각 에디터마다 조금씩 다른 특성을 기억하기가 참 쉽지 않습니다. 그래서... 개인적으로 필요할 때마다 찾았던 내용들을 기록 차원에서 남겨봅니다. 혹여나 누군가 검색하다 이 글을 발견하게 되면 일말의 도움이라도 되길 기대하며...


[ 하고싶은 일 ]

잘 정제되어 나오지 않는 API 의 결과물을 가공하고 싶습니다. 

한줄로 연결되어 있는 문자열을 특정한 구분자를 기준으로 줄바꿈 할 수 있을까요?


[ 이렇게 하세요 ]

Sublime Text 의 Replace 기능을 이용해서 간단히 처리할 수 있습니다.

예를 들어 CSV 형태의 문자열이라면 "1, 2, 3, 4, 5" 의 식이겠지요

구분자가 ", " 이므로 이를 \n 으로 치환하면 됩니다.




참 쉽죠?



728x90

+ Recent posts