할리우드라 하니 오버워치가 먼저 생각나네요
객체지향을 통해 '클래스'라는 설계도를 이해했다면, 이제는 그 설계도들을 어떤 방식으로 조립하고 사용하는지에 대한 차이를 알아야 합니다. 바로 라이브러리와 프레임워크의 차이입니다.
도구인가, 환경인가?
집을 지을 때 쓰는 도구와 이미 지어진 집의 구조를 떠올려 봅시다.
- 라이브러리: 망치, 톱, 드릴 같은 '도구' 입니다. 내가 필요할 때 꺼내 쓰고, 다 쓰면 다시 넣어둡니다. 내가 주도적으로 도구를 선택하고 통제합니다.
- 프레임워크: 이미 뼈대가 잡힌 '모델하우스' 입니다. 거실, 방, 화장실의 위치가 정해져 있습니다. 나는 그 안에서 벽지를 바르거나 가구를 배치할 뿐, 집의 전체 구조를 바꿀 수는 없습니다.
소프트웨어상에서도 똑같이 적용됩니다. 내가 필요할 때 불러 쓰는 기능의 집합은 라이브러리이고, 내가 그 안으로 들어가서 정해진 규칙대로 코드를 채워 넣어야 하는 환경은 프레임워크입니다.
핵심 차이: 주도권(제어권)
두 개념을 나누는 가장 확실한 기준은 '프로그램의 전체 흐름을 누가 쥐고 있는가' 입니다. 이 차이를 설명하는 아주 유명한 원칙이 있습니다.
할리우드 원칙 (Hollywood Principle)
"Don't call us, we'll call you." (먼저 연락하지 마세요, 저희가 당신을 부를 테니까요.)
1. 라이브러리 (Library)
- 주체: 개발자 (나)
- 설명: 내가 작성하는 코드의 흐름 속에서 특정 기능을 구현하기 위해 직접 라이브러리를 호출합니다. 내가 주도권을 갖고 필요할 때만 부르는 방식입니다.
2. 프레임워크 (Framework)
- 주체: 프레임워크 (시스템)
- 설명: 할리우드 원칙이 적용됩니다. 프레임워크가 전체적인 흐름을 쥐고 있다가, 필요한 시점에 내가 작성한 코드를 불러서 실행합니다. 개발자는 주도권을 넘기고 프레임워크의 규칙에 따라 끼워 맞추는 방식입니다.
제어의 역전 (IoC, Inversion of Control)
이렇게 주도권이 나에게서 프레임워크로 넘어가는 것을 전문 용어로 '제어의 역전' 이라고 부릅니다.
- 라이브러리: 내 코드가 라이브러리를 부른다. (정방향 제어)
- 프레임워크: 프레임워크가 내 코드를 부른다. (역방향 제어)
왜 프레임워크를 쓰는가?
내가 다 직접 통제하는 게 자유로워 보이지만, 굳이 프레임워크의 규칙을 따르는 이유는 명확합니다.
- 검증된 구조: 이미 잘 짜인 뼈대 위에서 시작하므로 설계상의 큰 실수를 방지합니다.
- 비즈니스 로직에 집중: 로그 처리, 보안, 데이터베이스 연결 같은 공통적인 작업은 프레임워크가 알아서 처리해 줍니다.
- 유지보수의 용이성: 정해진 규칙이 있으므로, 여러 개발자가 협업해도 코드가 일관성 있게 유지됩니다.
마무리
- 라이브러리: 내가 필요해서 부리는 일꾼.
- 프레임워크: 내가 들어가서 규칙대로 일해야 하는 사무실.
앞으로 배울 Spring은 이 할리우드 원칙이 아주 철저하게 적용된 거대한 '사무실'입니다. 이 사무실의 규칙을 잘 이해할수록 저희는 더 빠르고 안정적인 소프트웨어를 만들 수 있습니다.
댓글 0