프레임워크

Don't call us, we'll call you. (Hollywood Principle)

— 내가 필요할 때 호출하는 도구가 아닌, 뼈대 자체가 내 코드를 적재적소에 실시간 기습 호출해 주는 프레임워크 고유의 '제어의 역전(IoC)' 법칙

주니어 면접에서 '라이브러리와의 결정적 차이가 무엇인가요?'라는 질문으로 지원자들의 심장 박동수를 사정없이 올려대는 단골 아키텍처 낚시 질문 1순위. 사실상 이 규칙대로 코딩 한 줄이라도 비껴갔다가는 내 코드를 무시하고 자비 없이 빌드 실패 콘솔창을 뿜어대며 작동을 거부하는 무서운 절대 권력 독재자(...)

1. 개요

원활하고 표준화된 소프트웨어 개발을 위해 시스템의 구조, 라이프사이클, 흐름 제어를 미리 완벽하게 갖춰둔 거대하고 규격화된 프로그래밍의 뼈대 틀. 단순 유틸리티 도구 모음집인 라이브러리와 달리, 프로그램 전체의 실행 주도권을 자사 내부 엔진이 꽉 틀어쥐고 제어하는 제어의 역전(IoC, Inversion of Control) 메커니즘을 핵심 DNA로 삼는다. 개발자는 단지 이 프레임워크가 뚫어놓은 정교한 약속된 구멍에 내 커스텀 코드 조각을 플러그인처럼 얹어서 구동하게 된다.

2. 제어의 역전(IoC)과 할리우드 원칙

프레임워크를 규정하는 가장 강력한 아이덴티티는 '제어의 역전(IoC)'이다. 일반적인 고전 프로그래밍에서는 개발자가 작성한 메인 main() 함수가 직접 클래스를 인스턴스화하고 순차적으로 실행 제어권을 리드한다. 하지만 프레임워크를 도입하는 순간, 프로그램 구동의 주도권은 프레임워크 엔진 자체로 완전히 빼앗긴다. 프레임워크는 내부에서 이미 프로세스를 무섭게 돌리고 있으며, 사전에 정해둔 라이프사이클 규칙(예: 객체 생성 시점, 요청 유입 시점)에 맞춰 개발자가 짠 함수들을 동적으로 거꾸로 호출해 준다. 이 기괴한 호출의 뒤바뀜을 영화 배역 오디션 낙방 후 듣는 건조한 대답인 '전화 주지 마세요, 캐스팅하고 싶으면 우리가 먼저 전화할게요(할리우드 원칙)'에 비유하여 전산학의 정설로 받들고 있다.

3. 대표적인 업계 독재 프레임워크 목록

백엔드 진영의 대한민국 절대 지배자 자바 Spring Boot와 프론트엔드의 앱 메타 프레임워크인 Next.js, 구글의 모바일 프레임워크인 Flutter가 대표적 예시다. 예를 들어 Spring Boot를 쓰기 시작하면, 개발자는 HTTP 서블릿 객체를 손수 생성해 소켓을 열 필요가 없다. 단지 클래스 위에 @RestController라는 마법의 골뱅이 어노테이션(Annotation) 하나만 달아 정해진 폴더에 넣어두면, 스프링 컨테이너가 부팅 시점에 이 클래스를 발견해 자동으로 인스턴스를 조립하고, 데이터베이스 통신 연결 및 톰캣 구동까지 우주적 차원에서 통째로 제어해 준다. 규칙을 따르지 않으면 가동조차 되지 않는 강한 제약성과 일관된 품질을 맞춘 설계이다.1

4. 관련 밈 및 드립

4.1. 어노테이션 무지성 복사 코더

스프링 같은 초강력 프레임워크의 편리한 마법에 중독된 나머지, 자바나 컴퓨터 내부 동작 원리를 철저히 모른 채 클래스 위에 @Autowired, @Transactional 같은 골뱅이 기호만 기계처럼 무지성 복사 붙여넣기 해대며 코드를 작동시키는 주니어들을 풍자하는 밈이다. 이들은 면접에서 '어노테이션이 동적으로 타겟 오브젝트를 프록시 객체로 감싸 동작하는 전산 원리를 설명해달라'는 시니어 아키텍트의 질문을 마주하는 순간 '그냥 적으면 다 마법처럼 잘 돌아갔었는데요...'라며 사색이 되어 사직서를 준비하게 된다.(...)

5. 여담

  • 프레임워크는 뼈대 고정이다: 아키텍처 공학적으로 라이브러리는 내 마음에 안 들거나 구형이 되면 더 성능이 좋고 가벼운 다른 라이브러리로 코드 몇 줄만 고쳐 가볍게 마이그레이션이 수월하지만, 프레임워크는 한 번 프로젝트 전체 뼈대로 박아두면 시스템 전체 구조가 프레임워크의 노예가 되기 때문에 프로젝트를 새로 태어나게 재작성하지 않는 한 마이그레이션이 거의 불가능에 수렴한다.
  • Boilerplate를 분쇄한다: 프레임워크는 개발자가 웹서버 소켓 통신을 열거나 RDBMS 커넥션 풀을 관리하기 위해 손수 노가다로 반복 타이핑해야 하는 무의미하고 지루한 '보일러플레이트(Boilerplate)' 소스코드 수만 줄을 완전히 내면화하여 지워버림으로써 비즈니스 핵심 로직에만 200% 정교하게 몰두할 수 있게 돕는다.
  • 라이브러리와의 티키타카: 프레임워크는 거대한 성(Castle)과 같아서, 그 성 안의 가전제품이나 세부 수리 도구로 다양한 라이브러리(Library)들을 마음껏 납치해 성 내부에서 자유롭게 호환 구동시키며 소프트웨어 우주를 완성해 간다.

6. 관련 문서

각주

  1. 실제로 이 엄격한 규격과 틀 덕분에 수백 명의 개발자가 소속된 엔터프라이즈 대기업에서 다수의 초보 개발자들이 난잡하게 코드를 작성하더라도, 프레임워크의 룰 안에서 실행이 강제되므로 소스코드의 파편화와 폭사 리스크를 어마어마하게 억제해 주는 순기능을 제공한다.