[면접 대비] CS

2023. 11. 20. 00:07Study/Computer Science

구글에 접속하는 과정에 대해 설명해주세요

1. 사용자가 브라우저에 URL을 입력

2. DNS서버에서 URL를 IP주소로 교체

3. 이 IP주소로 3-way-handshake 연결 과정을 진행

4. 클라이언트는 웹 서버로 Http Request Message를 보냄

5. 웹 서버는 Http Response Message를 보냄

6. 도착한 메세지는 클라이언트 단에서 데이터와 함께 view가 랜더링된다.

7. 4-way-handshake 과정으로 연결이 해제된다.

 

TCP vs UDP

 비연결형과 연결형 : TCP는 연결형 프로토콜로, 전송 전에 먼저 연결을 설정하고, 데이터 전송이 끝난 후 연결을 해제합니다. 반면에, UDP는 비연결형 프로토콜로 연결 설정 없이 데이터를 전송합니다.

 데이터의 신뢰성 : TCP는 패킷의 순서를 보장하고. 손실된 패킷을 재전송합니다. 따라서, 데이터의 정확성이 중요한 경우에 사용됩니다. 반면에 UDP는 패킷의 순서를 보장하지 않으며, 재전송을 하지 않습니다. 따라서, 실시간 서버스 등 속도가 중요한 경우에 사용된다.

 흐름 제어와 혼잡 제어 : TCP는 흐름 제어와 혼잡 제어를 통해 네트워크의 혼잡 상황을 관리한다. 반면에 UDP는 이러한 기능을 제공하지 않습니다.

 헤더의 크기 : TCP의 헤더 크기는 20byte로 비교적 큰 편입니다. 반면에 UDP의 헤더 크기는 8byte로 더 작습니다.

 

 TCP 3, 4 way handshake에 대해서 설명해보세요

3-way-handshake는 TCP 연결을 시작할 때 사용되는 프로세스입니다. 4-way-handshake는 이러한 가상회선을 제거하는 과정입니다.

 

3-way-handshake 순서

  1. 클라이언트가 서버에게 SYN 패킷을 보냄 (sequence : x)
  2. 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄 (sequence : y, ACK : x + 1)
  3. 클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보냄

 

HTTP와 HTTPS의 차이점에 대해 설명하세요

HTTP는 따로 암호화 과정을 거치지 않기 때문에 중간에 패킷을 가로챌 수 있고, 수정할 수 있다. 따라서, 보안이 취약해짐을 알 수 있다. 이를 보완하기 위해 나온 것이 HTTPS입니다. 중간에 암호화 게층을 거쳐서 패킷을 암호화합니다.

 

HTTPS 동작 순서

1. 클라이언트가 application으로 https request한다.

2. application은 ssl 인증서와 public key를 전달해 정상적인 application임을 인증한다.

3. client는 전달받은 인증서가 믿을만한 기관으로부터 발급받은 ssl 인증서인지 등을 확인한다. ssl이 정상적임이 인증이 된 경우 브라우저가 application에 session key를 전달한다.

4. 이후 client와 application 사이의 모든 communication은 전달한 session key를 사용해 암호화된다.

 

HTTP 프로토콜이란 무엇인가?

✔ www, 즉 웹 상에서 정보를 주고 받을 수 있는 프로토콜

✔ 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜

✔ 주로 HTML 문서를 주고 받는데 사용

✔ TCP, UDP를 사용하며 80번 포트를 사용

 

RESTFul API에 대해 설명해주세요

  • 클라이언트-서버 구조
  • 무상태성
  • 캐시 가능
  • 계층화
  • 자체 표현(Self-Descriptiveness)
  • 유니폼 인터페이스

이러한 원칙을 따르는 API를 말하며, 웹 서비스 간 상호 작용을 단순화하고, 서비스의 응용 프로그램 간 독립성을 증가시키는 데 도움이 된다.

 

REST API, RESTful 이란?

REST API는 REST를 기반으로 서비스 API를 구현한 것입니다. REST라는 것은 자원의 표현, 즉 이름으로부터 자원의 정보를 주고받는 것을 의미합니다. 그래서 자원을 URI로 표현하고, 자원에 대한 행위는 HTTP Method로 표현한 것이 REST API입니다. 

 

RESTful이란 것은 REST의 원리를 잘 따르는 시스템입니다. RESTful 하지 않다는 것은 CRUD기능을 모두 POST만으로 처리한 것을 말한다고 할 수 있습니다.

 

프레임워크와 라이브러리의 차이에 대해 설명해주세요

두 개의 주요 차이점은 '제어 흐름에 대한 주도성'이다. 프레임워크는 전체적인 흐름을 제어하는 반면, 라이브러리는 개발자의 코드에 의해 제어된다.

 

객체 vs 인스턴스 vs 클래스

클래스는 설계도 또는 템플릿입니다. 객체가 클래스의 실체화된 것임을 강조할 때는 '객체'라는 용어를 사용하고, 객체가 어떤 클래스에서 파생되었는지를 강조할 때는 '인스턴스'라는 용어를 사용합니다.

객체는 모든 인스턴스 대표하는 포괄적인 의미를 가지고 있는 용어라고 생각하면 될 듯

 

[기출][중요] HTTP Method에 대해 설명해주세요

- GET : 특정 리소스의 표현을 요청합니다. GET 요청은 데이터를 가져오는 데 사용되며, 서버의 리소스 상태를 변경시키지 않아야 합니다. 즉, 안전하고 멱등성을 가집니다.

- POST : 특정 리소스에 데이터를 제출하거나 추가하도록 요청합니다. 이는 주로 서버의 상태를 변경하거나 새 리소스를 생성하는 데 사용됩니다.

- PUT : 리소스의 현재 상태를 완전히 새로운 것으로 대체합니다.

- DELETE : 특정 리소스를 제거하도록 요청합니다.

- PATCH : 리소스의 부분적인 수정을 요청합니다. PUT 메서드와 달리 PATCH는 리소스의 일부만을 업데이트합니다.

- HEAD, OPTION, TRACE 등등..

 

[중요] HTTP 상태 코드에 대해 말해주세요

서버가 클라이언트의 요청이 성공적으로 처리되었는지, 아니면 에러가 발생했는지 등의 정보를 전달하는 데 사용됩니다. 

 

- 1xx : 요청을 받았고, 프로세스를 계속 진행하고 있음을 나타냅니다.

- 2xx : 요청이 성공적으로 수신, 이해, 수용되었음을 나타냅니다.

- 3xx : 클라이언트가 추가 조치를 취해야 함을 나타냅니다(리다이렉트)

- 4xx : 클라이언트 요청이 잘못되었거나 완료될 수 없음을 나타냅니다

- 5xx : 서버가 유효한 요청을 충족시키는 데 실패했음을 나타냅니다.

 

[기출][중요] 프로세스와 스레드의 차이에 대해 설명해주세요

- 프로세스 : 운영 체제에서 실행 중인 프로그램의 인스턴스입니다. 각 프로세스는 자체의 메모리 공간, 데이터, 힙, 스택을 가집니다. 프로세스는 독립적으로 실행되며, 다른 프로세스의 자원에 접근하려면 특별한 통신 기법을 사용해야 한다.

 

- 스레드: 프로세스 내에서 실행되는 작은 실행 단위입니다. 모든 스레드는 프로세스의 자원을 공유하며, 동일한 프로세스 내의 스레드 간에는 자원을 쉽게 공유할 수 있다.

 

따라서, 가장 큰 차이점은 '자원의 공유'입니다. 프로세스는 독립적인 자원을 가지고 있지만, 스레드는 자원을 공유하여 사용한다. 이로 인해 스레드는 컨텍스트 스위칭 등 성능 적인 측면에서 훨씬 더 효율적이다. 그러나 동기화 문제가 발생할 수 있다.

 

CORS(Cross Origin Resource Sharing)에 대해 설명해주세요

웹 페이지가 다른 도메인의 리소스에 접근할 수 있도록 하는 메커니즘입니다. 이러한 메커니즘은 스프링에서 @CrossOrigin 어노테이션으로 지원합니다.

 

OAuth 2.0에 대해 설명해주세요

사용자의 인증 정보를 직접 처리하지 않고, 사용자를 대신하여 특정 리소스에 접근할 수 있는 권한을 제 3의 애플리케이션에 부여하는 프로토콜입니다. 이 프로토콜의 주요 목표는 사용자의 비밀번호를 공유하지 않고, 제한된 권한을 가진 토큰으로 사용자의 데이터에 접근할 수 있는 안전한 방법을 제공하는 것입니다.

 

MSA와 모놀리틱 서비스의 차이를 설명해주세요

 마이크로 서비스 : MSA에서 애플리케이션은 작은, 독립적인 서비스들로 분리되어 개발됩니다. 각 서비스는 자체 비즈니스 기능을 수행하며, 서로 통신하기 위해 정의된 API를 사용합니다. 이러한 방식은 각 서비스를 독립적으로 개발, 배포, 확장할 수 있다는 장점이 있습니다. 그러나, 서비스 간의 통신과 데이터 일관성을 유지하는데 복잡성이 추가될 수 있습니다.

 

 모놀리틱 서비스 : 애플리케이션의 모든 컴포넌트(사용자 인터페이스, 데이터 접근 계층, 비즈니스 로직 등)는 하나의 단일 코드베이스로 구성되며, 주로 하나의 서비스로 실행됩니다. 이러한 방식은 개발, 테스트, 배포가 단순하다는 장점이 있습니다. 그러나, 규모가 커짐에 따라 유지 관리가 복잡성이 추가될 수 있습니다.

 

[기출][중요] 쿠키와 세션에 대해 설명해주세요

HTTP는 무상태 프토토콜이기 때문에, 쿠키와 세션이 웹에서 사용자의 상태 정보를 저장하는데 사용되는 기술입니다.

 

- 쿠키 : 쿠키는 클라이언트 측에서 관리되는 작은 텍스트 파일입니다. 웹 서버는 HTTP 응답 헤더를 통해 쿠키를 클라이언트에게 보냅니다. 그 후 클라이언트는 매 요청마다 쿠키를 HTTP 요청 헤더에 포함시켜 서버에게 보냅니다.

 

- 세션 : 세션은 서버 측에서 관리되는 상태 정보 저장 방식입니다. 클라이언트 쿠키에 저장된 세션 ID를 통해 자신의 세션에 접근할 수 있습니다. 세션은 사용자의 민감한 정보를 안전하게 저장하는 데 사용됩니다. 그러나 세션은 서버의 메모리를 사용하기 때문에, 대량의 사용자 정보를 저장하는 경우 서버의 부하를 증가시킬 수 있습니다.

 

CI/CD란?

CI/CD는 '지속적 통합'과 '지속적 배포'를 의미하는 소프트웨어 개발 방법론입니다. 이 두 개념은 개발의 효율성을 높이고 빠르게 변경사항을 배포하는데 중점을 둡니다.

 

[중요] Call by Value vs Call by Reference

함수에 인자를 전달하는 방식을 나타내는 용어입니다.

 

- Call by Value : 함수에 인자를 전달할 때 값의 복사본을 전달합니다. 따라서 함수 내에서 값을 변경해도, 원본 데이터는 변경되지 않습니다.

- Call by Reference : 함수에 인자를 전달할 때 메모리 주소를 전달합니다. 따라서, 함수 내에서 인자의 값을 변경하면, 그 변경이 호출자의 원래 변수에 영향을 미칩니다. 이렇게 함으로써 데이터의 복사본을 만들지 않기 때문에 메모리를 절약할 수 있습니다.

 

RESFul API와 GraphQL의 차이는 무엇인가요?

RESTful API와 GraphQL은 서버와 클라이언트 간의 데이터 교환을 위한 두 가지 다른 스타일의 API입니다. 이들은 몇 가지 중요한 차이점을 가지고 있습니다.

데이터 요청: RESTful API에서는 서버가 미리 정의된 데이터 구조를 반환합니다. 클라이언트는 필요한 모든 데이터를 얻기 위해 여러 엔드포인트를 통해 여러 번의 요청을 보내야 할 수 있습니다. 반면에, GraphQL에서는 클라이언트가 필요한 데이터의 구조를 지정하며, 단일 요청으로 원하는 모든 데이터를 얻을 수 있습니다.
버전 관리: RESTful API에서는 API의 변경 사항을 관리하기 위해 버전 관리가 필요할 수 있습니다. 새로운 필드가 추가되거나 삭제될 때마다 새로운 버전의 API를 만들어야 할 수 있습니다. 그러나 GraphQL에서는 필드가 선택적으로 요청될 수 있으므로, 이러한 문제가 적습니다.
오버페칭과 언더페칭: RESTful API에서는 클라이언트가 필요한 데이터보다 많은 데이터(오버페칭) 또는 필요한 모든 데이터를 한 번의 요청에 받지 못하는 경우(언더페칭)가 있을 수 있습니다. 하지만 GraphQL에서는 클라이언트가 정확히 필요한 데이터만 요청할 수 있어 이런 문제를 해결할 수 있습니다.
실시간 업데이트: RESTful API는 주로 HTTP 프로토콜을 사용하며, 실시간 업데이트를 위해 추가적인 기술이 필요합니다. 반면에, GraphQL은 실시간 업데이트를 지원하는 'subscription' 기능을 제공합니다.

 

JWT란 무엇인가요?

Json Web Token의 약자로, 두 개체 사이에서 정보를 안전하게 전송하기 위한 간결하고 독립적인 방식을 제공합니다. JWT는 세 부분으로 구성됩니다. Header, Payload, Signature

JWT는 인증 및 정보 교환에 널리 사용되며, 특히 RESTful API에서 인증을 위해 많이 사용됩니다. JWT를 사용하면, 한 번의 인증 후에 해당 토큰을 사용하여 다른 API에 접근할 수 있으므로, 세션 관리를 할 필요가 없어집니다.

 

[중요] 컴파일러와 인터프리터의 차이는 무엇인가요?

모두 고급언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 역할을 합니다. 그러나 작업을 수행하는 방식과 시점에서 차이가 있습니다.

 

- 컴파일러 : 컴파일러는 소스 코드를 전체를 읽어 분석한 후, 기계어로 변환합니다. 이 변환 과정이 완료된 후에야 프로그램을 실행할 수 있습니다. 단점은 프로그램 전체를 컴파일해야 하므로 초기 시작 시간이 길 수 있다는 것입니다.

- 인터프리터 : 인터프리터는 소스 코드를 한 번에 한 줄씩 읽고, 즉시 해당 줄을 기계어로 변환하고 실행합니다. 이 방식의 장점은 전체 프로그램을 컴파일할 필요 없이 즉시 코드를 실행할 수 있습니다. 따라서, 개발과 디버깅이 더 쉽고 빠를 수 있습니다. 단점은 각 줄을 개별적으로 해석하고 실행하기 때문에 실행 속도가 비교적 느릴 수 있습니다.

 

동기식과 비동기식 프로그래밍의 차이를 설명해주세요

 동기식 프로그래밍 : 하나의 작업이 완료될 때까지 기다린 후 다음 작업을 수행합니다.

 비동기식 프로그래밍 : 하나의 작업이 완료되기를 기다리지 않고 바로 다음 작업을 수행합니다.

 

컨테이너와 가상머신의 차이는 무엇인가?

둘다 애플리케이션을 실행하는데 필요한 환경을 격리시켜주는 기술이지만, 그 방식과 효율성에서 차이가 있습니다.

가장 큰 차이점은 운영체제(OS) 유무입니다. 가상머신은 게스트 OS를 설치하여 실행하는 방식이라면, 컨테이너는 호스트 OS를 공유하여 사용합니다. 이렇게 함으로써 컨테이너는 가상머신보다 자원 사용량이 적고, 시작 시간이 빠르다는 장점이 있습니다.

 

소프트웨어의 생명 주기에 대해 설명해주세요

소프트웨어 제품을 개발하고 유지보수하는 과정을 나타내는 일련의 단계입니다. 일반적으로 다음과 같은 단계로 이뤄집니다. '요구사항 분석 및 수집 - 설계 - 구현 - 테스트 - 배포 - 유지보수' 단계로 보통 이루어집니다.

 

디자인 패턴이 무엇이고 어떻게 유용한가요?

디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제들을 해결하는데 사용되는 재사용 가능한 솔루션입니다. 일종의 설계 템플릿으로, 특정 문제를 해결하는데 사용할 수 있는 표준적인 방법을 제공합니다.

 

[중요]RDBMS와 NoSQL은 언제 사용하는 것이 좋을까요?

✅ RDBMS

- 데이터의 무결성 : RDBMS는 트랜잭션을 지원하고, 이를 통해 데이터의 ACID를 보장합니다. 따라서, 무결성(정확성과 일관성을 유지)이 중요한 시스템에서는 RDBMS를 사용합니다.

- 복잡한 JOIN 연산 : RDBMS는 관계형 데이터 모델을 사용하므로, 여러 테이블 간의 복잡한 관계를 JOIN 연산을 통해 쉽게 표현할 수 있습니다.

- 정규화 : 데이터 중복을 최소화하고 효율적인 저장을 위해 데이터를 정규화할 수 있습니다.

 

✅ NoSQL

- 대용량 데이터 : NoSQL은 대용량 데이터를 빠르게 처리하고 분산 저장할 수 있으므로, 빅데이터 환경에서는 NoSQL을 사용하는 것이 좋습니다.

- 확장성 : NoSQL은 수평적 확장을 지원하므로, 데이터 양이 늘어나도 쉽게 대응할 수 있습니다. 이를 통해 높은 트래픽을 감당할 수 있습니다.

- 유연성 : 고정된 스키마 없이 다양한 형태의 데이터를 저장할 수 있습니다. 따라서 빠른 개발 속도와 변화에 대한 유연성이 필요한 경우 사용하기 좋습니다.

 

[기출][중요]▶ 데이터 베이스 정규화에 대해 설명해주세요

데이터베이스 정규화는 데이터베이스 설계 과정에서 중복을 최소화하고, 데이터를 구조적으로 효율적으로 저장하기 위해 테이블 간의 관계를 조직하는 과정을 말합니다.

 

- 제 1 정규형 : 모든 테이블의 컬럼 값이 원자적이어야 합니다.

- 제 2 정규형 : 모든 컬럼이 기본키에 종속되어야 합니다.

- 제 3 정규형 : 기본 키가 아닌 컬럼 간의 종속성을 없애야 합니다.

 

Primary key, Foreign Key에 대해서 설명해주세요

Primary Key

기본 키는 테이블의 각 행을 고유하게 식별하는 역할을 합니다. 기본 키는 중복된 값을 허용하지 않으며, NULL 값을 가질 수 없습니다.

Foreign Key

외래 키는 다른 테이블의 기본 키를 참조하는 컬럼입니다. 외래 키를 통해 테이블 간의 관계를 정의합니다. 외래키에 입력되는 값은 참조하는 테이블의 기본 키에 이미 존재하는 값이어야 합니다.

 

ERD 설계는 어떤 논리로 만들어 보았는가?

1️⃣ 개념적 모델링

내가 하고자 하는 일의 데이터 간의 관계를 구상하는 단계이다.

 

2️⃣ 논리적 모델링

구체화된 업무 중심의 데이터 모델을 만들어 낸다. 이 단계에서 업무에 대한 Key 속성, 관계 등을 표시하며, 정규화 활동을 수행한다.

 

3️⃣ 물리적 모델링

데이터 베이스를 선택하고, 선택한 데이터 베이스에 실제 테이블을 만드는 작업을 말한다.

 

▶ 데이터 베이스 클러스터링과 파티셔닝의 목적과 차이점은 무엇인가요?

두 개 모두 데이터 베이스 성능 최적화를 위한 중요한 기법입니다.

 

클러스터링

- 데이터베이스 서버의 그룹을 생성하는 프로세스입니다. 

- 주요 목적은 가용성을 높이고, 데이터 손실을 방지하며, 부하 분산을 통해 전반적인 성능을 향상시키는 것입니다.

- 한 서버가 실패하더라도 다른 서버에서 동일한 데이터에 액세스할 수 있도록 합니다.

 

파티셔닝

- 하나의 데이터 베이스를 여러 부분으로 분할하는 프로세스입니다.

- 주요 목적은 데이터 관리를 효율적으로 하고 검색 성능을 향상시키며, 백업과 복구를 더 빠르고 쉽게 만드는 것입니다.

 

정리하자면, 클러스터링은 DB의 내결함성과 성능을 향상시키기 위한 서버의 물리적 그룹화를, 파티셔닝은 데이터 관리와 검색 성능을 향상시키기 위한 데이터의 논리적 혹은 물리적 분할을 의미합니다.

가용성이란, 서버와 네트워크, 프로그램 등의 정보 시스템이 정상적으로 사용 가능한 정도를 말한다.

 

[기출][중요]인덱스란?

추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

 

▶ ERD에서 식별 관계와 비식별 관계의 차이는 무엇인가?

식별 관계는 부모 엔티티의 기본 키가 자식 엔티티에 외래 키로 전달되며, 동시에 자식 엔티티의 기본 키로도 사용되는 관계를 말합니다.

비식별 관계는 부모 엔티티의 기본 키가 자식 엔티티의 외래 키로만 전달 되는 관계를 말합니다.

 

In-memory DB에 대해 설명해주세요

데이터를 메인 메모리에 올려서 관리하는 것을 In-memory DB라고 합니다. 이렇게 관리함으로써 기존의 전통적인 디스크 기반 DB보다 데이터를 빠르게 찾을 수 있는 장점이 있습니다.

 

SQL Injection에 대해 아는대로 설명해주세요

외부 사용자가 데이터베이스 쿼리를 일부러 조작하여 원하지 않는 동작을 수행하게 만드는 공격 기법

 

heap 영역과 stack 영역에 대해 설명해주세요

heap 영역

동적 메모리 할당을 위해 사용하는 부분

 

stack 영역

함수 호출 시 생성되는 지역변수와 매개변수가 스택 프레임으로 쌓이는 영역

 

▶ heap영역이랑 stack영역이 왜 나눠져 있을까?

Stack은 메모리의 할당 및 해제가 빠르지만, Heap은 상대적으로 느리다. 따라서 성능상의 이유로 둘을 나눴다고 할 수 있다.

Stack과 Heap 크기가 다르다. 일반적으로 Stack의 크기는 작지만, Heap은 매우 크다. 따라서 큰 데이터를 저장하거나, 데이터의 생명 주기가 긴 경우 Heap을 사용한다.

 

멤버변수와 지역변수는 언제 메모리에서 해제되나요?

✔ 멤버변수와 지역변수는 생명주기, 스코프에 따라 달라진다.

✔ 멤버변수는 클래스의 객체가 생성될 때 힙 영역에 할당되고, 객체가 소멸될 때 해제된다. 지역변수는 함수 실행시에 스택영역에서 할당되고, 함수가 종료되면 메모리에서 해제된다.

 

[중요]객체 지향 언어와 절차 지향 언어와의 차이점

객체 지향 언어

- 속성과 기능으로 이루어진 객체들간의 유기적인 상호작용을 하도록 프로그래밍하는 기법

- 모듈화하였기 때문에 코드 재사용성 측면(상속)에서 좋으며, 유지보수하기에도 편하다

- 객체가 많아진다면 복잡성이 증가

- Python, c++, JAVA 등

 

절차 지향 언어

- 코드를 순차적으로 작성하는 기법

- 코드가 순차적으로 작성되어 있기 때문에 이해하기 쉽다

- 유지보수하기 어려우며, 코드의 재사용성이 낮다.

- C, Pascal 등

 

테이터 타입은 뭔가요? 데이터 타입과 변수의 차이는 뭔가요?

데이터 타입 

프로그래밍에서 사용하는 데이터의 종류를 나타내는 것으로 정수, 실수, 문자 등 다양한 형태의 데이터를 처리하기 위해 정의된 것

변수

데이터를 저장하는 공간

 

정리하자면, 데이터 타입은 그 자체로 데이터의 특성을 나타내는 반면, 변수는 그러한 데이터 타입의 데이터를 저장하고 처리하는 역할

 

[중요]Value Type과 Refference Type을 얘기해주세요

 

Value Type

- 자바에서는 Primitive Type이라고 하고, 변수에 값을 직접적으로 저장하는 타입

- 다른 변수에 할당될 때, 값이 복사됨

 

Refference Type

- 변수에 데이터의 메모리 주소값이 저장되는 타입

- 이 주소값은 값이 저장되어있는 메모리 공간을 가르킴

- 인자값으로 Refference Type을 넘겨서 변경하면, 값이 실제 데이터값이 변경됨

 

MYSQL과 ORACLE 차이

조인 방식의 차이

- MySQL : 중첩 루프 조인 방식을 제공

- Oracle : 중첩 루프 조인, 해시 조인, 소트 머지 조인 방식을 제공

 

메모리 사용율의 차이

- MySQL : 메모리 사용율이 낮아서 1MB 환경에서 설치 가능

- Oracle : 메모리 사용율이 커서 최소 수백MB 이상이 되어야 설치 가능

 

구조적 차이

- MySQl : DB 서버마다 독립적인 스토리지를 할당하는 방식

- Oracle : DB 서버가 통합된 하나의 스토리지를 공유하는 방식

 

이외에도, 확장성의 차이 및 파티셔팅에서 차이를 보인다.

 

[기출]SPA(Single Page Application)의 장단점

✔ SPA는 웹 애플리케이션의 한 종류로서, 사용자가 웹 사이트에 방문했을 때 단 한 페이지만 로딩하고, 그 이후의 모든 동작들은 사용자의 브라우저에서 이루어지는 방식을 말합니다.

 

장점

- MPA(다중 페이지 애플리케이션)과 다르게 SPA는 필요한 부분만 동적으로 업데이트하므로, 전체 페이지를 새로고치는 시간과 리소스를 절약

단점

- 초기 로딩 시간이 길 수 있고, SEO(Search Engine Optimization)에 문제가 될 수 있음

 

▶ 커널은 무엇이고, 주요 기능은 무엇인가?

✔ 운영 체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 통신을 관리하는 역할을 한다.

✔ 주요 기능 : 프로세스 관리, 메모리 관리, 디바이스 드라이버 인터페이스, 시스템 호출 인터페이스

 

시스템 콜이란?

사용자 모드에서 실행되는 프로그램이 커널에게 서비스를 요청할 때 사용하는 인터페이스

 

컨텍스트 스위칭이란?

✔ CPU가 한 프로세스에서 다른 프로세스로 실행을 전환할 때 발생하는 과정

 

인터럽트란?

프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것

 

OSI 7계층이란? 

✔ OSI 7계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. 이는 국제표준규격으로 동일한 규격을 갖게 해 원활한 통신이 가능하게 한다.

 

OSI 7계층의 각각의 역할은?

물리 계층

- 전송매체를 통한 데이터 전송 및 데이터의 신호변환

- 케이블, 허브 등이 이 계층에 해당

데이터 링크 계층

- MAC 주소를 사용하며 신뢰성 있는 정보를 전송하기 위한 역할을 수행한다.

- 데이터의 오류 검출 및 수정, 프레임 제어 등을 담당합니다.

- 스위치, 브리지 등이 이 계층에 해당

네트워크 계층

- 데이터 패킷의 경로를 결정하고, 네트워크 간 라우팅을 담당합니다.

- 라우터, IP 주소 등이 이 계층에 해당합니다.

전송 계층

- 송신 측과 수신 측의 연결 설정 및 유지

- TCP, UDP 등이 이 계층에 해당

세션 계층

- 응용프로그램들 간의 통신관리 및 동기화 유지

표현 계층

- 데이터의 변역 및 암호화

응용 계층

- 사용자에게 직접 제공되는 서비스나 프로그램

 

ARP란?

논리적 주소를 물리적 주소로 변환하는 작업

 

소켓이란?

✔ 네트워크 통신에서 데이터를 주고 받는 두 프로그램 간의 종단점을 의미합니다.

 

SYN Flooding이란?

네트워크 보안 공격의 한 유형으로, 서버의 자원을 고갈시키는 Dos 공격입니다.

SYN Flooding 공격에서는 공격자가 서버에 대량의 SYN 패킷을 보내 연결 요청을 합니다. 이렇게 되면 서버는 연결을 완료하기 위해 자원을 계속 대기하는 상태가 지속됩니다.

 

IP란?

✔ Internet protocol의 약자로, 인터넷 환경의 통신 규약이다. 

✔ 패킷이라는 통신 단위로 데이터를 전달하며, 지정한 IP주소로 데이터를 전송

 

TCP의 기능 중에서 흐름제어와 혼잡제어을 설명하세요

흐름제어는 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법

혼잡제어는 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법

 

Mutex와 Semaphore 방식의 차이점은?

✔ 세마포어는 자원 풀에 대한 접근을 규제하는 데 사용되는 반면 뮤텍스는 단일 공유 자원에 대한 접근을 규제하는 데 사용됩니다.

 

대칭키 & 공개키/비대치키 설명

 대칭키

- 암호화와 복호화에 같은 대칭키를 사용하는 알고리즘

- 동일한 키를 주고받기 때문에, 매우 빠르다는 장점이 있음

- 대칭키 전달과정에서 해킹 위험에 노출

 

공개키/비대칭키

- 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘

- 대칭키의 키 분배 문제를 해결하기 위해 고안됨.

 

CSRF(Cross-site request forgery)에 대해 설명하고, 이를 막기 위한 방법에 대해 설명해주세요.

✔ 웹사이트의 취약점을 이용하여 사용자가 로그인한 세션을 가지고, 사용자의 의지와는 상관없이 공격자가 의도한 행동을 하도록 조작하는 공격 방법

✔ 해결 방법

  • CSRF 토큰 사용
  • SameSite 쿠키 속성 사용
  • Refere 검증
  • Double Submit Cookie 검증

 

XSS에 대해 설명하고, 이를 막기 위한 방법에 대해 설명해주세요.

공격자가 웹 페이지에 악성 스크립트를 삽입하는 보안 공격입니다.

이 스크립트는 사용자의 브라우저에서 실행되어, 사용자의 세션 토큰을 탈취하거나 다른 사이트로 리다이렉트 하는 등의 행위를 할 수 있습니다.

✔ 해결 방법

  • 입력값 검증
  • 출력값 이스케이프
  • 콘텐츠 보안 정책

 

▶ JWT의 장점과 보안 고려사항에 대해 이야기해주세요.

 장점

- 상태를 유지하지 않는다.

- JWT는 필요한 모든 정보를 자체적으로 가지고 있다. 이로 인해 JWT는 별도의 인증 저장소가 필요없다.

- 분산된 시스템

 

보안 고려사항

- JWT는 클라이언트 측에서 저장되고 관리되므로, 토큰이 노출되는 것을 방지하기 위해 안전한 저장소에 저장해야 합니다.

- JWT는 통신 채널을 통해 전송되므로, HTTPS와 같은 안전한 채널을 통해 전송되어야 한다.

'Study > Computer Science' 카테고리의 다른 글

[면접대비] 리눅스  (0) 2023.11.27
[면접 대비] Java/Spring  (1) 2023.11.18
[Web]WEB와 WAS의 차이  (1) 2023.11.01
[DB]SQL vs NOSQL  (1) 2023.10.30
[DB] SQL Injection  (0) 2023.10.27