제네릭이란 무엇이고, 프로젝트에 적용사례가 있다면 설명해주세요.
제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법입니다.
저희 프로젝트에서 외부에서 같은 목적을 가지고 있는 클래스가 중복이 되는 경우가 있었습니다.
따라서 저희는 중복되는 클래스를 합치는데 서로 다른 인자를 받고있기에 가장 최상위 타입인 Object를 매개체로 사용한 클래스를 만들었었습니다.
하지만 들어오면 안되는 다른 오브젝트 타입이 왔을 때 에러가 나지 않았습니다. 저희의 코드의 목적과 일치하지 않았던 겁니다.
따라서 저희는 타입이 안전해지지 않는 상황을 해결하기 위해서 제네릭을 사용했습니다.
JWT토큰 인증에 대해 아는 만큼 설명해 주시겠어요?
JWT토큰은 인증인가 즉 로그인 기능에 사용됩니다.
여기서 인가(Authorization)에 해당하는 부분에 jwt토큰이 사용됩니다.
인가를 받을때마다 로그인을 하게된다면 아이디와 비밀번호를 가지고 다녀야해서 보안상으로 취약하고, 매번 암호화 알고리즘을 통해 비밀번호 인증을 해야하고, 그것을 데이터베이스에서 조회해야하기때문에 너무 무거운 작업이 됩니다.
따라서 인가를 가볍게 하기위해 세션과 Jwt 토큰 방식이 사용됩니다.
세션은 서버에 따로 로그인된 유저들을 모아 기억하는 방식입니다. 하지만 이 경우 서버가 여러대일 경우 모든 서버에 적는다는 부담, 혹은 다른 서버의 기능을 사용할때 옮겨 적어줘야한다는 부담, 로그인 유저만 적어놓는 휘발성 데이터베이스를 따로 만든다는 부담 등이 있습니다.
또 만약 서버가 닫히게된다면 로그인 한 모든 유저들이 튕기게 되는 좋지 못한 경우도 있을 수 있습니다.
이를 고안된게 jwt토큰방식입니다. jwt토큰값에는 여러 정보들이 들어있는데 이 정보들을 가지고 서버에서 허가해주는 정보만이 들어있다면 인가를 내려주는 방식입니다.
jwt토큰을 잘 보시면 점이 두개로 구분되어 있는것을 보실 수 있습니다.
(.)을 기준으로 2번째값(*페이로드) 에 해당 유저의 정보나 권한 범위등의 인가에 필요한 정보들과 토큰 유지시간을 넣어놓습니다.
하지만 이 토큰값이 해킹되고 2번째값의 권한 범위를 늘리는 등의 악용사례를 막기위해 첫번째(*헤더)와 세번째(*서명) 칸이 사용됩니다.
첫번째칸은 jwt라는 타입과 alg즉 알고리즘이 들어갑니다. 여기에는 3번 서명값을 만드는데 사용될 알고리즘이 지정됩니다. HS256등 여러 암호화 방식중 하나를 지정할 수 있습니다.
이를 통해 한쪽 방향으로는 계산이 되도 반대쪽으로는 안되는거라 가지고, 서버만 알고있는 비밀값을 알아낼 수 없게합니다.
이제 세번째칸에는 앞서 잠깐 말씀드린 서명값이 실려있습니다.
인가를 요청할 때 3번의 서명 값과 계산값이 일치하고, 유효기간도 지나지 않았다면 해당 사용자는 로그인 된 회원으로서 인가를 받습니다.
하지만 세션이 그렇다고 무조건 세션보다 좋다고는 하지 않습니다.
세션은 한번 발급된 토큰을 들여다보고 조작이 불가능하기 때문에 로그인된 유저를 로그아웃 시킨다는 등의 관리가 어려워집니다.
또 너무 오랜기간 인가코드를 받을수있는 토큰값을 제공할 경우 보안의 위험이 있어 짧은 시간의 토큰만 부여해주게 됩니다.
이를 보완하기 위해 access토큰과 refresh토큰 방식을 사용하여 기능구현을 많이 하지만 그럼에도 엑세스토큰이 살아있는 경우 이걸 바로 차단할 방법은 없습니다.
프레임워크와 라이브러리의 차이는 무엇인가요?
먼저 프레임워크와 라이브러리의 공통점은 남이 쓴 코드를 우리의 프로젝트를 위해서 가져다 쓰는것입니다.
이 둘의 차이점은 누가 코드를 조종하는가와 내가 정해진 규칙을 따르는가에 있습니다.
라이브러리는 개발자가 필요할때만 잠시 불러와 사용하고 필요없을 경우에는 사라져도 프로젝트에 영향을 끼치지 않습니다.
하지만 프레임워크는 개발자가 프레임워크를 부르는게 아닙니다.
프레임워크가 개발자를 다룬다고 표현하면 좋을것 같습니다. 프레임워크가 개발자에게 어디에 코드를 넣어야하는지 등의 규칙을 알려주게됩니다.
스택, 큐에 대해 설명해주실 수 있을까요?
먼저 스택과 큐는 자료구조가 큐 혹은 스택으로 구분되기 위한 규칙입니다. 이 자료구조들은 추상적 자료구조입니다.
스택은 마지막에 들어간것 부터 나오는 Last In Frist Out(LIFO)방식의 자료구조입니다.
큐는 처음에 들어간것 부터 나오는 Frist In Frist Out (FIFO)방식의 자료구조입니다.
스택은 주로 웹페이지에서 뒤로가기나 개발중 되돌리기의 작업에 사용됩니다. 유저가 하고있는 행동들을 스택에 저장해놨다가 마지막으로 작업된 순서대로 내보내는 것입니다.
큐는 주로 연산식에서 괄호의 수가 일치하는지 혹은 선착순 마케팅에 사용됩니다. 큐에 유저가 들어온대로 저장하여 들어온 순서대로 확인하게 되는것입니다.
JPA는 언제 필요하고 언제 필요하지 않은지 설명해주실 수 있을까요?
jpa의 장점으로는 특정 데이터베이스에 종속되지 않고, sql을 사용할 경우 데이터베이스 설계 중심의 패러다임으로 작성하게 되는데 jpa를 사용할 경우 객체지향적으로 설계가 가능합니다. 마지막으로 jpa에서는 테이블과 매핑된 클래스에 필드만 추가한다면 쉽게 관리가 가능합니다.
따라서 jpa는 여러 데이터베이스를 사용하거나, 데이터베이스를 자연스럽게 설계하고 싶을 경우, 데이터베이스를 편리하게 작업하고 싶을 경우 사용할 수 있을것 같습니다.
반대로 jpa의 단점으로는 복잡한 쿼리를 사용할 경우 jpa로만 작성을 하기 힘들다는 점과, 객체간의 매핑 설계를 잘못했을 경우의 성능저하등이 있기때문에
통계 처리 같은 복잡한 쿼리를 작성할 경우나, 너무 많고 복잡한 매핑 설계가 필요할 경우에 사용을 자제할 수 있습니다.
예상 꼬리 질문
- ORM이란 무엇인가요?
동기와 비동기를 비교하여 설명해주실 수 있을까요?
동기식은 한 함수가 실행되고 끝날때까지 기다려야 하는것이 동기식입니다.
비동기식은 함수를 실핼하고 끝남의 여부와 상관없이 바로 다음 코드가 진행되는것이 비동기식입니다.
동기식은 해당 함수가 실행되고 해당 함수의 리턴값이 필요할때 사용될 수 있습니다.
하지만 비동기식의 경우는 해당 함수가 실행되고 해당 함수의 실행 여부가 상관없을 경우 사용됩니다.
비동기식의 함수는 콜백함수에 함수 결과값이 저장됩니다.
TCP 3 way handshake에 대해 설명 해주시겠어요? (연결지향형 tcp 프로토콜)
먼저 TCP/Ip란 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합입니다.
여기서 TCP는 연결지향형 프로토콜입니다. TCP프로토콜은 데이터를 전송하기 전에 송신특과 수신특이 서로 연결되는 작업이 필요하는데 이러한 작업을 3 way handshaking이라고 합니다.
3 way handesake를 수행하기 위해서는 tcp 헤더에 표시한 플래그들이 사용됩니다. 이러한 플래그들을 컨트롤 비트라고 부릅니다.
3 way handshaking에서는 ack와 syn 플래그가 사용됩니다. 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보낸 후
서버는 SYN 요청을 받고 클라이언트에세 수락한다는 ack과 syn 플래그가 설정된 패킷을 보냅니다.
클라이언트는 다시 서버에게 ack 플래그를 보냅니다.
'🥸 CS 면접 스터디' 카테고리의 다른 글
웹 애플리케이션이란 무엇일까? (0) | 2023.04.24 |
---|---|
UNIX란? (0) | 2023.04.24 |
CS 스터디 4회차 정리 (1) | 2023.03.15 |
CS 면접 스터디 정리 3회차 (0) | 2023.03.10 |
CS 면접 스터디 정리 1회차 (0) | 2023.03.10 |