티스토리 뷰

기타

[기술면접] IT 면접 질문

kr98gyeongim 2021. 3. 22. 22:26

■ 메모리 구조(code, data, stack, heap)

프로그램이 OS에서 할당받는 메모리 영역은 크게 code, data, stack, heap 4가지 영역이 있다.

 

- 코드(code) 영역

: 실행할 프로그램의 코드가 저장되는 영역.

CPU는 코드영역에 저장된 명령어를 가지고 가서 처리한다.

 

- 데이터(data) 영역

: 프로그램의 전역변수, 정적변수(static)가 저장되는 영역.

프로그램이 실행될 때 마다 할당이 되며, 프로그램이 종료되면 소멸한다.

 

- 스택(stack) 영역

: 함수 호출과 관계되는 지역변수와 매개변수가 저장되는 영역.

함수의 호출과 함께 할당되고, 함수 호출이 완료되면 소멸한다.

 

- 힙(heap) 영역

: 사용자가 직접 관리하는 메모리 영역.

사용자가 직접 동적으로 할당하고 해제하는 영역이다.

 

■ 프레임워크와 라이브러리의 차이

프로그램의 제어권이 어디에 있느냐의 차이가 있다.

 

- 프레임워크(Framework)

프레임워크는 프로그램의 제어권이 프레임워크에 있다. 

사용자는 프레임워크의 제어흐름 안에서 필요한 기능을 개발한다.

 

- 라이브러리(Library)

: 프로그램의 제어권이 사용자에게 있다.

사용자는 라이브러리를 직접 호출해서 사용한다.

 

TCP/UDP 차이

TCP와 UDP는 모두 클라이언트와 서버간의 통신 채널을 제공하고 통신을 관리하는 레이어 4 계층 프로토콜이다.

통신 채널이라고 하는 것은 이른바 "포트"라고 하는 것으로, 1번부터 65535번까지의 번호를 사용할 수 있다.

동일한 IP 주소라도 TCP나 UDP의 포트가 다른 경우, 제공되는 서비스가 다르다.

 

- TCP(Transmission Control Protocol)

: IP 상위 프로토콜의 전송 계층에서 작동하는 프로토콜이다.

TCP는 연결형 서비스이며 고신뢰성(3-way handshaking을 통해 통신 전에 연결을 설정하고 4-way handshaking을 통해 해제, ack를 통한 상대방의 수신 확인 및 재발송 처리 등) 및 통신 효율 최적화 기능(window에 의한 흐름 제어 및 congestion 제어)를 제공한다.

서버와 클라이언트의 소켓이 연결되면 연결된 상태로 양방향 1대1 통신에서 사용된다.

데이터 송/수신 시 정상적으로 전달이 되었는지 내부적으로 검사를 하기 때문에 

메시지 전달과 전송 순서까지 보장되는 장점을 가지고 있다.

하지만 이러한 제어 기능으로 인해 UDP보다는 속도가 느리다.

 

- UDP(User Datagram Protocol)

: TCP와 마찬가지로 IP 상위 프로토콜의 전송 계층 프로토콜이다.

UDP는 비연결형 서비스이기때문에 TCP에 비하면 신뢰할 수 없지만 고속으로 전송을 할 수 있다.

또한 UDP 헤더 사이즈(8byte)가 적기 때문에 그만큼 애플리케이션의 데이터를 많이 송수신할 수 있다. 

하지만 패킷이 도달한다는 보장이 없기 때문에 패킷 로스 등의 경우 애플리케이션 측에서 재발송처리를 해서 통신을 성립시키거나 패킷 로스를 용인할 수 있는 입이어야한다.

즉, TCP처럼 데이터 전달 여부를 확인하는 절차가 없기때문에 메시지가 유실될 가능성도 있으며

순서가 맞지 않을 수 있다.

대신에 속도가 빠르다는 장점이 있으며 보통 영상이나 음성 스트리밍 같은 경우처럼 

조금 유실되더라도 괜찮으며 속도가 중요한 경우에 주로 사용된다.

데이터의 흐름제어 및 혼잡제어를 할 수 있다. 

 

흐름제어

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

 

1. stop and wait 방식

   매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송합니다.

 

2. 슬라이딩 윈도우

   여러개의 연속된 패킷을 한번에 전송하고 전송완료된 패킷들에 대해 한번의 확인 응답을 받고 전송된 패킷의 수만큼

   다음 패킷들을 다시 윈도우에 포함시켜 전송할 수 있게 한다.

 

전송 실패 시 선택 방법

・ 고백 N

: 송신 측에서 0, 1, 2, 3 패킷을 보냈을 때 2번 패킷에서 전송 오류가 나면 2번에 대한 부정응답을 보내고

  2번 뒤로 받았는 패킷을 모두 버리고 다시 받는다.

・ 선택적 재전송

: 받지 못한 패킷에 대해서만 부정응답을 보내 받는다.

 

혼잡제어

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

 

1. AIMD(Additive Increase / Multicative Decrease)

 처음에 패킷을 하나씩 보내고 이것이 문제 없이 도착하면 window 크기(= 단위 시간 내에 보내는 패킷 수)를 

 1씩 증가시켜가며 전송하는 방법이다. 

 만약 패킷전송을 실패하거나 일정시간을 넘으면 패킷을 보내는 속도를 절반으로 줄이게 된다.

 

2. Slow start

 미리 정해진 임계 값에 도달할 때까지 윈도우의 크기를 2배씩 증가

 윈도우의 크기가 임계 값에 도달한 이후 혼잡회피단계로 넘어가 전송한 데이터에 대한 ACK를 받으면 윈도우 크기를 1개씩 증가 

 

3. 빠른 재전송(Fast Retransmit)

 응답되는 ack가 중복된 값이면 패킷 손실로 판단하고 타임아웃 시간을 대기하지않고 즉시 해당 패킷을 재전송 요청한다.

 

 TDD(Test Driven Development)

TDD란 테스트 주도 개발이라는 개발 방법론이다.

일반적으로는 코드를 짜고 테스트를 작성하는 반면,

테스트 케이스를 먼저 만들고 테스트를 통과하는 코드를 작성, 추가하는 것을 반복하면서 개발을 진행하는 방법이다.

 

장점 3가지

- 후공정(=test 공정) 버그 이월 유용

- 시스템의 요건을 깊이 이해가능

- 개발자가 안심하고 코딩에 집중할 수 있어 심리부담감이 적음

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함