새소식

ETC

[ETC] 프레임워크(Framework)와 라이브러리(Library)

  • -

프레임워크(Framework)

프레임워크(Framework)는 소프트웨어 개발에서 구조와 기본 기능을 제공하여 개발 작업을 효율적으로 할 수 있게 도와주는 도구입니다.

이렇게 설명하니 확 와닿지 않네요..! 

 

프레임워크 종류부터 살펴보겠습니다. 

  • 웹 개발 프레임워크
    • Spring (자바 기반)
    • Django (파이썬 기반)
    • Ruby on Rails (루비 기반)
    • Express (Node.js 기반)
  • 모바일 개발 프레임워크
    • React Native (자바스크립트 기반)
    • Flutter (다트 기반)
    • 안드로이드 SDK
  • 프론트엔드 개발 프레임워크
    • React (자바스크립트 라이브러리이지만 주로 프레임워크처럼 사용됨)
    • Angular (자바스크립트 기반)
    • Vue.js (자바스크립트 기반)

다음과 같이 많은 프레임워크들이 있습니다. 

 

 

프레임워크의 주요 특징에 대해 살펴볼게요.

 

  • 기본 구조 제공: 프레임워크는 애플리케이션의 기본 구조를 제공하여 개발자가 기본적인 설계를 직접 하지 않아도 됩니다.
  • 재사용 가능한 코드: 프레임워크는 자주 사용되는 기능이나 패턴을 포함하고 있어 개발자가 반복적으로 같은 기능을 구현할 필요가 없습니다.
  • 일관성 유지: 프레임워크를 사용하면 코드의 일관성이 유지되며, 팀 내 여러 개발자들이 작업하더라도 코드 스타일과 구조가 일치합니다.
  • 효율성 향상: 기본적인 기능을 프레임워크가 제공하므로 개발자는 비즈니스 로직에 더 집중할 수 있어 개발 속도가 빨라집니다.
  • 유지보수 용이: 코드의 구조가 체계적이고 일관성이 있어 유지보수와 확장이 쉽습니다.

 

 

위 주요 특징들을 Spring을 예시로 하니씩 살펴보겠습니다.

 

1. 기본 구조 제공

@SpringBootApplication
public class MySpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

 

위 코드는 Spring Boot 프로젝트를 생성하면 확인할 수 있는 구조입니다. 

 

2. 재사용 가능한 코드

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User findUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

스프링은 의존성 주입(Dependency Injection), 트랜잭션 관리, 데이터 액세스 등의 자주 사용되는 기능을 제공하여 개발자가 반복적으로 같은 기능을 구현할 필요가 없습니다.

 

3. 일관성 유지

@Service
public class ProductService {
    // 서비스 로직
}

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
    // 데이터 액세스 메서드
}

Spring: 스프링 프레임워크를 사용하면 코드의 일관성이 유지됩니다. 예를 들어, 모든 서비스 클래스는 @Service 어노테이션으로 정의되고, 리포지토리 클래스는 @Repository 어노테이션으로 정의되어, 팀 내 여러 개발자가 작업하더라도 코드 스타일과 구조가 일치합니다.

 

4. 효율성 향상

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

스프링 부트는 많은 기본 설정을 자동으로 처리해 주므로 개발자는 비즈니스 로직에 더 집중할 수 있습니다. 예를 들어, 스프링 부트 스타터(Spring Boot Starter)를 사용하면 필요한 라이브러리와 설정을 쉽게 추가할 수 있습니다.

 

 

5. 유지보수 용이

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.findUserById(id);
        return ResponseEntity.ok(user);
    }
}

스프링 프레임워크는 코드의 구조가 체계적이고 일관성이 있어 유지보수와 확장이 쉽습니다.
예를 들어, 모든 비즈니스 로직은 서비스 계층에 위치하고, 데이터 액세스 로직은 리포지토리 계층에 위치하게 됩니다.

 

 

 

 

라이브러리(Library)

라이브러리는 반복적인 작업을 줄이고 개발 생산성을 높이기 위해 사용됩니다.
라이브러리는 특정 기능을 수행하는 코드 모음으로, 다른 프로그램에서 쉽게 가져와 사용할 수 있도록 패키징된 형태입니다.

 

스프링을 예시로 보겠습니다. 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

스프링 프레임워크에 다음과 같이 라이브러리를 추가할 수 있습니다. 

 

이 라이브러리는 Spring Web MVC를 포함하며, @RestController, @GetMapping과 같은 어노테이션을 사용하여 간단하게 RESTful API를 구축할 수 있게 합니다.

@RestController
public class HelloController {

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

 

라이브러리의 주요 특징

 

  • 재사용성: 라이브러리는 여러 프로젝트에서 공통적으로 사용되는 기능들을 한 곳에 모아둔 것입니다. 이를 통해 개발자는 동일한 기능을 다시 작성할 필요 없이 라이브러리를 재사용할 수 있습니다.
  • 모듈화: 라이브러리는 특정 기능 단위로 모듈화되어 있어 필요에 따라 해당 모듈만 선택적으로 사용할 수 있습니다. 이를 통해 코드의 가독성과 유지보수성이 향상됩니다.
  • 추상화: 라이브러리는 복잡한 기능을 단순한 인터페이스로 제공하여 사용자가 내부 구현을 알 필요 없이 쉽게 기능을 사용할 수 있도록 합니다.
  • 품질 및 신뢰성: 많이 사용되는 라이브러리는 커뮤니티나 전문 기관에서 관리되며, 다수의 사용자와 검증을 거쳐 높은 품질과 신뢰성을 갖추고 있습니다.

 

라이브러리의 종류

 

  • 표준 라이브러리
    대부분의 프로그래밍 언어에서 기본적으로 제공하는 표준 라이브러리
    ex) 자바 표준 라이브러리(java.util, java.io)
  • 서드파티 라이브러리
    표준 라이브러리 외에도, 서드파티 개발자가 만든 라이브러리를 사용할 수 있습니다.
    이런 라이브러리는 특정 분야에 특화된 기능을 제공하며, 패키지 관리 시스템을 통해 쉽게 설치하고 관리할 수 있습니다.
    ex) Jackson 라이브러리

 

 

프레임워크(Framework)와 라이브러리(Library) 차이

프레임워크(Framework)

  • 특정 형태의 소프트웨어를 개발하기 위한 규칙과 틀을 제공
  • 프레임워크가 코드의 흐름을 제어하며, 개발자는 프레임워크가 정의한 규칙에 따라 코드를 작성

 

라이브러리(Library)

  • 특정 기능을 구현하기 위해 필요한 코드를 제공하고, 필요시 호출하여 사용할 수 있는 도구 모음
  • 개발자가 코드의 흐름을 제어하며, 필요할 때 라이브러리의 함수나 클래스를 호출하여 사용

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.