🐤 WebRCT vs WebSocket
1. WebSocket
- 기본 http 프로토콜은 서버가 브라우저의 요청에 응답하고 나면 브라우저-서버 간 통신이 끝남! 그렇기 때문에 티키타카가 안 됨
- 원하는 순간까지 통신이 열려있게 하기 위해 웹소켓이 대두
- 브라우저, 서버 둘 다 메세지를 보내고 받을 수 있음. (서버와 클라이언트 실시간으로 양방향 통신 가능케 함)
- 주식거래, 채팅, 게임 등 리얼타임 경험을 위해 만들어짐.
- person to person이 아니라 모두 다 같은 웹소켓 서버에 접속해 정보를 주고받기 때문에 메모리 파워가 중요
2. WebRTC
위의 정보들을 ICE가 가지고 있다가 P2P 연결을 가능하게 하도록 최적의 경로를 찾아주는 프레임워크가 ICE 프레임워크
질문
-
왜 webRTC와 webSocket을 둘 다 사용하였는지? (둘 중 하나만 사용해도 됐을텐데)
-
WebRTC의 장단점에 대해 말씀해주세요.
- 장점
1) 중개 서버를 거치지 않기 때문에 빠르고 지연이 적음
2) HTTPS 강제되기 때문에 보안 보장
3) 비디오, 오디오 높은 품질
4) 플랫폼 간 지원 : 브라우저가 WebRTC를 지원하는 경우 모든 데스크톱 또는 모바일 운영 체제에서 잘 작동합니다. 이러한 방식으로 소프트웨어 개발 비용을 크게 절감할 수 있습니다.
- 단점
1) 메모리 많이 요구하여 큰 스케일의 작업 어려움 (트위치나 아프리카처럼 몇십만명이 동시에 들어오는 방송 불가)
2) 추가 서버가 필요없는게 WebRTC의 장점이지만, IP를 알아야하기 때문에 STUN, TURN 서버가 필요함
-
WebRTC의 STUN 서버와 TURN 서버에 대해 설명해주세요.
- STUN : Session Traversal Utilities for NAT, 공개 주소를 발견하거나 Peer 간 직접 연결을 막는 등 ICE를 보완하는 프로토콜. 해당 Peer의 public IP 주소를 보내는 역할
- TURN : Traversal Using Relays around NAT, STUN의 확장으로, NAT 보안 정책이 너무 엄격하거나 NAT 순회를 하기 위해 필요한 NAT 바인딩을 성공적으로 생성할 수 없는 경우에 사용. 각 Peer들이 직접 통신하는 것이 아니라 릴레이 역할을 하게 해줌. 때문에 클라이언트와의 연결을 거의 항상 보장하지만 STUN에 비해 리소스 낭비가 심함.
-
WebRTC와 Web Socket 각각의 개념과 차이점에 대해 말씀해주세요.
🐤 JWT
JWT란?
- JSON Web Token, 토큰 기반 인증
- Header, Payload, Signature로 이루어짐
- Header : 사용할 타입과 알고리즘(HS512 등)
- Payload : Claim(서버에서 첨부한 사용자 권한 정보와 데이터, key-value 형식)
- Signature : private key로 서명한 전자서명. 헤더와 페이로드가 변조되었는지 확인하기 위해 사용되는 중요 정보. JWT를 신뢰할 수 있는 토큰으로 사용할 수 있는 근거가 됨
- 왜 나오게 되었는가?
- 세션 방식을 사용하면 세션ID를 HttpResponse의 쿠키값에 세팅해 사용자에게 보내야한다. 이 후 사용자가 권한이 필요한 요청을 서버에 보낼 때 세션ID를 보내고, 서버는 해당 세션ID가 서버에 있는지 확인하고 인가할지 정한다.
- 이 때 여러대의 서버를 사용한다면 다른 서버로 접근했을 시 인가가 불가능함!! (1번 서버에서 발급된 세션ID로 2번 서버에서 인가과정 시도할 수 없음.)
- JWT는 인가에 대한 정보를 토큰에 담고 있기 때문에, 사용자의 요청이 있을 시 토큰만 확인하면 되므로 세션 관리가 필요 없어짐 (세션 사용하면 서버의 세션 저장소에 인증 내용 담음)
장단점
- 장점
1) 토큰에 정보 담고 있으므로 별도의 저장소 필요 없음
2) 서버의 무상태 보장 가능 (unlike 세션)
3) 모바일에서도 작동 가능
- 단점
1) 토큰 길이가 길어서 인증 요청이 많아질수록 네트워크 부하 심해짐
2) 토큰 탈취 당하면 대처가 어려움
- 참고 : https://velog.io/@u-nij/JWT
질문
- JWT의 개념과 알고 있는 주요 키워드에 대해 말해보세요.
- 토큰
- Access/Refresh
- Stateless
- JWT 활용해서 로그인하는 과정을 설명해주세요
1) ID, PW 로 서버에 로그인 요청
2) 로그인 후 JWT 생성해 클라이언트에게 발급
3) Access Token 사용해 API 요청 -> 만료됐으면 Refresh Token 사용해 확인하고, 새로운 Access Token 발급 받음.
🐤 DB설계
질문
- 데이터베이스 설계할 때 특별히 주의한게 있다면?
- 스터디라는 행위와 통계를 어떻게 분리해서 테이블을 짤지?
- 스터디 게시글 / 스터디 참가 명단 / 통계
- 스터디 게시글 / 스터디 참가 명단 / 스터디 참가 이력 / 통계 / 채점표
=> 통계와 채점표를 따로 분리할지? 채점표는 개별 스터디에만 해당하고 통계는 마이페이지에서 볼 수 있는 스터디 누적 통계. 한 스터디 끝날 때마다 바로 통계에 누적할지 vs 채점표 테이블을 따로 만들지
=> 여러명이 한 사람에 대한 채점을 하는 것이므로 스터디 끝날 때 한꺼번에 처리한 후, 평균을 계산하는게 오차가 없으리라고 판단, 채점표 테이블 따로 만들어서 계산 후 통계에 넘김
- mysql의 쿼리 속도 개선 방법엔 어떤게 있을까요?
🐤 인성 및 기타
질문
- heap 영역이 무엇인가요 (대구은행 질문)
- Redis 사용한 이유?
- 인생을 살면서 겪은 가장 큰 일탈은 무엇인가요?(대구은행 질문)
- 개인의 이익과 윤리 사이에서 무엇을 중시하는지?
- 프로젝트를 진행하며 경험했던 문제와 해당 문제를 어떻게 해결했는가?
- 너의 성격적 단점이 무엇이고, 그런 성격을 가진 팀원과 일하게 된다면 어떻게 할건지?