CS분야
11. JWT(Json Web Token)는 어떻게 동작하나요?
- JWT는 사용자 인증 정보를 JSON형태로 인코딩한 토큰이며, 서버가 서명을 추가해 위변조를 방지합니다. 로그인 시 서버가 사용자 정보를 바탕으로 JWT를 발급하고, 클라이언트는 이 토큰을 로컬 스토리지나 쿠키에 저장합니다. 이후 요청마다 JWT를 함께 보내면 서버는 서명을 검증해 사용자 신원을 확인합니다. 특징은 세션처럼 서버에 사용자 정보를 저장하지 않고, 토큰 자체에 인증 정보가 담겨있는 무상태 방식이라는 점입니다.
12. OAuth 인증의 흐름은 어떻게 되나요?
- 사용자가 소셜 로그인을 요청하면, 클라이언트는 사용자의 브라우저를 인증 서버로 리다이렉트를 합니다. 이후 사용자는 Google이나 Kakao 같은 OAuth 제공자에 로그인하고, 애플리케이션 접근 권한을 허용합니다. 그러면 인증 서버는 클라이언트에게 Authorization Code를 전달합니다. 클라이언트는 이 코드를 백엔드 서버로 전달하고, 백엔드 서버는 인증 서버에 해당 코드를 제출해 Access Token(필요 시 Refresh Token도 함께)을 발급받습니다. 이후 클라이언트는 이 Access Token을 이용해 사용자 정보 API를 호출하여 사용자 데이터를 가져올 수 있습니다.

13. 배열과 객체의 차이
- 배열과 객체는 모두 JavaScript의 자료 구조지만 데이터 저장 방식과 사용 목적이 다릅니다. 객체는 키-값 형태로 데이터를 저장하며, 특정 속성에 이름을 붙여 관리할 때 사용합니다. 배열은 순서가 있는 데이터 집합으로, 순서가 있는 리스트 형태의 데이터를 저장할 때 사용합니다. 배열은 반복 처리(map, filter 등)나 목록 데이터를 다룰 때 적합하고, 객체는 개별 속성을 가진 엔티티(유저 정보 등)을 표현할 때 사용합니다.
14. Stack과 Queue의 차이
- Stack과 Queue는 데이터 저장 및 꺼내는 순서가 다른 자료 구조입니다. Stack은 LIFO(Last In, First Out)구조로 나중에 들어온 데이터가 먼저 나갑니다. Queue는 FIFO(First In, First Out) 구조로 먼저 들어온 데이터가 먼저 나갑니다.
15. 성능 최적화를 위해 어떤 개선을 해본 경험이 있나요?
- (OpenMind)성능 최적화를 위해 리렌더링 최소화와 초기 로딩 속도 개선에 중점을 두었습니다. 먼저 useMemo, useCallback, React.memo를 활용해 불필요한 리렌더링을 최소화하고, 컴포넌트가 실제로 변경된 부분만 효율적으로 업데이트되도록 했습니다. 또한 스켈레톤 UI를 적용해 데이터 로딩 중에도 사용자에게 시각적 피드백을 제공하여 체감 성능을 높였습니다. 렌더링 구조 측면에서는 SSR과 CSR을 혼합해, 초기 화면은 서버에서 빠르게 렌더링하고 이후 상호작용은 클라이언트에서 처리하도록 구성했습니다. 즉, 렌더링 최소화 + 사용자 체감 속도 개선 + 서버/클라이언트 병행 최적화를 통해 전반적인 성능을 향상시켰습니다.
16. CSR만 사용하는 SPA의 단점은?
- CSR만 사용하는 SPA는 사용자가 처음 접속할 때 빈 HTML과 큰 JS 번들을 받아야 해서 초기 로딩 속도가 느릴 수 있고, JavaScript가 실행되기 전까지는 화면이 보이지 않아 초기 체감 UX가 떨어질 수 있습니다. 또한 렌더링이 브라우저에서만 이루어지기 때문에 검색 엔진 최적화(SEO)에 불리하고, JS 에러나 네트워크 환경 문제로 스크립트가 로드되지 않으면 페이지가 제대로 표시되지 않는 위험이 있습니다.
17. SEO가 무엇인지 설명하고, 개선을 위해 어떤 작업을 할 수 있을지 설명해 주세요.
- SEO는 웹사이트가 검색 엔진에 잘 노출되도록 최적화하는 작업을 말합니다. 이를 위해 시맨틱 태그와 구조화된 HTML을 사용해 페이지 의미를 명확하게 표현하고, title, description 같은 메타 태그를 최적화합니다. 또한 SSR/SSG를 적용해 검색 크롤러가 실제 콘텐츠를 바로 읽을 수 있게 하고, 이미지에 alt 속성을 추가해 접근성과 검색 인덱싱 효율을 높입니다.
18. 세션 기반 인증과 토큰 기반 인증을 비교해서 설명해 주세요.
- 세션 기반 인증과 토큰 기반 인증은 사용자의 로그인 상태를 유지하는 방식이 다릅니다. 세션 기반 인증은 사용자가 로그인하면 서버가 세션을 생성하고, 세션 ID를 쿠키로 클라이언트에 전달합니다. 이후 요청마다 쿠키를 전송하면 서버가 세션 저장소에서 상태를 조회해 인증을 처리합니다. 구현이 단순하고 보안적으로 안정적이지만, 세션 정보를 서버가 관리하기 때문에 서버 부하가 커지고 수평 확장에 불리한 단점이 있습니다. 반면 토큰 기반 인증은 로그인시 서버가 사용자 정보를 담은 토큰을 발급하고, 클라이언트는 이 토큰을 로컬스토리지나 쿠키에 저장합니다. 이후 요청마다 헤더에 토큰을 담아 보내면 서버는 별도의 세션 저장소 없이 토큰의 유효성만 검증합니다. 서버는 별도 상태 저장 없이 토큰의 유효성만 검증하므로 무상태 방식이라 확장성과 모바일/다중 서비스 환경에 유리합니다.