본문 바로가기

⚡️CS자문자답!⚡️

[1주에 1번 자문자답] OSI 7 계층, 시스템 콜, Spring 특징

✋🏻 기수 정렬 (Radix Sort)은 무엇인가요?

낮은 자리수부터 비교하여 높은 자리수까지 정렬해나가는 것이 기본개념입니다.
기수정렬은 O(N)이라는 굉장히 빠른 시간 복잡도를 가지나 버킷이라는 추가 메모리가 필요하고 최대자릿수가 늘어나면 시간도 증가하게 됩니다.

 

  • 0~9 까지의 Bucket(Queue 자료구조의)을 준비한다.
  • 모든 데이터에 대하여 가장 낮은 자리수에 해당하는 Bucket에 차례대로 데이터를 넣는다.
  • 0부터 차례대로 버킷에서 데이터를 다시 가져온다.
  • 가장 높은 자리수를 기준으로 하여 자리수를 높여가며 2번 3번 과정을 반복한다.
  • 시간 복잡도는 O(dn)
  • 자리수가 고정되어 있어서 안정성이 있는 정렬 방식
  • 참고

✋🏻 OSI 7 계층 무엇인가요?

네트워크에서 일어나는 데이터 전달 과정을 7단계 계층으로 나눠 한눈에 파악할 수 있도록 한 것입니다.

** 사용하는 이유 **

각 계층은 서로 독립되어있으며 특정 단계에서 이상이 생기면 다른 단계에 영향을 주지 않고 이상이 생긴 단계만 고칠 수 있다는 장점이 있습니다.

 

✋🏻 OSI 7계층과 TCP/IP 4계층의 차이는 무엇인가요?

OSI 7 계층보다 계층을 좀 더 간소화시킨 개념입니다. 

✋🏻 시스템 콜이 무엇이고 왜 사용하나요?

시스템 콜은 사용자 영역의 응용프로그램이 운영체제에게 커널영역의 기능을 수행해달라고 요청하는 것입니다.

 

시스템콜을 사용하는 이유는 커널영역에 아무나 함부로 접근하지 못하게 하기위해서 입니다. 커널영역은 하드웨어나 민감한 부분이 많기 때문에 운영체제가 미리 정의해논 기능으로 커널영역에 접근할 수 있도록 설계되었습니다. 

 

유저모드의 응용프로그램이 시스템 콜을 사용하면 커널에서 미리 정의된 처리 루틴이 수행되게 됩니다. 만약 유저모드에서 시스템 콜을 사용하지 않고 직접 커널영역에 접근하려한다면 trap을 발생시키게 됩니다.

 

✋🏻 스프링을 왜 사용하나요?

스프링은 자바가 가진 객체 지향의 특징을 이용해 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크입니다.

 

스프링 이전의 EJB는 무겁고 복잡해서 자바의 가장 큰 특징인 객체지향의 장점을 살리지 못했습니다. 그래서 이러한 문제를 해결하기 위해 스프링을 만들었고 사용하게 되었습니다.

 

✋🏻 스프링의 특징은 무엇인가요?

POJO, IOC/DI, AOP, PSA 로 구성되는 스프링 삼각형의 특징을 가지고 있습니다.

 

IoC/DI를 활용하여 객체간 결합도를 낮추고 응집도를 높여 애플리케이션을 개발할 수 있습니다.  변경없이 유연한 확장이 가능합니다.

AOP를 활용하여 공통 관심 사항을 하나의 코드로 만들어 사용할 수 있습니다.

다양한 기술들을 PSA기법을 통해 표준화된 방식으로 접근할 수 있게 합니다. 무한한 확장이 가능합니다.

 

✋🏻 스프링 디자인?

[MVC1, MVC2]

[MVP, MVVM]