CS/CS

API, Library, Framework

annovation 2025. 1. 8. 08:51

API (Application Programming Interface)

(1) 정의

  • 다른 프로그램이나 서비스와 소통할 수 있는 규칙과 방법을 제공
  • "어떻게 요청하고, 어떤 데이터를 받을 수 있는지" 알려주는 약속된 문법
  • 하지만 직접적인 구현은 API의 내부에서 이루어지기 때문에, 개발자는 사용법만 알면 된다.

(2) 비유

  • API = 자판기 버튼
    • "콜라" 버튼을 누르면 자판기는 내부에서 복잡한 과정을 거쳐 콜라를 내보내죠.
    • 우리는 "콜라 버튼을 누르는 방법"만 알면 됩니다.
  • 버튼을 눌렀을 때 무슨 일이 일어나는지, 콜라가 어떻게 만들어지는지는 알 필요 없어요.

(3) 예시

  1. Google Maps API
    • "이 주소의 위치를 지도에 표시해 주세요"라고 요청하면, 내부에서 복잡한 계산을 하고 지도 데이터를 반환
  2. OpenWeather API
    • "서울의 날씨를 알려주세요"라고 요청하면, 서버에서 데이터를 찾아 반환

Library

(1) 정의

  • Library는 재사용 가능한 기능 코드의 모음
  • 개발자가 직접 호출해서 사용하며, 호출 타이밍과 실행 흐름은 개발자가 전적으로 결정

(2) 비유

  • Library = 믹서기, 칼, 냄비 등의 요리 도구 세트
    • 예를 들어, 믹서기는 "과일을 갈아주는 기능"만 제공해요.
    • 믹서기를 사용해서 주스를 만들지, 다른 요리에 사용될지, 아니면 사용하지 않을지는 요리사가 결정합니다.
  • 도구는 기능을 제공하지만, 전체 요리를 어떻게 완성할지는 요리사(개발자)의 몫이에요.

(3) 예시

  1. Java의 Math 라이브러리
    • Math.sqrt(16)을 호출하면 제곱근을 계산해주는 "도구"를 제공
  2. Python의 NumPy 라이브러리
    • 복잡한 수학 계산 도구를 제공하지만, 이 도구를 어디에 사용할지는 개발자가 결정

Framework

(1) 정의

  • Framework는 전체 애플리케이션의 구조를 제공하고, 개발자는 그 구조에 맞춰서 코드를 작성
  • 프레임워크가 애플리케이션 실행 흐름을 통제하며, 우리는 특정 지점만 커스터마이즈(구현)
  • 제어의 역전(Inversion of Control) : 프레임워크가 애플리케이션의 흐름을 제어
  • "제어의 역전(Inversion of Control)" 개념이 핵심

(2) 비유

  • Framework = 레시피
    • 레시피는 요리를 만드는 데 필요한 기본적인 재료와 단계를 알려줍니다.
    • 마찬가지로, 프레임워크는 개발자가 애플리케이션을 만드는 데 필요한 기본 구조와 규칙을 제공합니다.
    • 개발자는 레시피 내의 특정 구간(코드)만 바꿀 수 있어요.
  • 레시피는 기본적인 흐름을 제공하지만, 요리사는 재료를 추가하거나 단계를 변경하여 자신만의 독창적인 요리를 만들 수 있습니다

(3) 예시

  1. Spring Framework (Java)
    • 애플리케이션 실행 흐름과 기본 구조를 제공
    • 개발자는 컨트롤러나 서비스 레이어만 작성하면 나머지는 프레임워크가 처리
  2. Django (Python)
    • 웹 애플리케이션을 만들기 위한 기본 틀 제공
    • 개발자는 URL 라우팅이나 뷰 로직만 작성

예시

 

* 날씨 조회 어플리케이션

 

(1) API : 외부 데이터 요청

  • OpenWeatherMap API : 도시 이름을 보내면 날씨 정보를 반환
  • 개발자는 API를 호출만 하면 되고, 날씨 데이터의 처리 과정(수집, 변환, 저장)은 알 필요 없음
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class WeatherApiClient {
    private static final String API_KEY = "your_api_key"; // OpenWeatherMap API 키
    private static final String BASE_URL = "http://api.openweathermap.org/data/2.5/weather";

    // API 호출 메서드
    public String getWeather(String city) throws Exception {
        // 요청 URL 생성
        String urlString = BASE_URL + "?q=" + city + "&appid=" + API_KEY;
        URL url = new URL(urlString);
        
        // HTTP 연결 설정
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");

        // 응답 데이터 읽기
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder response = new StringBuilder();
        String line;
        while ((line = in.readLine()) != null) {
            response.append(line);
        }
        in.close();

        return response.toString(); // JSON 데이터 반환
    }
}

 

  • getWeather(String city) 메서드는 OpenWeatherMap API에 GET 요청을 보내 날씨 데이터를 반환합니다.
  • 응답 데이터는 JSON 형식이며, String으로 반환합니다.

(2) Library : 날씨 데이터를 계산

  • Jackson Library : 날씨 데이터를 받아 평균 기온, 최고 기온 등을 계산
  • 계산 방법은 Library에 정의되어 있고, 개발자가 필요할 때 호출해 사용
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class WeatherParser {
    // JSON 데이터를 파싱하여 결과 문자열 반환
    public String parseWeather(String jsonResponse) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode root = objectMapper.readTree(jsonResponse); // JSON 파싱

        // JSON에서 필요한 데이터 추출
        String city = root.get("name").asText(); // 도시 이름
        String weather = root.get("weather").get(0).get("description").asText(); // 날씨 설명
        double temperature = root.get("main").get("temp").asDouble() - 273.15; // 온도 (켈빈 -> 섭씨)

        return String.format("City: %s, Weather: %s, Temperature: %.2f°C", city, weather, temperature);
    }
}
  • ObjectMapper 사용 :J ackson의 ObjectMapper를 사용해 JSON 데이터를 Java 객체로 변환
  • 필요한 데이터 추출 : 도시 이름(name), 날씨 설명(weather.description), 온도(main.temp)
  • 결과 반환 : 추출한 데이터를 형식화해 사용자에게 반환

(3) Framework : 애플리케이션의 구조

  •  Spring Boot Framework
    • 전체 애플리케이션의 구조를 제공하며, API 요청 및 Library 계산 결과를 사용자에게 표시합니다.
    • URL 라우팅, 데이터베이스 연결, HTML 템플릿 렌더링 등 웹 애플리케이션의 기본 작업을 처리합니다.
    • 개발자는 "날씨 정보를 보여주는 웹 페이지"를 만드는 부분만 구현
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WeatherController {
    private final WeatherApiClient apiClient = new WeatherApiClient();
    private final WeatherParser parser = new WeatherParser();

    // HTTP GET 요청을 처리
    @GetMapping("/weather")
    public String getWeather(@RequestParam String city) {
        try {
            // API 호출 및 데이터 파싱
            String jsonResponse = apiClient.getWeather(city); // OpenWeatherMap API 호출
            return parser.parseWeather(jsonResponse); // JSON 데이터 파싱 후 반환
        } catch (Exception e) {
            return "Error: " + e.getMessage(); // 예외 처리
        }
    }
}
  • URL 라우팅 : /weather 경로로 들어오는 HTTP GET 요청을 처리합니다.
  • API 호출 및 데이터 파싱
    • WeatherApiClient를 호출해 API 데이터 가져오기
    • WeatherParser로 JSON 데이터를 파싱
  • 결과 반환 : 최종 결과를 사용자에게 반환

요약 

 

비유 API Library Framework
개념 자판기의 버튼 조리 도구 놀이공원 롤러코스터 설계도
제어권 개발자 개발자 프레임워크가 제어권을 가짐
흐름 통제 흐름과 관계없음 개발자가 통제 프레임워크가 흐름을 통제
사용 방식 요청만 하고 내부는 몰라도 됨 개발자가 필요할 때 호출 프레임워크에 맞춰 작성해야 함
독립성 독립적 독립적 구조와 흐름에 종속적
예시 Google Maps API Math 라이브러리 Spring Framework

 

➡️ 내가 이해한바는,

API는 데이터를 가져올 수있는 인터페이스(정해진 사용법),

Library는 method들의 집합,

Framework는 개발 환경 틀


출처

OpenAI ChatGPT (https://openai.com)

반응형

'CS > CS' 카테고리의 다른 글

IDE (Integrated Development Environment)  (1) 2025.01.23
CI/CD  (1) 2025.01.22
CRUD  (0) 2025.01.07
버퍼 (Buffer)  (0) 2025.01.04
메서드 체이닝(Method Chaining)  (0) 2024.12.05