본문 바로가기
Daily Dev Q&A 정리 템플릿

25.12.12 프레임워크가 무엇이고 무엇을 사용했나요? 라는 질문에 대해 정리하기

by teg0 2025. 12. 14.

프레임워크란?

사전적으로 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임이다.

쉽게 설명하자면, 프레임워크는 frame이라는 틀, 구조라는 뜻과 work라는 일하다 뜻을 합친 것이다.

 

기술적으로는 애플리케이션 개발 시 필수적인 코드, 알고리즘, 데이터베이스 연동 등의 기능을 위해 어느 정도 뼈대(구조)를 제공해 주는 코드의 집합이다.

 

건물을 짓는 것에 비유해 보면,

  • 프레임워크가 없을 때: 땅을 파는 것부터 기둥 세우기, 배관 공사, 인테리어까지 모든 것을 개발자가 처음부터 끝까지 직접 설계하고 만들어야 한다. 자유도는 높지만 시간이 오래 걸리고 부실 공사의 위험이 크다
  • 프레임워크를 사용할 때: 튼튼한 "모델 하우스의 기본 골조"가 이미 세워져 있다. 개발자는 이 골조 안에서 방의 벽지를 바르거나 가구를 배치하는 등(비즈니스 로직 구현) 살을 붙이는 작업에만 집중하면 된다.

 

장점 생산성 향상: 기본 구조와 기능을 제공하므로 개발 시간을 단축할 수 있다.

코드 품질 유지: 개발자마다 코딩 스타일이 달라도 프레임워크의 규칙을 따르므로 코드가 일정 수준 이상으로 통일된다.

유지보수 용이: 체계적인 구조 덕분에 버그 수정이나 기능 확장이 쉽다.
단점 학습 곡선: 프레임워크 사용법(규칙)을 익히는 데 시간이 걸린다.

낮은 자유도: 프레임워크가 정한 규칙을 벗어나서 개발하기가 어렵다.

불필요한 기능: 프로젝트 규모에 비해 너무 방대한 기능이 포함될 수 있어 무거워질 수 있다.

 

실무에서 사용하는 프레임워크 종류

 

  • Spring Boot (Java): 한국 백엔드 개발의 표준. 엔터프라이즈급 웹 애플리케이션 개발을 위한 강력한 기능을 제공한다.
  • Django (Python): "배터리 포함(Battery Included)"이라는 철학으로, 웹 개발에 필요한 거의 모든 기능을 기본 제공한다.
  • Flutter (Dart): 구글이 만든 모바일 UI 프레임워크로, 하나의 코드로 안드로이드와 iOS 앱을 동시에 개발할 수 있다.
  • Vue.js / Angular (JS): 웹 프론트엔드 개발을 위한 프레임워크이다. (React는 라이브러리로 분류되지만 생태계상 프레임워크처럼 쓰인다.)

 

라이브러리와 프레임워크의 차이점

가장 큰 차이점은 "제어의 역전(IoC, Inversion of Control)".

누가 흐름을 주도하느냐의 차이이다.

 

제어의 역전 (IoC: Inversion of Control)

"개발자가 코드를 호출하는 것이 아니라, 프레임워크가 개발자의 코드를 호출한다."
일반적인 프로그래밍에서는 개발자가 모든 흐름을 주도한다. 객체를 직접 생성하고, 언제 실행할지 결정한다. 하지만 프레임워크를 쓰면 이 주도권이 프레임워크로 넘긴다. 이것을 제어의 역전이라고 한다.

 

  • 라이브러리: "내가 코드를 제어합니다."
    • 개발자가 필요할 때 라이브러리를 가져다가 쓴다. (예: 도구 상자에서 망치를 꺼내 씀)
  • 프레임워크: "프레임워크가 나(내 코드)를 제어합니다."
    • 프레임워크가 정해둔 규칙과 생명주기 안에서, 개발자가 작성한 코드를 프레임워크가 호출하여 실행한다. (예: 자동차라는 틀 안에서 운전자가 핸들만 조작함)

 

우리가 사용하는 프레임워크 / 라이브러리

React (리액트)

사용자 인터페이스(UI)를 만들기 위한 자바스크립트 라이브러리이다. 가상 돔(Virtual DOM)을 사용하여 변경된 부분만 효율적으로 렌더링 하며, 컴포넌트(Component) 기반으로 재사용성을 높인다.

// 버튼 컴포넌트를 만들어 어디서든 재사용
function MyButton() {
  return (
    <button onClick={() => alert('클릭!')}>
      눌러보세요
    </button>
  );
}

 

 

번외) 왜 리액트는 라이브러리인가요?

  1. 많은 내장 기능이 부족하고, 타사 패키지(third-party packages)에 크게 의존한다.
    ex) routing을 위해 react-router를 사용해야 하거나 API를 호출하기 위해 Axios 나 fetch API를 사용해야 한다.
  2. 애플리케이션 개발을 위한 완전한 생태계를 제공하지 않으며, 디자인 시스템도 제공하지 않으며, React에서는 무언가를 할 수 있는 "올바른" 방법이 없고, 스타일 가이드도 없다.
    즉, React를 이용하는 모든 프로젝트가 완전히 다르게 보일 수 있다.
  3. React는 무언가를 할 수 있는 옵션이 많고, 도구(패키지)를 신중하게 선택하고, 모든 프로젝트에 적합한 설계 시스템을 만들어야 하기 때문에, "독단적"이다.

 

JPA (Java Persistence API) / Hibernate

자바의 ORM(Object-Relational Mapping) 기술 표준이다. SQL을 직접 작성하지 않고, 자바 객체(Entity)를 통해 데이터베이스를 조작할 수 있게 해 준다. 생산성이 높고 객체지향적인 개발이 가능하다.

// SQL: INSERT INTO member (name) VALUES ('홍길동') -> 불필요
// Java 객체 저장만으로 DB 반영
memberRepository.save(new Member("홍길동"));

 

MyBatis (마이바티스)

SQL 매퍼(SQL Mapper) 프레임워크이다. 자바 코드와 SQL 문을 분리(XML 파일 등)하여 관리한다. 복잡한 쿼리를 세밀하게 제어해야 하거나, 기존의 레거시 DB(데이터베이스가 이미 되어 있음)를 다룰 때 유리하다.

<select id="selectMember" resultType="Member">
  SELECT * FROM member WHERE id = #{id}
</select>

 

 

MyBatis vs JPA (Hibernate) 비교

구분 MyBatis (SQL Mapper) JPA (ORM)
핵심 개념 SQL 중심
자바 코드와 SQL 문을 연결(Mapping)
객체 중심
자바 객체를 DB 테이블에 자동으로 연결(Mapping)
SQL 작성 개발자가 직접 쿼리문을 작성한다. (XML 등) 프레임워크가 쿼리를 자동 생성한다.
장점 • 복잡한 쿼리(통계, 조인) 작성이 편하다.
• SQL 튜닝이 용이하다.
• 기존 DB 구조에 맞추기 쉽다.
• 단순 CRUD 생산성 압도적 높다.
• 유지보수 용이하다. (필드 변경 시 쿼리 수정 불필요)
• DB 종류가 바뀌어도 코드 수정 적다.
단점 • 단순 CRUD도 SQL을 다 짜야 한다.
• DB 종속적이다.
• 복잡한 쿼리는 처리가 어려울 수 있다.
• 학습 곡선이 높다. (매커니즘 이해 필요)
주 사용 복잡한 쿼리가 많은 SI 프로젝트, 금융권, 공공기관 스타트업, 서비스 기업, 비즈니스 로직이 복잡한 곳

 

면접 답변식 요약

프레임워크란 소프트웨어 개발의 생산성과 품질을 높이기 위해, 뼈대가 되는 클래스와 인터페이스 등을 미리 제공해 주는 반제품 형태의 소프트웨어 환경입니다.
라이브러리와의 가장 큰 차이점은 '제어의 역전(IoC)' 여부입니다. 라이브러리는 개발자가 필요할 때 직접 호출하여 흐름을 제어하는 반면, 프레임워크는 프레임워크가 주도하는 흐름 속에서 개발자가 작성한 코드가 호출되는 방식으로 동작합니다.
저는 프로젝트에서 React를 통해 컴포넌트 단위의 효율적인 UI 구성을 경험했고, 백엔드에서는 JPA를 사용하여 객체 지향적인 데이터 설계를, MyBatis를 통해 복잡한 쿼리를 최적화하여 처리한 경험이 있습니다.