💻 프로그래밍

Framework

프레임워크

애플리케이션 개발의 뼈대. 라이브러리와 달리 제어 흐름을 결정.

📖 상세 설명

Framework(프레임워크)는 소프트웨어 애플리케이션 개발을 위한 뼈대와 구조를 제공하는 재사용 가능한 소프트웨어 플랫폼입니다. 개발자가 처음부터 모든 것을 작성할 필요 없이, 검증된 설계 패턴과 공통 기능을 기반으로 애플리케이션을 구축할 수 있게 해줍니다.

프레임워크와 라이브러리의 가장 큰 차이점은 '제어의 역전(Inversion of Control, IoC)'입니다. 라이브러리는 개발자가 필요할 때 호출하여 사용하지만, 프레임워크는 개발자가 작성한 코드를 프레임워크가 호출합니다. 이를 "할리우드 원칙(Don't call us, we'll call you)"이라고도 부릅니다.

대표적인 프레임워크로는 웹 백엔드의 Spring(Java), Django(Python), Express(Node.js), Laravel(PHP)이 있고, 프론트엔드에는 React, Vue, Angular가 있습니다. 모바일 개발에는 Flutter와 React Native가, AI/ML 분야에는 PyTorch와 TensorFlow가 널리 사용됩니다.

프레임워크는 생산성 향상, 코드 일관성, 보안 기능, 커뮤니티 지원 등의 장점을 제공합니다. 반면 학습 곡선, 유연성 제한, 프레임워크 종속성(vendor lock-in) 같은 단점도 있으므로, 프로젝트 요구사항에 맞는 프레임워크를 신중히 선택해야 합니다.

💻 코드 예제

# Flask 프레임워크 사용 예제 (Python)
# 프레임워크가 라우팅, 요청 처리, 응답 생성을 담당

from flask import Flask, jsonify, request

app = Flask(__name__)

# 프레임워크가 이 함수를 호출 (제어의 역전)
@app.route('/api/users', methods=['GET'])
def get_users():
    users = [
        {'id': 1, 'name': '김개발', 'role': 'Backend'},
        {'id': 2, 'name': '이프론트', 'role': 'Frontend'}
    ]
    return jsonify(users)

@app.route('/api/users', methods=['POST'])
def create_user():
    data = request.get_json()
    # 프레임워크가 자동으로 JSON 파싱, 유효성 검사 등 처리
    new_user = {
        'id': 3,
        'name': data['name'],
        'role': data['role']
    }
    return jsonify(new_user), 201

# 프레임워크가 서버 실행, 요청 라우팅 등 모든 것을 관리
if __name__ == '__main__':
    app.run(debug=True, port=5000)


# Express.js 프레임워크 예제 (Node.js) - 비교
# const express = require('express');
# const app = express();
#
# app.get('/api/users', (req, res) => {
#     res.json([{ id: 1, name: 'Kim' }]);
# });
#
# app.listen(3000);

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"이번 프로젝트는 Spring Boot 프레임워크로 진행하면 좋겠습니다. 우리 팀에 Java 경험자가 많고, 엔터프라이즈 레벨의 보안과 확장성이 기본 제공됩니다. 프레임워크 컨벤션을 따르면 온보딩 시간도 단축할 수 있어요."
💬 면접에서
"프레임워크와 라이브러리의 핵심 차이는 제어의 역전입니다. 라이브러리는 제가 호출하지만, 프레임워크는 제가 작성한 코드를 프레임워크가 호출합니다. 예를 들어 React에서 컴포넌트를 정의하면, React가 상태 변화 시 해당 컴포넌트의 render를 호출합니다."
💬 코드 리뷰에서
"Django ORM을 직접 우회해서 raw SQL을 쓰셨는데, 프레임워크가 제공하는 QuerySet을 활용하시면 SQL 인젝션 방어와 DB 이식성이 자동으로 보장됩니다. 프레임워크 컨벤션을 따르는 게 장기적으로 유지보수에 유리해요."

⚠️ 흔한 실수 & 주의사항

프레임워크 선택 전 과도한 커스터마이징 계획

프레임워크의 컨벤션과 너무 다르게 구현하려면 차라리 다른 프레임워크를 선택하세요. 프레임워크와 싸우는(fighting the framework) 것은 생산성을 크게 떨어뜨립니다.

프레임워크 버전 업그레이드 무시

오래된 프레임워크 버전은 보안 취약점이 있을 수 있습니다. 정기적인 업데이트와 마이그레이션 계획을 세우세요. Major 버전 업그레이드 시에는 Breaking Changes를 꼼꼼히 확인해야 합니다.

프레임워크 문서와 컨벤션 숙지

공식 문서를 충분히 읽고, 프레임워크가 권장하는 프로젝트 구조와 패턴을 따르세요. 이렇게 하면 다른 개발자들이 코드를 쉽게 이해할 수 있고, 프레임워크의 장점을 최대한 활용할 수 있습니다.

🔗 관련 용어

📚 더 배우기