아이단은 어디갔을까

순간 순간이 소중한 목적지

envoy와 x-forwarded-proto 헤더 이슈

2019-12-05 Server DevOps Aidan.bae
게임서버를 할땐 x-forwarded 헤더에 대해 깊게 다룰일이 없었는데 프론트단부터 거치는 프록시 서버들이 많은 시스템을 운영하다보니 접속 클라이언트의 정보가 담긴 x-forwarded 헤더를 공부할 기회가 생겼다. x-로 시작하는 헤더는 사용자가 임의로 정의한 헤더를 나타냅니다. 근데 nginx등 오픈소스들이 워낙 많이 쓰이다보니 사실상 표준이 된 케이스가 x-forwarded-* 시리즈임. x-forwarded-for, x-forwarded-proto, x-forwarded-host 위 삼총사는 de-facto standard 헤더로 사실상 표준이 되어버린 헤더임. 이 삼총사는 한세트 묶음으로 보통 전달되며 클라우드 업계에서도 표준으로 자리잡고있음. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded 예를들면 아래처럼 사용될 수 있습니다. Continue reading

istio debug를 위한 controlZ 활용

2019-11-30 Server DevOps Aidan.bae
istio의 mixer는 서비스에 대한 원격 분석등의 수집을 도와주는 유연한 모델이다. 서비스 옆에 붙어 있는 istio-proxy들의 수집되는 정보들을 mixer를 통해 파이프라이닝 할 수 있다. 그림처럼 adapter api를 사용하기 때문에 다양한 어댑터를 사용해 확장성과 유연성을 다 갖춘 모델이다. istio 믹서에 문제가 생긴다면 서비스에 대한 수집 정보들에 영향이 생길 수 있다. 그러므로 특정 서비스에 라우팅이 안되고 모니터링상 이슈가 없었다면 로그나 수집 데이터를 생성, 운반하는 믹서에 이슈가 있는지 확인해보아야한다. istio는 쿠버네티스 대시보드처럼 손쉽게 istio의 현재 상태와 스코프 기능을 제공하는 controlZ라는 서비스를 제공하고있다. Continue reading

공유 메모리를 활용한 프로세스간 통신 with C

2019-08-14 Code DevOps Aidan.bae
어쩌다보니 c 프로그래밍을 깊게 해야될 일이 생겼습니다. 대학교때 너무 재미없어서 이쪽은 절대 안한다고 했었는데… 컴퓨터를 알아갈수록 로우한 프로그래밍 지식이 필요해지는 순간들이 자주 찾아오네요. 쓰레드간 통신이 아닌 멀티 프로세스 프로그래밍에서 프로세스간 통신을 위해 OS단에서 제공하는 ipc라는 녀석이 있습니다. 리눅스에서 제공하는 ipc(inter process communication)는 아래 3가지입니다. 공유 메모리 (Shared Memory) 세마포어 (Semaphore) 메세지 큐 (Message Queue) 그 중 첫번째 공유메모리는 아직도 자주 활용되는 녀석입니다. 공유메모리는 단어 뜻에서 알 수 있듯이 하나의 프로세스에서가 아니라 여러 프로세스가 함께 사용하는 메모리를 말합니다. Continue reading

MSA & kubernetes

2019-05-19 DevOps Server Aidan.bae
2016년 12월 발표자료이긴한데 MSA에 대한 이해가 한번에 되는 발표영상이다. 요즘 MSA에 대해 물어보는 동생들이 있어서 바로 추천해주는 영상! 인상적이었던 부분 인상적이었던 부분은 MSA와 팀모델에 대해 설명하는 부분이다. 컨웨이의 법칙 “소프트웨어의 구조는 그 소프트웨어를 만드는 팀의 구조와 일치한다.” ‘팀의 구조??’ 조대협님 왈: 개발 설계 백날 잘해봐야 소용없음 제대로된 팀 구조를 만드는 것이 설계 그다음은 알아서 됨 정말 크게 와닿는다. 게임즈에서는 서버팀이 혼자였기때문에 설계를 모노리틱하게 설계한 것도 있음. 하지만 서버팀이 인원이 늘었을 때도 모노리틱한 구조로 1인1프로젝트가 굉장히 불편했던 것은 맞다. Continue reading

쿠버네티스 느낌가져가기 1 - minikube

2019-05-01 DevOps Aidan.bae
쿠버네티스 개발환경을 구성하는 동기 퇴사 직전에 최대 관심사는 kubernetes였다. 카카오가 더이상 자회사에게 DKOS(메소스 마라톤) 서비스를 제공하지 않음에 따라 DKOS에 있는 개발환경을 어디론가 옮겨야하는 이슈에 직면했다. 인프라팀장님한테 물리서버 혹은 VM을 받아서 개발환경을 구축할 수 있다는 소식에 설레는 마음으로 쿠버네티스 책을 구매하고 이것저것 공부했지만 이것저것 딜레이가 되면서 퇴사때까지 해보지못한게 작은 한이 되었다. 메소스마라톤 환경을 직접 구성해보지 않았기 때문에 적당히 문제 없을 수준으로 공부하고 사용했었다. 그래서 부사수가 왔음에도 정확한 설명을 하지 못해 스스로에 대해 부족함과 아쉬움을 느꼈다. Continue reading

Docker Container 내부 소켓 상태 확인 - nsenter와 netstat

도커로 서비스 개발을 하다보면 상태 확인을 위해 호스트 머신이 아닌 컨테이너에 접근해야하는 경우가 생긴다. 호스트 머신 한 대에 여러 docker 서비스가 떠있을 수 있기 때문이다. (내가 이용 중인 AWS(ECS)도 내가 띄운 서비스 이외에 로그수집기, executor등의 또다른 docker 컨테이너가 떠있다.) 그러므로 호스트 머신에서 netstat 명령어는 모든 도커 서비스의 소켓정보들을 보여주기때문에 특정 서비스에 대한 스코프기능이 지원되지 않는다. 도커를 조금 이용해본 개발자라면 쉽게 docker exec 명령어로 해당 컨테이너에 접근해 내부에서 소켓상태를 살펴보려할 것이다. Continue reading

CPU 캐시 이해하기

2019-04-22 Server DevOps Aidan.bae
CPU 캐시란? 컴퓨터 시스템의 성능을 향상 시키기 위해 주로 CPU칩 안에 포함되는 빠르고 작은 매우 비싼 메모리입니다. 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어합니다. 대부분의 프로그램은 한번 사용할 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, cpu가 필요한 데이터를 캐시에서 먼저 찾도록 하면 향상시킬수 있다. 여기서 포인트는 데이터의 지역성을 활용한다! Continue reading
Older posts