Daily Dev Q&A: 프레임워크(Framework)

2025. 12. 13. 09:18·Archive/Daily Dev Q&A

Topic (오늘의 주제)

프레임워크 vs 라이브러리 (Framework vs Library)

: 소프트웨어 개발을 도와주는 미리 작성된 코드의 집합이라는 점은 같지만, **애플리케이션의 제어 흐름(Flow of Control)**을 누가 쥐고 있느냐에 따라 구분된다.

Why (왜 사용하는가? 왜 중요한가?)

실무: 바닥부터 모든 것을 만들지 않고, 검증된 골격(Framework)과 도구(Library)를 사용하여 개발 생산성과 코드 품질을 상향 평준화한다.

구조적 의미: 프레임워크는 '제어의 역전(IoC, Inversion of Control)'을 통해 개발자가 비즈니스 로직에만 집중하게 하고, 라이브러리는 특정 기능을 재사용 가능하게 부품화한다.

면접 의도: IoC(제어의 역전) 개념을 정확히 이해하고 있는지, 그리고 도구를 주도적으로 사용하는지 아니면 도구의 규칙에 따라가는지를 구분할 수 있는지 확인한다.

Core Concept (핵심 개념 정리)

구분 프레임워크 (Framework) 라이브러리 (Library)
핵심 차이 프레임워크가 나(내 코드)를 호출한다. 나(내 코드)가 라이브러리를 호출한다.
제어권 프레임워크 (IoC 적용 O) 개발자 (IoC 적용 X)
비유 자동차(Car): 프레임(차체) 안에 내가 타서 운전만 함.
차의 굴러가는 원리는 정해져 있음.
망치/톱(Tools): 내가 집을 짓기 위해 필요할 때 꺼내서 마음대로 사용함.
사용 예시 Spring Boot, Angular, Django, Android jQuery, Apache Commons, Lombok, React(*)
동작 방식 정해진 규칙(LifeCycle)에 맞춰 코드를 짜면, 프레임워크가 알아서 실행함. 내가 필요할 때 직접 메서드를 호출하여 로직을 수행함.

(*) 참고: React는 엄밀히 말하면 UI 라이브러리지만, 생태계와 컴포넌트 생명주기 관리 측면에서 실무적으로는 프레임워크처럼 다루어지기도 합니다.

Interview Answer Version (면접 답변식 요약)

"프레임워크와 라이브러리의 가장 큰 차이는 '제어의 흐름(Flow of Control)'을 누가 관리하느냐입니다.

라이브러리는 개발자인 제가 필요할 때 직접 코드를 호출하여 흐름을 제어하지만, 프레임워크는 '제어의 역전(IoC)'이 적용되어 있어 프레임워크가 정해둔 생명주기와 규칙 안에서 제 코드를 호출하는 방식입니다.

저는 실무에서 Spring Boot 프레임워크의 규칙 안에서 비즈니스 로직을 구현하고, 날짜 계산이나 유틸리티 기능은 라이브러리를 가져와 주도적으로 사용하는 경험을 했습니다."

Experience & Practical Tip (경험 및 활용)

1. 사용자 경험 정리 (면접용 가이드)

저는 현재 Spring Boot(프레임워크), jQuery(라이브러리), 그리고 **MyBatis(SQL 매퍼 프레임워크)**를 사용해 봤습니다. 이를 병원 ERP 프로젝트 경험에 빗대어 말해 보겠습니다.

  • 답변 예시:
  • "저는 병원 ERP 프로젝트를 진행하며 Spring Boot 프레임워크를 사용했습니다. 웹 서버 설정이나 객체 관리(Bean) 같은 복잡한 기반 작업은 Spring Boot에게 맡기고(제어의 역전), 저는 환자 예약이나 장비 관리 같은 핵심 비즈니스 로직 구현에 집중할 수 있었습니다. 반면, 프론트엔드에서 DOM 조작이 필요할 때는 jQuery 라이브러리를 제가 직접 호출하여 필요한 시점에 사용했습니다."

2. 사용 시 주의할 점 (Practical Tip)

  • 프레임워크의 라이프사이클 준수: 프레임워크(예: Spring Bean, React useEffect)는 고유의 **생명주기(Lifecycle)**가 있습니다. 이 흐름을 거스르면 버그가 발생하므로, 프레임워크를 쓸 때는 "규칙을 철저히 따르는 것"이 중요합니다.
  • 라이브러리 의존성 관리: 너무 많은 라이브러리를 무분별하게 추가하면 프로젝트가 무거워지고, **버전 충돌(Dependency Hell)**이 발생할 수 있습니다. build.gradle 등을 통한 체계적인 관리가 필수입니다.

예상 꼬리질문 정리

  1. Q: '제어의 역전(IoC)'이 무엇인가요?
    • A: 프로그램의 제어 흐름을 개발자가 아닌 프레임워크가 가져가는 것입니다. 예를 들어, 자바 객체의 생성과 소멸을 개발자가 new로 직접 하지 않고, Spring 컨테이너가 대신 관리해주는 것이 대표적인 예입니다.
  2. Q: Spring Boot에서 IoC는 구체적으로 어떻게 동작하나요?
    • A: **DI(Dependency Injection, 의존성 주입)**를 통해 구현됩니다. @Controller, @Service 등의 어노테이션을 붙이면 스프링 컨테이너가 알아서 객체를 만들고 필요한 곳에 주입해 줍니다.
  3. Q: jQuery는 프레임워크인가요 라이브러리인가요? React는요?
    • A: jQuery는 개발자가 필요할 때 호출하는 라이브러리입니다. React는 공식적으로는 'UI 라이브러리'라고 정의하지만, 컴포넌트 생명주기를 가지고 있고 데이터 흐름을 강제한다는 점에서 프레임워크적인 특성도 가지고 있습니다.

Deep Dive (공부하며 몰랐던 개념)

"왜 제어권을 프레임워크에 넘겨야(IoC) 하는가?"를 이해하는 것이 핵심이다.

① IoC (Inversion of Control, 제어의 역전)

[Before] 기존 방식 (개발자가 제어) 

내가 필요한 객체를 내 코드 안에서 직접 new 연산자로 생성하고 관리했습니다.

  • 문제점: OrderService가 변경되면, 이를 사용하는 모든 코드를 찾아서 수정해야 함 (강한 결합, 유지보수 어려움).
Java
// 개발자가 직접 의존하는 객체(Service)를 생성함 -> 강한 결합
OrderController controller = new OrderController();
controller.service = new OrderService();

 

[After] IoC 적용 방식 (Spring 프레임워크가 제어) 

나는 "이 객체가 필요해"라고 표시(@Autowired)만 해두면, 프레임워크(Spring Container)가 알아서 객체를 생성해서 주입해 줍니다.

  • 해결: 객체 생성과 관리의 책임이 나에게서 프레임워크로 **'역전'**되었습니다. 이제 개발자는 객체를 어떻게 만들지 고민하지 않고, **비즈니스 로직(주문 처리)**에만 집중하면 됩니다.
Java
@Controller
public class OrderController {
    // 내가 만들지 않음. 스프링이 넣어줌 (DI).
    @Autowired
    private OrderService service; 
}
 

'Archive > Daily Dev Q&A' 카테고리의 다른 글

Daily Dev Q&A: 자바의 람다 표현식  (0) 2025.12.16
Daily Dev Q&A: RDBMS  (0) 2025.12.15
Daily Dev Q&A: 자바의 빌더 패턴(Builder Pattern)  (0) 2025.12.11
Daily Dev Q&A: 자바 제네릭  (0) 2025.12.10
Daily Dev Q&A: 자바의 접근 제어자(Access Modifier)  (0) 2025.12.09
'Archive/Daily Dev Q&A' 카테고리의 다른 글
  • Daily Dev Q&A: 자바의 람다 표현식
  • Daily Dev Q&A: RDBMS
  • Daily Dev Q&A: 자바의 빌더 패턴(Builder Pattern)
  • Daily Dev Q&A: 자바 제네릭
tlsgkstj
tlsgkstj
짱구의 성장 일기
  • tlsgkstj
    코딩하는 짱구
    tlsgkstj
  • 전체
    오늘
    어제
    • 분류 전체보기 (159)
      • About (1)
      • Projects (35)
        • Personal Projects (21)
        • Team Projects (14)
      • Engineering (20)
        • CS & Tools (0)
        • Backend Core (15)
        • Frontend (1)
        • Infra & Cloud (2)
        • AI & Tools (1)
      • Trouble Shooting & Issues (0)
      • Growth & Career (38)
        • Interview Prep (0)
        • Retrospectives (38)
      • Archive (65)
        • TIL (8)
        • Daily Dev Q&A (56)
  • 블로그 메뉴

    • 홈
    • About
    • Projects
    • Tech Stack
    • Dev Log
    • GitHub
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    프로덕트개발자
    REACT
    til
    Project_Review
    프로젝트회고
    클로드코드
    aws_s3
    network
    OrphanRemova
    spring
    커리어리셋
    DevFestIncheon2025
    Spring비교
    java
    jpa
    경기기후바이브코딩
    backend
    데브페스트
    devlog
    SpringBoot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
tlsgkstj
Daily Dev Q&A: 프레임워크(Framework)
상단으로

티스토리툴바