Hae-Riri / today-alcohol

오늘한주 - 술 레시피 공유 커뮤니티 모바일 앱
0 stars 0 forks source link

2021.07.28 #5

Open Hae-Riri opened 3 years ago

Hae-Riri commented 3 years ago

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

Hae-Riri commented 3 years ago

쿠버네티스 용어들 헷갈려서 내가 보려고 써 두는 구조...ㅎㅎ

쿠버네티스 overview

쿠버네티스는 서버 한 대를 master로 쓰고 여기에 Node 라고 하는 여러 서버들이 연결된다. 이렇게 연결이 되면 하나의 쿠버네티스 클러스터 가 된다.

image

image

image

image

컨테이너

node.js 기반의 프로그램을 실행시키려 할때 일반 로컬에서 한다면 node.js 설치해서 동작시키면 됨. 근데 이걸 컨테이너에서 만들고 싶다면?!

# cat > Dockerfile
FROM node:12
COPY app.js/app.js
ENTRY POINT ["node", "app.js"]

node:12라고 태그 버전을 만들고, 미리 만든 app.js 소스코드를 안에 복사하면 아래와 같은 컨테이너가 됨. image 미리 node:12라는 환경을 만든 다음에 거기에 app.js를 넣은 구조임.

근데 이걸 그냥 두면 안되고 누군가가 컨테이너를 실행하면 이게 자동으로 실행되게 만들어야겠지? 그 부분이 ENTRYPOINT ["node", "app.js"]임.

컨테이너 이미지

이제 이렇게 만들어진 컨테이너를 어떻게 동작시킬 수 있을까. 그걸 동작시킬 플랫폼이 필요한데 그 중 많이 쓰이는 게 도커임. rocket이라는 것도 있음.

도커에 컨테이너 빌드

허브에 저장된 컨테이너를 어떻게 쓸까

  1. 인터넷으로 허브와 연결이 가능한 리눅스 운영체제가 있음.
  2. 여기에 도커 플랫폼을 둠.
  3. 도커 커맨드를 실행해서 우리가 만들어놓은 컨테이너를 다운 받음. $docker pull smlinux/nodeinfo:v1
  4. 다운 받은 컨테이너를 실행시켜주면 도커 플랫폼에 컨테이너가 동작됨.
    $ docker create --nae app -p 80:8080 smlinx/nodeinfo:v1
    $ docker start app

    image 이제 8080 포트를 열고 클라이언트 커넥션을 listen하게 됨. 근데 여기서 -p를 통해 외부 80으로 들어오면 8080으로 연결해주었으므로 클라이언트 사용자가 10.100.0.104:80으로 접속하면 여기서 컨테이너의 호스트네임을 받게 됨.

가상머신과 컨테이너의 차이는 아니까 넘어감

쿠버네티스의 등장

image 도커로 세 개의 웹서버를 운영하고 있었는데 시스템 전체가 다운되면 어떻게 할까? 큰일나지? 그래서 멀티 호스트 도커 플랫폼을 만들게 됨. 시스템 하나에 도커를 운영하는게 불안하니까 되도록 분산해서. image

컨테이너 오케스트레이션

이걸 근데 어느 도커에 어떤 컨테이너를 놓을지 누가 배치할까? 개발자가 하기엔 너무 번거롭다. 마치 오케스트라에서 지휘자가 이 음악에 잘 맞게 소리를 배치하는 것처럼, 컨테이너 오케스트레이션을 하자.

웹서버, 파이썬, node.js 등의 어플리케이션들을 아래 예시처럼 워커 노드 2개에 배치할거야. 누가? 지휘자가! 여기서의 지휘자는 control plane 이다. 한쪽 도커가 다운되면 거기에 있던 어플리케이션을 옮기기도 하고 적당히 배치하기도 하고. image

컨테이너 계층 구조

image 이런 지휘를 쿠버네티스가 해줌.

Hae-Riri commented 3 years ago

오늘 한 일

과제 진행

  1. 웹툰 동의 정보 조회 확인
    • json to proto 문제
    • protobuf.util의 JsonFormat나 proto3의 json mapping 내용을 확인했는데 인수가 잘못되는 에러가 발생해서 메소드들을 활용하는 예제를 좀 더 알아보려 함.

      현재의 해결 방안 : 일단 동의정보가 들어오는 것을 확인하고자 json을 별도 class로 직접 매핑한 뒤 이걸 다시 message builder로 각 필드로 넣어주었음. 그래서 결국 동의 정보가 response로 반환되긴 했으나, 코드가 좋지 못해서.. 좀만 더 json 매핑에 대해 알아볼 예정.

    • 쿠키 파싱 문제
    • metadata(헤더)에서 "cookie"라는 키값 만 안들어오는 경우가 발생함.
    • 원인을 파악하지 못했음... "cookie" 대신 "coocoo"로 넣고 "coocoo"로 가져오면 잘 들어옴.

      현재의 해결 방안 : 웹툰 동의 정보를 가져오기 위해 쓰이는 정보는 쿠키 내의 nid_inf, nid_aut, nid_ses이므로 이 세개를 가져와서 cookie를 생성해서 전달함. 이렇게 하면 웹툰 동의 정보는 가져와짐.

이슈사항

내일 할 일

공부한 내용