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. 프레임워크와 라이브러리의 관계
프레임워크는 여러 라이브러리를 내부에 포함하여, 개발자가 프레임워크의 규칙을 따라 개발하면서도 라이브러리의 기능을 활용 할 수 있게 한다.
📚 예시: 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 |