본문 바로가기

개발자 세릴리/스펙업

[스펙업] IT 개발자 면접 질문 - CS 질문 / 면접 자료 / 면접 답변(2)

728x90
반응형

이전 포스팅과 이어집니다.

2023.03.08 - [개발자 세릴리/스펙업] - [스펙업] IT 개발자 면접 질문 - CS 질문 / 면접 자료 / 면접 답변(1)

 

[스펙업] IT 개발자 면접 질문 - CS 질문 / 면접 자료 / 면접 답변(1)

CS 질문 분야 자료 구조 (Data Structures): 배열, 연결 리스트, 스택, 큐, 해시 테이블, 이진 검색 트리, 힙 등을 포함하여 다양한 자료 구조에 대한 이해와 구현 능력을 묻을 수 있습니다. 알고리즘 (Alg

serylee.tistory.com

5. 네트워크

Q: OSI 7계층이란 무엇인가요?

A: OSI 7계층은 Open Systems Interconnection Reference Model의 약어로, 네트워크 프로토콜 스택을 구성하는 7개의 계층을 말합니다. 이 계층은 데이터 전송 과정을 각각의 계층으로 분리하여 관리하고, 표준화된 인터페이스를 제공함으로써 서로 다른 네트워크 장비 및 프로토콜 간의 상호 운용성을 보장합니다.

 

Q: TCP와 UDP의 차이점은 무엇인가요?

A: TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 모두 인터넷 프로토콜 스택에서 사용되는 전송 프로토콜입니다. 하지만 TCP는 연결 지향적이며, 신뢰성 있는 데이터 전송을 보장하고 오류 발생 시 재전송을 시도합니다. 반면에 UDP는 비연결성이며, 데이터 전송을 보장하지 않습니다. 그러나 UDP는 빠른 전송 속도와 적은 오버헤드로 인해, 실시간 응용프로그램에서 많이 사용됩니다.

 

Q: HTTP와 HTTPS의 차이점은 무엇인가요?

A: HTTP(Hypertext Transfer Protocol)와 HTTPS(Hypertext Transfer Protocol Secure)는 모두 인터넷 상에서 웹 서버와 클라이언트 간에 데이터를 주고받는 프로토콜입니다. 하지만 HTTP는 데이터 전송 시 암호화하지 않으며, 취약점이 많습니다. 반면에 HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 인증서를 통해 서버의 신원을 확인합니다. 그러므로 HTTPS는 보안적으로 더 안전합니다.

 

Q: DNS 서버란 무엇인가요?

A: DNS(Domain Name System) 서버는 인터넷에서 도메인 이름을 IP 주소로 변환하는 역할을 합니다. 즉, 사용자가 도메인 이름을 입력하면 DNS 서버는 이를 해당하는 IP 주소로 변환하여 사용자가 요청한 서버에 접근할 수 있게 합니다. DNS 서버는 인터넷 상에서 중요한 역할을 하므로, 보안 문제가 발생할 경우 큰 문제가 될 수 있습니다.

 

Q: OSI 7계층에서 각각의 계층이 하는 일은 무엇인가요?

A: OSI 7계층의 역할에 대해 이어서 설명해드리겠습니다.

  • 물리 계층(Physical Layer): 데이터를 전기 신호나 광 신호 등으로 변환하여 전송합니다. 전송 매체와 물리적인 연결을 다룹니다.
  • 데이터 링크 계층(Data Link Layer): 오류 제어, 흐름 제어, 매체 접근 제어 등 데이터 전송에 필요한 기능을 제공합니다. 물리 계층에서 전송된 비트열을 프레임 단위로 나누어 관리합니다.
  • 네트워크 계층(Network Layer): 데이터의 경로를 결정하고 전송합니다. 라우팅, 패킷 전달 등을 다룹니다.
  • 전송 계층(Transport Layer): 데이터 전송을 보장하고 오류 복구, 흐름 제어, 중복 검사 등을 수행합니다. TCP, UDP 프로토콜을 사용합니다.
  • 세션 계층(Session Layer): 데이터 교환의 시작과 끝을 제어하며, 데이터 전송 중에 발생할 수 있는 문제를 처리합니다.
  • 표현 계층(Presentation Layer): 데이터의 형식을 변환하거나 암호화, 복호화를 수행합니다. 데이터의 구조, 인코딩, 압축 등을 다룹니다.
  • 응용 계층(Application Layer): 사용자와 네트워크 간의 인터페이스를 제공하며, 사용자의 요구에 따라 다양한 프로토콜을 사용합니다. 예를 들면 HTTP, FTP, SMTP 등이 있습니다.

Q: ARP와 RARP는 무엇인가요?

A: ARP(Address Resolution Protocol)는 IP 주소와 MAC 주소를 매핑하기 위한 프로토콜입니다. 예를 들어, 호스트 A가 호스트 B에게 데이터를 보내려면, 호스트 A는 호스트 B의 MAC 주소를 알아야 합니다. ARP는 이러한 MAC 주소를 찾기 위해 ARP 요청을 보내고, 해당 주소에 대한 ARP 응답을 받습니다. 반면, RARP(Reverse Address Resolution Protocol)는 MAC 주소를 IP 주소로 변환하기 위한 프로토콜입니다. 이 프로토콜은 주로 디스크리스(Diskless) 시스템에서 사용됩니다.

 

Q: 포트 번호는 무엇이고, 어떻게 사용되나요?

A: 포트 번호는 인터넷 프로토콜에서 프로세스(응용프로그램)를 식별하기 위한 번호입니다. 이 번호는 0에서 65535 사이의 값으로 지정되며, 특정 포트 번호를 사용하는 프로세스는 해당 번호를 통하여 데이터를 주고받을 수 있습니다. 포트 번호는 0~1023까지는 잘 알려진 포트(Well-known port)로서, 대부분 표준화된 프로토콜에 할당되어 있습니다. 예를 들면, 80번 포트는 HTTP 프로토콜, 22번 포트는 SSH 프로토콜에 할당되어 있습니다. 그리고 1024번 이상의 포트는 동적 포트(Dynamic port)로서, 응용 프로그램이 필요에 따라 사용할 수 있습니다.

 

Q: TCP와 UDP의 차이점은 무엇인가요?

A: TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 인터넷 프로토콜 스위트의 주요 전송 프로토콜입니다. 그러나 두 프로토콜은 다음과 같은 차이점이 있습니다.

  • 연결성: TCP는 연결 지향적인 프로토콜로, 3-way handshake를 통해 연결을 설정하고, 연결 해제시 4-way handshake를 통해 연결을 해제합니다. 반면, UDP는 비연결성 프로토콜로, 연결 설정 과정이 없습니다.
  • 신뢰성: TCP는 신뢰성 있는 데이터 전송을 보장하기 위해, 패킷 손실에 대한 재전송과 오류 복구 등의 기능을 제공합니다. UDP는 이러한 기능을 제공하지 않습니다.
  • 흐름 제어: TCP는 송신자와 수신자 간의 데이터 전송 속도를 일치시키기 위해 흐름 제어 기능을 제공합니다. UDP는 이 기능을 제공하지 않습니다.
  • 대역폭: TCP는 대역폭을 많이 사용하며, 높은 신뢰성을 보장합니다. UDP는 대역폭을 적게 사용하며, 낮은 신뢰성을 보장합니다.

 

6. 프로그래밍 언어

 

Q: 객체지향 프로그래밍이란 무엇인가요?

A: 객체지향 프로그래밍(OOP, Object-Oriented Programming)은 객체(Object)를 기본적인 프로그래밍 단위로 삼는 프로그래밍 패러다임입니다. 객체란 데이터와 이를 다루는 메서드(함수)를 포함하는 소프트웨어 개체를 의미합니다. 객체지향 프로그래밍에서는 각 객체가 독립적인 존재로서, 다른 객체와 상호작용하면서 프로그램을 실행합니다. OOP의 핵심 개념으로는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이 있습니다.

 

Q: 상속과 인터페이스의 차이점은 무엇인가요?

A: 상속과 인터페이스는 객체지향 프로그래밍에서 코드 재사용을 위한 두 가지 기술입니다. 상속은 부모 클래스의 특성을 자식 클래스에서도 그대로 사용할 수 있도록 하는 기술입니다. 자식 클래스는 부모 클래스에서 정의된 멤버 변수와 메서드를 그대로 상속받아 사용할 수 있습니다. 반면, 인터페이스는 구현이 없는 추상적인 메서드와 상수로만 구성된 일종의 명세서입니다. 인터페이스를 구현하는 클래스는 반드시 인터페이스에서 정의된 메서드를 모두 구현해야 합니다. 인터페이스를 사용하면 다중 상속을 흉내내거나, 유연한 코드를 작성하는 데 도움이 됩니다.

 

Q: Java의 Garbage Collection(GC)이란 무엇인가요?

A: Java에서 GC는 메모리 관리를 자동으로 처리하는 기술입니다. Java에서는 new 연산자를 사용하여 객체를 생성하면, JVM은 객체를 저장할 공간을 자동으로 할당하고, 객체의 참조 카운트(Reference Count)를 증가시킵니다. 참조 카운트가 0이 되면 GC가 해당 객체를 메모리에서 제거합니다. GC는 메모리 사용량이 많아지면, 메모리 누수(Memory Leak)를 방지하고, 메모리 사용을 최적화하기 위해 주기적으로 실행됩니다.

 

Q: Call by value와 Call by reference의 차이점은 무엇인가요?

A: Call by value와 Call by reference는 함수 호출 방식에 따라 인수(Parameter)를 전달하는 방식을 나타내는 용어입니다. Call by value는 값에 의한 호출 방식으로, 함수의 인수를 복사하여 전달합니다. 함수 내에서 인수 값을 변경해도, 호출한 측에는 영향을 주지 않습니다. 반면, Call by reference는 참조에 의한 호출 방식으로, 함수의 인수로 변수의 주소를 전달합니다. 따라서 함수 내에서 인수 값을 변경하면, 호출한 측에서도 영향을 받습니다.

 

Q: 다형성(Polymorphism)이란 무엇인가요?

A: 다형성은 객체지향 프로그래밍에서 사용되는 개념으로, 동일한 이름의 메서드나 연산자가 다양한 객체에서 다양하게 동작할 수 있도록 하는 것입니다. 예를 들어, 부모 클래스의 메서드를 자식 클래스에서 오버라이딩하여 사용할 수 있으며, 각 클래스에서 메서드의 내용이 다르게 구현될 수 있습니다. 이렇게 같은 이름의 메서드를 다른 방식으로 동작하도록 하는 것을 메서드 오버라이딩(Method Overriding)이라고 합니다. 또한, 다양한 타입의 객체를 같은 타입으로 처리할 수 있는 것을 다형성이라고 합니다. 이를 이용하여 객체의 유연한 처리가 가능합니다.

 

Q: 제네릭(Generic)이란 무엇인가요?

A: 제네릭은 클래스나 메서드에서 사용하는 타입을 런타임이 아닌 컴파일 타임에 결정하는 기술입니다. 제네릭을 사용하면 코드의 재사용성을 높이고, 타입 안정성을 보장할 수 있습니다. 제네릭을 사용하여 컴파일 타임에 타입을 결정하면, 런타임 시 타입 캐스팅(Type Casting)에 따른 오류를 줄일 수 있습니다. 또한, 제네릭 타입을 사용하면 컬렉션(Collection)과 같은 자료구조에서 다양한 타입의 객체를 저장할 수 있으며, 이를 활용하여 코드의 재사용성과 타입 안정성을 동시에 보장할 수 있습니다.

 

Q: 스레드(Thread)란 무엇인가요?

A: 스레드는 프로세스(Process) 내에서 실행되는 실행 단위로, 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행될 수 있습니다. 스레드는 별도의 프로세스 공간을 할당받지 않으므로, 프로세스와 비교하여 자원을 적게 사용합니다. 여러 개의 스레드를 사용하여 동시에 여러 작업을 처리할 수 있으며, 이를 이용하여 프로그램의 성능을 향상시킬 수 있습니다. 하지만, 스레드는 공유 자원에 대한 동기화 문제를 야기할 수 있으므로, 스레드 간의 동기화를 보장해야 합니다. 스레드는 프로그램의 복잡도를 높여, 디버깅과 유지보수가 어려워질 수 있습니다.

 

Q: 데드락(Deadlock)이란 무엇인가요?

A: 데드락은 두 개 이상의 프로세스나 스레드가 서로 상대방의 자원을 점유하고, 그 상태에서 무한히 대기하게 되는 상황을 의미합니다. 이러한 상황에서는 어느 한 쪽이 자원을 포기하지 않으면 계속 대기 상태가 유지되어, 프로그램이 더 이상 진행되지 않습니다. 데드락을 방지하기 위해서는 자원에 대한 접근을 보장하기 위한 프로토콜이 필요합니다. 대표적으로 사용되는 방식으로는 교착 상태 회피(Deadlock Avoidance), 교착 상태 탐지(Deadlock Detection), 교착 상태 회복(Deadlock Recovery)이 있습니다.

 

Q: 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점은 무엇인가요?

A: 오버로딩과 오버라이딩은 메서드의 다형성을 구현하는 방식입니다. 오버로딩은 같은 이름의 메서드를 여러 개 정의하고, 매개변수의 개수나 타입, 반환값의 타입 등을 다르게하여 사용하는 것입니다. 오버로딩을 사용하면 메서드 이름을 일관된 방식으로 유지하면서, 여러 가지 상황에서 유연한 사용이 가능합니다.

반면, 오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 새롭게 구현하는 것입니다. 자식 클래스에서 오버라이딩한 메서드는 부모 클래스에서 정의된 메서드와 같은 이름, 매개변수, 반환값을 가집니다. 이러한 메서드 오버라이딩은 다형성을 구현하는 가장 대표적인 방법 중 하나입니다.

 

 

 

7. 보안

 

Q: XSS(Cross-site scripting)이란 무엇인가요?

A: XSS(Cross-site scripting)은 웹 애플리케이션 취약점 중 하나로, 해커가 악의적인 스크립트를 삽입하여 공격을 수행할 수 있는 것을 말합니다. 이를 방지하기 위해서는 사용자의 입력값을 검증하고, 적절한 인코딩 처리를 해주는 등의 보안 조치가 필요합니다.

 

Q: SQL Injection(Injection)이란 무엇인가요?

A: SQL Injection은 악의적인 사용자가 SQL 쿼리를 조작하여 데이터베이스를 공격하는 기술입니다. 이를 방지하기 위해서는 입력값을 검증하고, 파라미터화된 쿼리를 사용하는 등의 방어 조치가 필요합니다.

 

Q: HTTPS와 HTTP의 차이점은 무엇인가요?

A: HTTPS와 HTTP는 모두 인터넷에서 데이터를 전송하는 프로토콜입니다. 그러나 HTTPS는 HTTP에 보안 기능을 추가한 것으로, 데이터를 암호화하여 전송하는 방식입니다. 이를 통해 데이터가 중간에 가로채어지더라도 암호화된 데이터를 해독할 수 없어 보안성이 향상됩니다.

 

Q: CORS(Cross-Origin Resource Sharing)란 무엇인가요?

A: CORS(Cross-Origin Resource Sharing)는 웹 브라우저에서 다른 출처(origin)의 자원을 요청하는 것을 제어하는 보안 메커니즘입니다. 이를 통해 악의적인 스크립트로부터 사용자 데이터를 보호할 수 있습니다. CORS를 구현하기 위해서는 서버에서 Access-Control-Allow-Origin 헤더를 설정하고, 프론트엔드에서 XMLHttpRequest 객체를 사용하여 요청을 보내야 합니다.

 
 
 
8. 소프트웨어 개발 방법론

 

Q: Agile 방법론이란 무엇인가요?

A: Agile 방법론은 소프트웨어 개발에서 요구사항의 변경과 적응에 대한 유연한 대처를 중시하는 개발 방법론입니다. 작은 주기를 반복하면서 빠른 프로토타이핑과 피드백을 통해 개발을 진행하며, 팀원 간의 소통과 협업을 강조합니다.

 

Q: Waterfall 방법론이란 무엇인가요?

A: Waterfall 방법론은 소프트웨어 개발에서 각 단계를 순차적으로 진행하는 개발 방법론입니다. 요구사항 수집, 설계, 개발, 테스트, 배포 등의 단계를 한 번에 진행하며, 각 단계가 완료되어야 다음 단계로 진행됩니다.

 

Q: Scrum이란 무엇인가요?

A: Scrum은 Agile 방법론 중 하나로, 작은 팀이 빠르게 협력하여 소프트웨어를 개발하는 방법론입니다. 제품 백로그를 기반으로 일정한 주기(스프린트)를 반복하면서 개발을 진행하며, 매일 짧은 회의를 통해 팀원들이 서로의 진행 상황을 공유합니다.

 

Q: TDD(Test Driven Development)란 무엇인가요?

A: TDD(Test Driven Development)는 테스트를 먼저 작성하고 이를 기반으로 소프트웨어를 개발하는 방법론입니다. 작성한 테스트를 통과할 수 있는 최소한의 코드를 작성하고, 이를 반복적으로 개선하여 최종 소프트웨어를 완성합니다. 이를 통해 소프트웨어의 품질을 향상시킬 수 있습니다.

728x90
반응형