TIL

스터디 질문

*** 질문 1

헬스체크는 로드밸런서가 여러 서버에 요청을 보내고 응답을 받는식으로 일어나는데, 왜 옵저버 패턴이라던지 PUBSUB을 도입하지 않았을까

정답 1. 서버가 죽으면 못보냄

실제로 그런 방식은 따로 있음. 서비스 디스커버리

  1. MSA환경에서는 서버가 시작되면 나 떴다고 레지스트리 서버에 등록한다. 여기서도 하트비트가 있어서 서버가 주기적으로 살아있다고 신호를 보낸다

  2. 수동적인 헬스체크도 있음. 주기적으로 찌르진 않겠는데, 만약 실제 요청을 보냈을때 500 뱉으면 그때 널 빼겠다


*** 고난이도 질문 2

내 데스크탑에는 윈도우와 리눅스가 듀얼부팅으로 되어있다. 이번에 블루투스 키보드를 샀는데 다음과 같은 현상이 일어난다.

  1. 윈도우와 페어링, 사용 굿
  2. 리눅스와 페어링, 사용 굿
  3. 윈도우로 돌아왔더니, 연결이 거부됨
  4. 이를 해결하기 위해 장치 제거 후 다시 페어링하니까 됐는데, 리눅스로 재부팅하면 리눅스에서 또 안됨

왜 이런 현상이 일어났을까

힌트 1 : 블루투스는 블루투스 랜카드의 MAC주소를 사용하여 통신을 한다. 힌트 2: 블루투스는 대칭키 암호화를 이용한다. 힌트 3: Key 생성이 어디서 일어날지.

A1. 원인 분석 “문제의 핵심은 ‘식별자(MAC)는 같은데 암호키(Link Key)가 달라졌기 때문’입니다.”

하드웨어 식별: 윈도우와 리눅스는 같은 하드웨어를 쓰므로, 키보드에게 보내는 MAC 주소가 동일합니다. 키보드는 두 OS를 ‘동일한 컴퓨터’로 인식합니다.

키 불일치:

윈도우에서 페어링할 때 Key_A를 생성해 공유했습니다.

리눅스에서 페어링할 때 Key_B를 새로 생성했습니다.

키보드는 “아, 컴퓨터(MAC)가 암호를 Key_B로 바꿨구나”라고 생각하고 Key_A를 덮어씁니다.

인증 실패: 다시 윈도우로 오면, 윈도우는 여전히 Key_A를 내밀지만, 키보드는 Key_B만 알고 있으므로 “암호가 틀렸다”며 연결을 거부합니다.

A2. 해결 방안 “두 OS가 동일한 대칭키(Link Key)를 공유하도록 만들면 됩니다.”

윈도우와 리눅스 각각 페어링을 한 번씩 진행합니다. (최신 상태의 키를 확보하기 위함)

가장 마지막에 페어링한 OS(예: 리눅스)의 키 값을 확인합니다.

그 키 값을 복사해서, 연결이 안 되는 OS(윈도우)의 레지스트리나 설정 파일에 덮어씌웁니다.

이렇게 하면 키보드, 윈도우, 리눅스 셋 다 하나의 동일한 대칭키를 가지게 되어, 어느 OS로 부팅하든 재페어링 없이 연결됩니다.


기똥찬 문제 3

쇼핑몰 웹사이트 백엔드 개발자임. 웹서버를 3대로 다중화 햇음. 앞단에 로드밸런서를 두고, 라운드 로빈으로 부하분산 시도.

그런데 이런 문제

  1. 로그인을 했는데 페이지를 이동하면 로그인이 풀린다.
  2. 장바구니에 물건을 담고 결제하려고 하면 장바구니가 비어있다.

힌트 : 다중화 이전에는 서버의 세션에 로그인 상태나 장바구니 정보를 저장했음. 그리고 이 상태에서 다중화를 했음.

3-1: 왜 이런 현상이 일어났을지 설명 서버 123 이 있는데, 로그인 요청이 1로 갔다가 이후 페이지 이동 요청이 2로 가서 서버2의 세션에 저장되어있지 않음

3-2: 로드밸런서의 설정을 변경하여 해결하는 방법

로드밸런서가 특정 사용자의 요청을 기억했다가 그 서버로만 보내기.

3-3 : 세션의 저장 위치를 변경하여 해결하는 방법

세션을 각 웹서버의 메모리가 아니라 Redis와 같은 별도의 외부 인메모리DB에 저장하고 공유하는 방식.

맨인더미들, 내가 네이버인척 해서 요청을 가로채서 허위답변

results matching ""

    No results matching ""