💻 프로그래밍

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를 꼼꼼히 확인해야 합니다.

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

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

🔗 관련 용어

📚 더 배우기