TIL
스터디 질문
*** 질문 1
헬스체크는 로드밸런서가 여러 서버에 요청을 보내고 응답을 받는식으로 일어나는데, 왜 옵저버 패턴이라던지 PUBSUB을 도입하지 않았을까
정답 1. 서버가 죽으면 못보냄
실제로 그런 방식은 따로 있음. 서비스 디스커버리
-
MSA환경에서는 서버가 시작되면 나 떴다고 레지스트리 서버에 등록한다. 여기서도 하트비트가 있어서 서버가 주기적으로 살아있다고 신호를 보낸다
-
수동적인 헬스체크도 있음. 주기적으로 찌르진 않겠는데, 만약 실제 요청을 보냈을때 500 뱉으면 그때 널 빼겠다
*** 고난이도 질문 2
내 데스크탑에는 윈도우와 리눅스가 듀얼부팅으로 되어있다. 이번에 블루투스 키보드를 샀는데 다음과 같은 현상이 일어난다.
- 윈도우와 페어링, 사용 굿
- 리눅스와 페어링, 사용 굿
- 윈도우로 돌아왔더니, 연결이 거부됨
- 이를 해결하기 위해 장치 제거 후 다시 페어링하니까 됐는데, 리눅스로 재부팅하면 리눅스에서 또 안됨
왜 이런 현상이 일어났을까
힌트 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대로 다중화 햇음. 앞단에 로드밸런서를 두고, 라운드 로빈으로 부하분산 시도.
그런데 이런 문제
- 로그인을 했는데 페이지를 이동하면 로그인이 풀린다.
- 장바구니에 물건을 담고 결제하려고 하면 장바구니가 비어있다.
힌트 : 다중화 이전에는 서버의 세션에 로그인 상태나 장바구니 정보를 저장했음. 그리고 이 상태에서 다중화를 했음.
3-1: 왜 이런 현상이 일어났을지 설명 서버 123 이 있는데, 로그인 요청이 1로 갔다가 이후 페이지 이동 요청이 2로 가서 서버2의 세션에 저장되어있지 않음
3-2: 로드밸런서의 설정을 변경하여 해결하는 방법
로드밸런서가 특정 사용자의 요청을 기억했다가 그 서버로만 보내기.
3-3 : 세션의 저장 위치를 변경하여 해결하는 방법
세션을 각 웹서버의 메모리가 아니라 Redis와 같은 별도의 외부 인메모리DB에 저장하고 공유하는 방식.
맨인더미들, 내가 네이버인척 해서 요청을 가로채서 허위답변