[CS] 기술면접 - 1

Bomin·2022년 12월 27일
0

[CS] 

목록 보기
5/5
post-thumbnail

디자인패턴 Q&A

1. 프레임워크와 라이브러리는 차이는 무엇인가요?

프레임워크

원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대.

애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발한다.

앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드들을 구현하면 된다.

그 예로는 java 서버 개발에 사용되는 Spring, Python의 Django, 웹개발의 Angular와 Vue.js 가 있다. + Express.js

라이브러리

소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. 즉 특정 기능을 모와둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들이다.

그 예로는 Node.js 로 설치한 npm 모듈, 웹에서 사용자 인터페이스 개발에 사용되는 React.js 가 있다.

답변:

프레임워크와 라이브러리는 공통으로 사용될 수 있는 특정 기능들을 모듈화 한 것을 말합니다. 하지만 프레임워크는 폴더명, 파일명 등에 대한 규칙이 있으며 더 엄격합니다.

이 둘의 큰 차이점은 “제어 흐름”이 어디에 있느냐인데,

라이브러리를 사용할 때는 능동적으로 개발 시 필요한 기능이 있을 때 라이브러리를 호출하는 등 코드의 흐름을 직접 제어해야합니다.

반면 프레임워크는 애플리케이션의 코드가 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고 사용자가 그 안에 필요한 코드를 작성하게 됩니다.

여기서 제어의 역전(IoC, Inversion of Control)이란,

어떠한 일을 하도록 만들어진 Framework에 Control 권한을 위임하는 것을 의미하는데, 간단히 말해 프로그램의 제어 흐름 구조가 뒤바뀐 것을 뜻합니다.

라이브러리의 경우 애플리케이션의 흐름을 사용자가 직접 제어해야 하지만 프레임워크의 경우 코드를 연결할 수 있는 위치를 제공하고 필요에 따라 사용자가 연결한 코드를 호출하는 제어 흐름 권한을 가지고 있습니다.

2. 그렇다면 최근해 사용한 프레임워크와 라이브러리를 알려주세요.

답변:

최근에 프레임워크로는 node.js의 express.js 웹 서버를 구성해서 사용해보았고 라이브러리로는 react.js로 웹 인터페이스를 구현했습니다. 또 리액트를 사용하면서 다양한 npm 라이브러리 중 리덕스, 스타일드 컴포넌트 등을 사용했습니다.

3. 프록시 서버에 대해 설명하고 사용해 본 적이 있다면 예시를 들어 말해주세요.

답변:

프록시 서버란 서버 앞단에 두어서 캐싱, 로깅, 데이터 분석을 서버보다 먼저하는 서버를 말합니다. 프록시 서버를 통해 포트 번호를 바꿔서 사용하거나 숨길 수 있고, 공격자의 DDOS 공격을 방어하거나 CDN을 프록시 서버에서 처리하여 캐싱 처리를 효율적으로 할 수도 있습니다. nginx로 Node.js로 이루어진 서버 앞단에 두어서 버퍼 오버플로우를 해결하거나 CloudFlare를 둬서 캐실, 로그 분석 등을 하는 사용 사례가 있습니다.

저는 프론트엔드로서 개발할 때, 서버와 클라이언트가 다른 레포지토리에서 작업한 후 프론트에서 api 요청 테스트를 하는데 CORS 오류가 나타났었습니다.

nginx를 사용하여 프록시 서버를 구축해 api 서버 포트를 3001번, 클라이언트 포트를 3000번으로 띄운 후 클라이언트의 package.json에서 proxy 설정을 해주어서 해결한 기억이 있습니다.

참고자료-디자인패턴Q&A
참고자료-프레임워크와 라이브러리

profile
Frontend-developer

0개의 댓글