1. 라이브러리(Library)란?
라이브러리는 특정 기능을 수행하는 코드가 미리 구현되어 있고, 필요할 때 개발자가 호출하여 사용할 수 있도록 모듈화된 코드 집합을 의미합니다. 즉, 라이브러리는 개발자가 특정 기능을 구현할 때 재사용 가능한 코드를 미리 만들어 놓은 것을 말합니다.
예를 들어, 수학 라이브러리가 있다면 개발자가 직접 복잡한 계산을 매번 작성하지 않고, 라이브러리에서 제공하는 계산 함수를 가져와 사용하면 됩니다.
라이브러리의 특징
- 개발자 주도 제어
- 개발자가 필요한 시점에 특정 기능을 호출합니다.
- 코드의 흐름은 전적으로 개발자가 결정합니다.
- 높은 자유도
- 프로그램의 구조나 흐름에 제약을 거의 주지 않습니다.
- 필요한 부분에만 부분적으로 사용할 수 있습니다.
- 기능 중심적
- 특정 목적이나 기능 단위로 분리되어 있습니다.
- 하나의 라이브러리는 하나의 기능 혹은 밀접한 관련 기능들만 제공합니다.
라이브러리 장단점
- 장점
- 개발 생산성 및 재사용성이 높습니다.
- 자유롭게 필요한 부분만 사용 가능해 유연성이 큽니다.
- 기존 코드를 바꾸지 않고 확장 가능합니다.
- 단점
- 너무 많은 라이브러리를 사용하면 종속성 관리가 어렵습니다.
- 코드 흐름의 통일성이 떨어질 수 있습니다.
라이브러리 주요 예시
- JavaScript: Axios(HTTP 통신), Lodash(유틸리티 함수 제공)
- Java: Jackson(JSON 변환), Apache Commons(범용 유틸리티)
- Python: NumPy(수학연산), Requests(HTTP 요청 처리)
2. 프레임워크(Framework)란?
프레임워크는 소프트웨어 개발의 구조나 흐름을 미리 정해놓은 틀 혹은 뼈대를 말합니다. 개발자는 프레임워크가 정한 규칙과 구조에 따라 빈칸을 채우듯이 프로그램을 개발합니다. 프레임워크는 설계 및 구조적 제어 흐름을 가지고 있으며, 개발자는 이 프레임워크가 미리 정의한 흐름과 규칙에 따라 개발해야 합니다.
예를 들어, 프레임워크는 개발자가 코드를 작성할 위치, 방법, 규칙 등을 미리 지정합니다. 개발자는 이 틀 안에서 프로그램을 완성하면 됩니다.
즉, 개발자는 프레임워크의 규칙을 따라야 하며, 프레임워크가 개발자의 코드를 호출합니다.
프레임워크의 특징
- 프레임워크 주도 제어 (Inversion of Control, IoC)
- 핵심 특징으로, 개발자가 작성한 코드를 프레임워크가 호출합니다.
- 코드 흐름의 제어권이 프레임워크에게 있습니다.
- 제어의 역전(IoC, Inversion of Control)
- 프로그램의 흐름을 프레임워크가 관리합니다.
- 개발자는 프레임워크가 요청한 특정 지점(메서드 오버라이딩, 어노테이션 기반의 메서드)에 맞춰 코드를 작성합니다.
- 낮은 자유도
- 프레임워크가 정한 규칙을 엄격히 지켜야 합니다.
- 전체적인 구조가 이미 정해져 있습니다.
- 확장 가능성
- 구조가 잘 잡혀있기 때문에 프로젝트가 커져도 유지보수 및 확장이 용이합니다.
프레임워크 장단점
- 장점
- 빠르게 표준화된 방식으로 개발이 가능합니다.
- 큰 프로젝트의 구조를 미리 관리해줘서 유지보수 및 확장성이 뛰어납니다.
- 개발자 간 협업 및 코드 표준화가 쉽습니다.
- 단점
- 프레임워크가 가진 구조와 규칙을 정확히 이해하지 못하면 효과적으로 사용하기 어렵습니다.
- 프로젝트가 작거나 간단한 경우 오히려 불필요한 복잡성이 발생할 수 있습니다.
프레임워크 주요 예시
- Java: Spring, Spring Boot, Hibernate
- Python: Django, Flask
- JavaScript: React(라이브러리이면서 프레임워크로 간주되기도 함), Angular, Vue.js
- PHP: Laravel
3. 라이브러리 vs 프레임워크 주요 차이점 요약
면접에서 특히 중요하게 강조되는 키워드는 "제어의 역전(IoC, Inversion of Control)"입니다.
구분 | 라이브러리(Library) | 프레임워크(Framework) |
주체(Who calls?) | 개발자가 라이브러리를 호출함 (능동적) | 프레임워크가 개발자의 코드를 호출함 (수동적) |
코드 흐름(Flow of Control) | 개발자가 코드 흐름 제어 | 프레임워크가 코드 흐름 제어 (IoC) |
개발 자유도 | 높음 (필요할 때만 사용 가능) | 낮음(정해진 규칙에 따라 개발) |
구조 | 구조의 제약이 거의 없음 | 구조를 미리 명확히 제공함 |
사용 난이도 | 상대적으로 쉽고 직관적 | 학습곡선이 높으며 구조 이해가 필요 |
예시 | Axios, NumPy, Lodash | Spring, React, Django, Laravel |
4. 언제 라이브러리를 사용하고 언제 프레임워크를 사용해야 할까?
- 라이브러리를 사용하는 상황
- 간단한 기능 하나만 빠르게 추가하고 싶을 때
- 개발자가 코드 전체의 흐름을 직접 관리하고 싶을 때
- 프로그램의 자유로운 설계를 유지하고 싶을 때
- 프레임워크를 사용하는 상황
- 전체 프로그램의 구조를 처음부터 고민하기 힘들 때
- 일정한 규칙과 구조 아래 빠르게 개발을 하고 싶을 때
- 유지보수와 확장성을 높이기 위해 미리 잘 짜여진 틀이 필요할 때
5. 프레임워크의 핵심 원리: 제어의 역전(IoC, Inversion of Control)
프레임워크의 핵심 개념으로 기술 면접에서 자주 묻는 내용입니다.
- 정의: 코드의 흐름을 개발자가 직접 제어하는 것이 아니라, 프레임워크가 제어하는 설계 방식입니다.
- 쉽게 이해하는 예시:
일반적으로 코드를 작성할 때 메인 함수에서 자신이 원하는 기능을 호출합니다. 하지만 프레임워크에서는 메인 코드가 프레임워크 내부에 있으며, 프레임워크가 작성된 코드의 특정 부분(메서드, 이벤트 등)을 필요할 때 호출합니다. - IoC의 대표적인 구현 방식:
- 의존성 주입(DI, Dependency Injection)
클래스 간의 의존 관계를 외부에서 결정하여 주입하는 방식입니다.
(Spring 프레임워크의 핵심 원리) - 템플릿 메서드 패턴
추상 클래스를 상속받아 특정 메서드를 오버라이드하여 사용자가 원하는 기능을 구현합니다.
- 의존성 주입(DI, Dependency Injection)
- 장점:
- 모듈 간 결합도(Coupling)를 낮추고 유연한 설계를 가능하게 합니다.
- 테스트 용이성 증가, 유지보수 및 확장 용이성 증가
면접에서 자주 나오는 질문 예시 및 간략 답변 포인트
Q. 프레임워크와 라이브러리의 가장 큰 차이가 무엇인가요?
A. 핵심은 제어의 흐름입니다. 라이브러리는 개발자가 직접 호출하지만, 프레임워크는 제어의 역전(IoC)에 의해 프레임워크가 개발자의 코드를 호출합니다.
Q. 왜 프레임워크가 라이브러리보다 복잡한가요?
A. 프레임워크는 미리 정해진 구조와 규칙이 있기 때문에 이를 명확히 이해하고 따라야 합니다. 특히 IoC, DI 등 프레임워크의 핵심 개념을 이해하는 학습 곡선이 필요합니다.
'CS 공부일지' 카테고리의 다른 글
도메인 주소(www.tistory.com) 입력 시 DNS부터 렌더링까지의 네트워크 동작 과정 분석 (0) | 2025.04.17 |
---|---|
컴파일러 언어와 인터프리터 언어의 개념, 차이점 (0) | 2025.03.30 |
CI/CD (Continuous Integration / Continuous Delivery & Deployment) (0) | 2025.03.27 |
클라우드 주요 개념 정리 (가상머신, 온프레미스&오프프레미스, IaaS, PaaS, SaaS, 도커) (1) | 2025.03.26 |
API 개념과 원리 (1) | 2025.03.25 |