프레임워크란?

niireymik·2024년 1월 16일
0

📌 프레임워크란?

Frame(틀)과 work(일)의 합성어인 Framework는 "틀을 가지고 일하다"라는 의미를 가진다. 우리는 프레임워크를 일정한 틀과 뼈대를 가지고 일할 수 있도록 제공하는 '구조화된 틀'로 이해할 수 있겠다. 조금 더 명확히 알아보자. 다음은 프레임워크의 사전적 정의이다.

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

이를 풀어 얘기해 보자면, 프레임워크는 새로운 애플리케이션을 보다 효율적으로 개발할 수 있도록 하는 재사용 가능한 소프트웨어 구성 요소의 모음이다.

Framework는 프로그래밍 언어인가? No!
프로그래밍 언어는 컴퓨터 프로그램을 작성하는 데 사용되는 일련의 명령 및 구문이다. 반면 프레임워크는 특정 프로그래밍 언어로 응용 프로그램을 구축하기 위한 구조를 제공하는 사전 구축된 도구 및 라이브러리 집합이다. 즉, 프레임워크는 소프트웨어 개발 프로세스의 중요한 부분이지만 프로그래밍 언어 자체가 아니라 특정 프로그래밍 언어 위에서 사용되는 '도구'이다.
Ex) Ruby on Rails는 Ruby 프로그래밍 언어를 사용하여 웹 애플리케이션을 구축하기 위한 프레임워크이고, React는 JavaScript를 사용하여 사용자 인터페이스를 구축하기 위한 프레임워크이다. 이외에도 자바와 코틀린을 사용하는 Spring, 파이썬을 사용하는 Django 등이 있다.



📌 프레임워크와 라이브러리

프레임워크와 라이브러리는 모두 개발자가 애플리케이션을 더 효율적으로 빌드할 수 있도록 다른 사람이 작성한 재사용 가능한 코드이다.

둘의 차이점은 그 '역할'에 있다. 라이브러리는 필요할 때 애플리케이션 코드가 호출하는 유틸리티 또는 함수의 모음이다. 즉, 애플리케이션의 도우미이자 도구 역할을 하는 것이다. 반면, 프레임워크는 애플리케이션 개발을 지시하는 틀로서, 개발자가 세부 사항을 입력할 수 있는 골격을 제공한다. 프레임워크는 필요하다면 내부적으로 라이브러리를 호출할 수도 있다.

👉 쉽게 말해, 프레임워크는 '뼈대/틀', 라이브러리는 '부품'이다!

라이브러리와 프레임워크의 차이점은 간결히 '제어 역전'으로 설명할 수도 있다. 개발 속도를 높이는 데 필요한 리소스를 제공하는 것은 라이브러리와 프레임워크 둘 다 해당하지만, 라이브러리와 달리 프레임워크는 애플리케이션의 절차적 흐름도 변경한다.

제어 역전이란?

제어 역전(IoC : Inversion of Control)은 기존 제어 흐름과 비교하여 제어 흐름을 역전시키는 설계 원칙이다.

일반적으로 프로그램은 객체를 결정, 생성하고 그 객체들이 프로그램의 흐름을 결정함으로써 모든 작업을 사용자가 제어하는 구조이다.
반면, IoC에서는 이 흐름의 구조를 바꾼다. 모든 권한을 다른 대상에 위임함으로써 제어 권한을 위임받은 특별한 객체에 의해 흐름이 결정된다. 즉, 기존 사용자가 모든 작업을 제어하지 않고 특별한 객체에 모든 것을 위임해 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어간 것을 IoC, 제어의 역전이라고 한다. 그리고 이 모든 권한을 위임받은 주체를 IoC 컨테이너라 칭한다.

위의 프레임워크 설명에 적용해 보자면, 애플리케이션은 프레임워크에게 제어권을 넘겨주고, 프레임워크는 애플리케이션 코드에 대한 추가 지원과 지침을 제공하는 것이다.

(+) IoC는 DL(Dependency Lookup : 의존성 검색)과 DI(Dependency Injection : 의존성 주입)에 의해 구현된다. 객체지향프로그래밍에서 의존성은 하나의 객체가 어떤 다른 객체를 사용하고 있음을 의미한다. IoC에서 DI는 각 클래스 사이에 필요로 하는 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것이다. 자세한 개념은 추후 정리해 보자.



📌 프레임워크의 장단점

✔️ 장점

  • 효율적 생산 : 모든 코드를 직접 작성하지 않아도 되기에 개발 효율성이 향상되어 시간과 비용이 절약되고, 생산성이 높아진다.
  • 코드의 질 향상 : 버그 발생 가능성을 처리해 줌으로써 개발자가 반복 작업에서 실수하기 쉬운 부분을 커버해 주며, 다수의 개발자가 사용/수정하다 보니 이미 검증된 코드로 믿고 사용할 수 있다.
  • 보안 : 개발자가 직접 보안 문제를 감지하지 않아도 프레임워크가 체크해 주며 보안을 강화할 수 있도록 돕는다.
  • 효율적인 코드 검토 : 개발자는 애플리케이션을 릴리스하기 전에 여러 개발 단계에서 코드를 테스트해야 하는데, 소프트웨어 프레임워크는 포괄적인 테스트 사례를 제공해 더 쉽게 검증할 수 있다.
  • 유지 보수에 유리 : 프레임워크를 사용하면 코드가 보다 체계적이어서 유지 보수에 안정적이다.

✔️ 단점

  • 학습 시간 : 코드를 직접 짜는 것이 아니기에, 프레임워크에 있는 코드를 이해, 습득하는 데 오랜 시간이 걸린다.
  • 자유도 : 이미 짜인 구조에 살을 붙여 나가는 방식이기에, 자유도가 떨어진다.

➡️ 사실 두 가지 단점은 거의 의미가 없다. 학습 시간이 오래 걸린다 해도 처음부터 모든 것을 학습하고 구현해내기보단 시간이 덜 걸리며, 자유도가 떨어짐도 이미 저명한 프레임워크는 그 틀 안에서 우리가 구현하고자 하는 모든 것을 구현할 수 있다. 즉, 프레임워크의 단점은 없다고 해도 무방하다.

0개의 댓글

관련 채용 정보