프레임워크가 갑이다? 제어의 역전!

지인호·2021년 5월 13일
2

SpringFramework

목록 보기
2/2
post-thumbnail

and Framework

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

스프링 뿐 아니라 백엔드 개발을 하다보면, 프레임워크라이브러리, 그리고 써드파티 라는 단어들을 많이 들어보셧을텐데요. 가끔 이 단어들이 혼용되는 경우가 있습니다. 이 때문에 뭐가 프레임워크이고 뭐가 라이브러리인지 혼동이 오기도 하죠.
오늘 이 단어들부터 정리해보기로해요!

  • 써드파티 (Third-Party)

    저희가 어떤 문제를 해결하기위해 코드를 작성하다보면, 제가 혹은 저희 서비스가 만든 코드가 아닌, 남 혹은 다른 그룹에서 만든 코드들을 끌어다 쓰는 경우가있습니다. gson, jdbc 같은것들이 그 예시이죠. 이렇듯, 프로그래밍을 도와주는 제 3자가 만든 코드의 묶음을 써드파티 라고 합니다!
  • 라이브러리 (Library)

    저희가 프로그램을 짜다보면, 자바에서만 지원하는 기능을 가지고 서비스를 만들긴 어렵습니다. gson 없이 json parsing 을 해야한다고 생각해보세요! awt나 swing 없는 응용 프로그램 UI 구현은 어떠신가요?
    이렇듯, 개발자가 필요한 여러 기능을, 미리 구현해주는 도구상자 가 바로 라이브러리입니다!
  • 프레임워크 (Framework)

    보통 저희가 순수 자바로 프로그램을 짜면, 필수적으로, main 함수를 넣는데요. 이 main 함수는 프로그램이 시작하고부터 끝나기까지, 언제 어떤 기능을 실행시키고 어떤 객체를 생성할지같은 프로그램의 흐름(Flow) 을 제어합니다.
    그러나 프레임워크는 이러한 main 함수의 책임 (프로그램의 흐름 제어)을 프레임워크에게 양도하게 됩니다. 즉, 프로그램의 흐름은 프레임워크가 관리하고, 개발자는 프레임워크가 쓸 여러 부품들을 만들어주는거죠 (프레임워크가 갑이 된 셈입니다)
    프로그램의 흐름제어를 기준으로 작성되었으며, 실제 의미는 이보다 더욱 포괄적으로 쓰이기도합니다. 링크를 참조해주세요!

🧩프레임워크는 퍼즐판과도 같습니다. 개발자는 이 퍼즐판에 자신이 만든 퍼즐조각을 채워나가게 되죠.

💻이렇듯 프레임워크는 프로그램의 흐름을 직접 제어합니다.

개발자는 프레임워크에서 제시한 흐름에 맞게, 부품들을 만든뒤 프레임워크가 제대로 조립하기 위한 "부가 정보(메타 데이터)" 를 설정해주면 되죠. xml로든, Annotation 으로든, properties 로든요.

그렇다면 프레임워크는 대체 왜 생겨났고, 어떤 장점을 가지고있는걸까요??
이에대해선 저보다 프레임워크에 대해 더욱 잘 정리해주신 이분의 글을 봐주세요!! (나중에 다른 글에서 설명하겠습니다 ㅎㅎ)

몇번이고 강조하지만,

프레임워크에선 개발자가 아닌 프레임워크가 소프트웨어의 흐름을 제어합니다. 즉, 소프트웨어에 대한 제어권이 개발자에서 프레임워크로 역전 된것이죠. 이것을 바로 IoC(Inversion Of Controll) 제어의 역전이라합니다! (IoC 는 프레임워크의 주 특징중 하나이기도 합니다)

😃스프링 또한 "프레임워크" 입니다.

스프링의 정식 명칭은 "스프링 프레임워크" 입니다. 네 맞습니다. 스프링 또한 프레임워크입니다. 그렇기에 프레임워크의 특징을 가지고 있을 뿐더러, 스프링만이 지원하는 굉장히 파워풀한 기능들도 있습니다!

  • POJO 기반 프레임워크
    스프링은 POJO(Plain Old Java Object 평범하고 오래된(단순한) 자바 오브젝트) 를 기반으로 구성된 프레임워크입니다. POJO는 순수 자바에서 나온 개념인데요!
    그렇기떄문에 프레임워크 내에서 객체간의 관계를 구성할때에도, 별도의 Third Party 없이 순수 자바 코드를 이용해 객체를 만들 수 있죠.

  • 의존성 주입기술 (DI)
    스프링은 객체간의 관계를 정의할때, 의존성 주입이라는 기능을 사용하고있습니다. (아마 다음편에 설명할거에요 😃) 이 의존성 주입이라는 기능을 통해 스프링은 서로 영향을 주는 객체들간의 관계를 굉장히 쉽고 직관적으로 정의하게 해줍니다!

  • AOP 패러다임 지원
    프로그래밍 패러다임은 크게 절차지향(PP), 객체지향(OOP), 함수형(FP) 패러다임으로 구분하는데요. 여기 조금 새로운 패러다임이 등장했습니다! 바로 관점지향(AOP, AspectOP) 인데요!
    이 패러다임을 적용함으로서 개발자가 비즈니스 로직 즉, 꼭 구현해야하는 부분에만 집중할 수 있게 만들었습니다!

이 이외에도 트랜젝션, Spring Bean 등 여러가지 파워풀한 기능들을 가지고있습니다!

🐶글을 마치며...

오늘은 프레임워크의 개념과 함께, 스프링의 주요 기술중 하나인 IoC 에 대해서 알아보았습니다!
제가 이전에 배우면서 헷갈렸던 프레임워크에 대해 좀더 중점을 두고 설명을 진행하였는데요.
아마 IoC 에 대한 간단한 설명을 기대하셧던 독자분들께는 약간 아쉬운 글이 되지 않았나 싶습니다 😢
앞으로 여러분과 함께 배우며 발전해나가는 저와 제 포스트를 지켜봐주세요! 감사합니다!!

-> 개발자 깃허브 놀러가기
-> 개발자 노션 놀러가기

profile
테오의 스프린트 17기 퍼실리테이터

0개의 댓글