
매일 할 일 ✅ ❌
✅ 1일 1커밋
❌ 1일 1알고리즘 문제 풀이
✅ 1일 2기술면접 개념 정리
31. 대용량 트래픽 발생 시 어떻게 대응해야 하나요?
32. ORM을 사용하면서 쿼리가 복잡해지는 경우에는 어떻게 해결하는게 좋을까요?
33. GET, POST의 개념과 함께 데이터 흐름에 대해서 설명해주세요.
34. OSI 7계층에 대해 아는대로 설명해주세요.
각 계층은 그 자체로 독립적이며, 상위 계층은 하위 계층의 서비스를 활용하여 데이터를 처리하고 전달합니다. 이러한 계층화 구조를 통해 서로 다른 하드웨어 및 소프트웨어 시스템 간의 통신을 효과적으로 관리하고, 상호 운용성을 확보할 수 있습니다. 이 모델은 컴퓨터 네트워크 및 통신 시스템의 설계와 이해에 중요한 도구로 사용됩니다.
35. 세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.
세션 기반 인증(Session-Based Authentication):
서버 측 저장: 세션 기반 인증은 사용자 인증 정보(예: 로그인 상태)를 서버 측에 저장하고 관리합니다. 일반적으로 서버는 사용자 세션을 유지하기 위해 메모리나 데이터베이스에 정보를 저장합니다.
쿠키 사용: 일반적으로 세션 ID가 쿠키를 통해 클라이언트에게 전달됩니다. 클라이언트는 이 세션 ID를 요청 헤더에 포함하여 서버에 요청을 보냅니다. 서버는 세션 ID를 확인하고 해당 세션에 연결된 사용자 정보를 검색합니다.
서버 측 유지: 세션은 서버 측에서 유지되므로 클라이언트는 세션에 대한 관리나 저장을 하지 않습니다. 이는 클라이언트에게 상대적으로 덜 부담을 주는 장점일 수 있습니다.
로그아웃 및 세션 관리: 로그아웃은 서버 측에서 관리되며, 세션의 만료 시간을 설정하여 세션 관리가 가능합니다.
토큰 기반 인증(Token-Based Authentication):
서버 측 저장 없음: 토큰 기반 인증에서는 서버 측에 사용자 정보를 저장하지 않습니다. 사용자 정보는 토큰 자체에 포함되어 있거나, 토큰이 서버 측에서 검증될 수 있는 정보를 가지고 있습니다.
토큰 사용: 사용자는 인증 후 서버로부터 토큰을 받습니다. 이 토큰은 일반적으로 클라이언트 측에 저장됩니다(로컬 저장소, 쿠키, 브라우저 메모리 등).
클라이언트 측 유지: 토큰은 클라이언트 측에서 유지되며, 클라이언트는 토큰을 서버에 제공하여 자격 증명을 확인합니다.
로그아웃 및 토큰 관리: 로그아웃 및 토큰 만료는 클라이언트와 서버 간의 상호작용으로 이루어집니다. 토큰에는 유효 기간을 설정할 수 있어서 클라이언트 측에서 관리됩니다.
차이점 요약:
36. JWT, Refresh, Access Token에 대해서 설명해주세요.
JWT (JSON Web Token):
Access Token:
Refresh Token:
37. OAuth에 대해서 설명해주세요.
OAuth(Open Authorization)는 인터넷을 통해 다른 웹 서비스 또는 애플리케이션에 대한 제한된 액세스 권한을 부여하기 위한 권한 부여 프레임워크입니다. OAuth는 사용자 또는 서비스 소유자의 동의를 기반으로 다른 서비스 또는 애플리케이션에 대한 인증 및 권한 부여를 가능하게 합니다. OAuth는 다양한 웹 서비스 및 API에서 사용자 인증 및 권한 부여를 구현하는 데 널리 사용됩니다.
OAuth의 핵심 요소와 개념은 다음과 같습니다:
인증 서버(Authentication Server): OAuth 프로토콜을 사용하는 애플리케이션은 사용자 인증을 위해 인증 서버에 의존합니다. 인증 서버는 사용자를 식별하고 인증을 수행합니다.
클라이언트(Client): OAuth를 사용하는 웹 애플리케이션 또는 서비스를 클라이언트라고 합니다. 클라이언트는 사용자의 데이터에 액세스하려는 애플리케이션을 나타냅니다.
리소스 서버(Resource Server): 사용자 데이터 또는 서비스에 대한 액세스가 필요한 서버 또는 API를 리소스 서버라고 합니다.
리소스 소유자(Resource Owner): 리소스 서버의 데이터를 소유하거나 제어하는 사용자를 리소스 소유자라고 합니다.
액세스 토큰(Access Token): OAuth 프로세스를 통해 클라이언트가 리소스 서버에 액세스하기 위한 권한을 부여하는 토큰입니다. 이 토큰은 제한된 권한을 가지며, 유효 기간이 제한되어 있습니다.
OAuth 프로세스는 다음과 같은 단계로 진행됩니다:
애플리케이션 등록: 클라이언트 애플리케이션은 OAuth 프로토콜을 사용하기 위해 인증 서버 및 리소스 서버와 등록합니다.
사용자 인증 및 권한 부여: 클라이언트는 사용자를 인증하기 위해 인증 서버로 리다이렉트하고, 사용자는 자신의 자격 증명으로 인증합니다. 그러면 사용자가 액세스할 수 있는 리소스의 범위를 선택하고, 권한을 부여합니다.
액세스 토큰 요청: 인증이 성공하면 클라이언트는 액세스 토큰을 요청합니다. 이 요청은 권한 코드(authorization code)나 리소스 소유자의 자격 증명(비밀 번호)을 사용하여 이루어질 수 있습니다.
액세스 토큰 발급: 인증 서버는 클라이언트에게 액세스 토큰을 발급합니다.
액세스 토큰을 사용한 리소스 서버 액세스: 클라이언트는 액세스 토큰을 사용하여 리소스 서버에 액세스하고, 사용자의 데이터나 서비스를 요청합니다.
OAuth는 클라이언트가 사용자의 비밀 정보를 저장하거나 전달하지 않도록 하며, 사용자가 클라이언트 애플리케이션에 대한 제어를 유지하면서 다른 서비스와 상호작용할 수 있는 표준 방법을 제공합니다. 이것은 많은 웹 및 모바일 애플리케이션에서 소셜 미디어 로그인, API 액세스 및 권한 부여 등에 사용됩니다.
38. HTTP 상태코드에 대해서 설명해주세요.
HTTP(하이퍼텍스트 전송 프로토콜) 상태 코드는 웹 서버가 클라이언트에게 반환하는 3자리 숫자 코드입니다. 이 코드는 클라이언트에게 현재 요청의 결과를 나타내며, 클라이언트와 서버 간의 통신에서 중요한 역할을 합니다. HTTP 상태 코드는 요청이 성공했는지, 실패했는지, 그리고 실패한 경우 그 이유를 알려줍니다.
HTTP 상태 코드는 다음 세 가지 범주로 나눌 수 있습니다:
1xx (Informational - 정보): 요청이 받았으며 처리 중임을 나타내는 상태 코드입니다. 실제 응답은 아직 도착하지 않은 상태이며, 클라이언트는 기다려야 합니다.
2xx (Successful - 성공): 요청이 성공적으로 처리되었음을 나타내는 상태 코드입니다. 가장 흔한 상태 코드는 200(OK)이며, 요청이 성공했고 클라이언트는 응답을 받습니다.
3xx (Redirection - 리디렉션): 추가 조치가 필요한 경우를 나타내며, 요청을 다른 위치로 리디렉트해야 합니다.
4xx (Client Error - 클라이언트 오류): 요청에 오류가 있거나 요청을 처리할 수 없는 경우를 나타내는 상태 코드입니다. 예를 들어, 404(Not Found)는 요청한 리소스를 찾을 수 없음을 의미합니다.
5xx (Server Error - 서버 오류): 서버가 요청을 처리하는 동안 오류가 발생한 경우를 나타내는 상태 코드입니다. 예를 들어, 500(Internal Server Error)는 서버에서 내부 오류가 발생했음을 의미합니다.
39. CI/CD에 대해서 설명해주세요.
CI/CD는 소프트웨어 개발 및 배포 프로세스를 자동화하고 향상시키기 위한 개념과 방법론을 나타내는 용어입니다. CI는 "지속적인 통합(Continuous Integration)"의 약자이며, CD는 "지속적인 전달(Continuous Delivery)" 또는 "지속적인 배포(Continuous Deployment)"의 약자입니다. 이 두 가지 개념은 소프트웨어 개발 및 배포의 효율성과 품질을 향상시키는 데 중요한 역할을 합니다.
지속적인 통합(CI - Continuous Integration):
지속적인 전달(CD - Continuous Delivery):
지속적인 배포(CD - Continuous Deployment):
40. TDD에 대해서 설명해주세요.
TDD(Test-Driven Development)는 소프트웨어 개발 방법론 중 하나로, 개발자가 소프트웨어를 개발할 때 테스트를 먼저 작성하고, 그 다음에 코드를 작성하는 접근 방식을 강조하는 방법론입니다. TDD는 다음 세 가지 주요 단계를 따릅니다:
테스트 작성 단계 (Red - 빨강):
코드 작성 단계 (Green - 초록):
리팩터링 단계 (Refactor):
TDD를 따르면 테스트 케이스는 개발 중에 코드의 예상 동작을 정의하고, 코드 변경 사항이 예상한 대로 동작하는지 확인하는 데 사용됩니다. TDD를 통해 소프트웨어의 안정성과 신뢰성을 향상시키며, 코드 변경에 대한 자신감을 제공하고 버그를 조기에 발견하는데 도움이 됩니다.
TDD는 소프트웨어 개발 프로세스를 단순화하고 개발자들 간의 협업을 촉진하며, 변경 사항이 코드에 영향을 미칠 때 이를 감지하는 데 도움을 줍니다.
⭐️ 하루 생각 정리 ⭐️