Open Hae-Riri opened 3 years ago
쿠버네티스 용어들 헷갈려서 내가 보려고 써 두는 구조...ㅎㅎ
쿠버네티스는 서버 한 대를 master로 쓰고 여기에 Node 라고 하는 여러 서버들이 연결된다. 이렇게 연결이 되면 하나의 쿠버네티스 클러스터 가 된다.
node.js 기반의 프로그램을 실행시키려 할때 일반 로컬에서 한다면 node.js 설치해서 동작시키면 됨. 근데 이걸 컨테이너에서 만들고 싶다면?!
# cat > Dockerfile
FROM node:12
COPY app.js/app.js
ENTRY POINT ["node", "app.js"]
node:12라고 태그 버전을 만들고, 미리 만든 app.js 소스코드를 안에 복사하면 아래와 같은 컨테이너가 됨. 미리 node:12라는 환경을 만든 다음에 거기에 app.js를 넣은 구조임.
근데 이걸 그냥 두면 안되고 누군가가 컨테이너를 실행하면 이게 자동으로 실행되게 만들어야겠지? 그 부분이 ENTRYPOINT ["node", "app.js"]임.
이제 이렇게 만들어진 컨테이너를 어떻게 동작시킬 수 있을까. 그걸 동작시킬 플랫폼이 필요한데 그 중 많이 쓰이는 게 도커임. rocket이라는 것도 있음.
docker build -t smlinux/nodeinfo:v1 //빌드
docker push smlinux/nodeinfo:v1 // push
docker images
이제 허브에 push 됐음. 허브에 저장된 수많은 컨테이너를 써보자.
$docker pull smlinux/nodeinfo:v1
$ docker create --nae app -p 80:8080 smlinx/nodeinfo:v1
$ docker start app
이제 8080 포트를 열고 클라이언트 커넥션을 listen하게 됨. 근데 여기서 -p를 통해 외부 80으로 들어오면 8080으로 연결해주었으므로 클라이언트 사용자가 10.100.0.104:80으로 접속하면 여기서 컨테이너의 호스트네임을 받게 됨.
가상머신과 컨테이너의 차이는 아니까 넘어감
도커로 세 개의 웹서버를 운영하고 있었는데 시스템 전체가 다운되면 어떻게 할까? 큰일나지? 그래서 멀티 호스트 도커 플랫폼을 만들게 됨. 시스템 하나에 도커를 운영하는게 불안하니까 되도록 분산해서.
이걸 근데 어느 도커에 어떤 컨테이너를 놓을지 누가 배치할까? 개발자가 하기엔 너무 번거롭다. 마치 오케스트라에서 지휘자가 이 음악에 잘 맞게 소리를 배치하는 것처럼, 컨테이너 오케스트레이션을 하자.
웹서버, 파이썬, node.js 등의 어플리케이션들을 아래 예시처럼 워커 노드 2개에 배치할거야. 누가? 지휘자가! 여기서의 지휘자는 control plane 이다. 한쪽 도커가 다운되면 거기에 있던 어플리케이션을 옮기기도 하고 적당히 배치하기도 하고.
이런 지휘를 쿠버네티스가 해줌.
현재의 해결 방안 : 일단 동의정보가 들어오는 것을 확인하고자 json을 별도 class로 직접 매핑한 뒤 이걸 다시 message builder로 각 필드로 넣어주었음. 그래서 결국 동의 정보가 response로 반환되긴 했으나, 코드가 좋지 못해서.. 좀만 더 json 매핑에 대해 알아볼 예정.
현재의 해결 방안 : 웹툰 동의 정보를 가져오기 위해 쓰이는 정보는 쿠키 내의 nid_inf, nid_aut, nid_ses이므로 이 세개를 가져와서 cookie를 생성해서 전달함. 이렇게 하면 웹툰 동의 정보는 가져와짐.
Mono (reactor publisher), fromFuture? webClient (armeria client) .execute, .aggregate, awaitSingle(coroutine)
braveClient( armeria.client.brave) ClientOption(armeria), factory ClientFactory(armeria) contentUtf8 jacksonObjectMapper(kotlin)
zipkinTracingDecorator
grpc interceptor kotlin(apply, as, let, ...) armeria(webClient) coroutine