본문 바로가기

CS

[CS] 프레임워크와 라이브러리의 차이점

1. 프레임워크 :

특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램이다. 그 예로 Spring, Django, Ruby 등이 이에 속하며, 어플리케이션 틀과 구조를 프레임워크에서 제어하고, 프레임워크가 개발자의 코드를 호출하여 개발자의 코드가 프레임워크 위에서 동작을 합니다.

 

1.1 Spring :

웹 애플리케이션 개발을 위한 프레임워크로, 개발자가 애플리케이션을 만들 때 필요한 구조와 규칙을 제공한다. 즉, 개발자는 Spring이 정한 방식대로 코드를 작성행야 한다.

 

예를 들어, Spring에서는 의존성 주입(Dependency Injection)을 통해 객체를 생성하고 관리하는 방식을 따르게 된다. 개발자는 @Component, @Service, @Autowired 같은 어노테이션을 사용해 객체의 생명 주기를 Spring이 관리하도록 해야 한다. 즉, Spring이 애플리케이션의 흐름을 제어하는 것입니다.

@Service
public class MyService {
    public void doSomething() {
        System.out.println("Doing something in MyService!");
    }
}

@Component
public class MyController {
    private final MyService myService;

    @Autowired
    public MyController(MyService myService) {
        this.myService = myService;
    }

    public void handleRequest() {
        myService.doSomething();
    }
}
  • Spring 내부 코드에서 @Component, @service, @Autowired 같은 어노테이션을 찾도록 설계되어 있기 때문에, 이름을 임의로 바꾸어 사용하면, Spring이 이를 인식하지 못하게 된다.

 

 

 

 

2. 라이브러리 :

소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구의 모음이다. 

 

2.1 Apache Commons Lang :

Java에서 문자열, 숫자, 날짜 등을 쉽게 다룰 수 있도록 도와주는 라이브러리이다.

 

예를들어, Stringutils 클래스를 사용하면 문자열을 다룰 때 편리한 메서드를 활용할 수 있다.

import org.apache.commons.lang3.StringUtils;

public class Main {
    public static void main(String[] args) {
        String str = "   Hello World   ";
        System.out.println(StringUtils.trim(str));  // "Hello World"
    }
}
  • 마찬가지로, 해당 기능을 사용하려면 StringUtils.trim() 메서드의 사용이 강제되는 것이 아닌가? 라는 의문이 들었다.

 

 

 

 

3. 프레임워크와 라이브러리 차이점 :

라이브러리는 "선택적" 사용이 가능

라이브러리는 특정 기능을 제공하지만, 개발자가 그것을 사용할지 말지 완전히 자유롭게 결정할 수 있다.

예를 들어, StringUtils.trim() 메서드를 사용하려면 StringUtils.trim(str);을 호출해야 하지만,

String result = StringUtils.trim(str);

이 방식도 가능하고

System.out.println(StringUtils.trim(str));

이 방식도 가능하다.

또는 아예 사용하지 않아도 문제없이 프로그램이 동작한다.

 

즉, 라이브러리는 필요할 때만 호출해서 쓰는 것이고, 호출하는 방법도 개발자가 자유롭게 정할 수 있다.

 


 

 프레임워크는 코드 구조를 강제한다

반면, 프레임워크는 애플리케이션의 흐름을 직접 관리하기 때문에, 개발자가 특정 방식으로 코드를 작성해야 한다.

예를 들어, Spring에서는 컨트롤러를 만들 때 반드시 @Controller나 @RestController를 붙여야 합니다.

@RestController
public class MyController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}

만약 어노테이션을 빼면 Spring이 이 클래스를 컨트롤러로 인식하지 못해 API가 동작하지 않습니다.

즉, 프레임워크는 특정 방식대로 코드를 작성하지 않으면 아예 동작하지 않게 됩니다.

 


 

핵심 차이점 정리

  프레임워크 라이브러리
강제성 특정 방식으로 작성해야 동작 사용하지 않아도 됨(선택적) 
제어 흐름 프레임 워크가 흐름을 제어 개발자가 직접 호출
규칙 강제성 정해진 방식대로 코드를 작성 필요한 기능만 골라서 사용 가능

 

 

 

 

4. 프레임워크와 라이브러리의 관계

프레임워크는 여러 라이브러리를 내부에 포함하여, 개발자가 프레임워크의 규칙을 따라 개발하면서도 라이브러리의 기능을 활용 할 수 있게 한다.

출처 : https://utk-unm.blogspot.com/2016/07/framework-vs-library.html

 

📚 예시: Spring 프레임워크와 라이브러리

 

  • Spring Web는 웹 애플리케이션을 개발하기 위한 기능을 제공하는데, 이는 HTTP 요청 처리, RESTful API 설계, 템플릿 엔진을 위한 라이브러리들이 포함되어 있습니다.
  • Spring Data는 데이터베이스와 연동하는데 필요한 라이브러리를 포함하고 있으며, 이를 통해 데이터베이스 쿼리나 CRUD 작업을 쉽게 할 수 있습니다.
  • Spring Security는 인증 및 권한 부여를 다루는 라이브러리를 포함하고 있습니다.

 

이렇게 Spring은 여러 라이브러리를 포함하여 전체적인 애플리케이션 구조와 흐름을 관리하면서, 필요한 라이브러리들을 내부적으로 제공하는 방식으로 동작한다.

 

 

출처 : https://engineering-skcc.github.io/egovframe/eGovFrame-introduce/

'CS' 카테고리의 다른 글

프론트엔드(Front-End)와 백엔드(Back-End)는 뭐가 다를까?  (0) 2025.04.19
[CS] 스레드(Thread), 멀티 스레드(Multi-Thread)  (0) 2025.04.18
[CS] HTTP와 HTTPS란?  (0) 2025.04.04
[CS] Fetch란?  (0) 2025.04.03
[CS] API란?  (0) 2025.04.01