API (Application Programming Interface)
(1) 정의
- 다른 프로그램이나 서비스와 소통할 수 있는 규칙과 방법을 제공
- "어떻게 요청하고, 어떤 데이터를 받을 수 있는지" 알려주는 약속된 문법
- 하지만 직접적인 구현은 API의 내부에서 이루어지기 때문에, 개발자는 사용법만 알면 된다.
(2) 비유
- API = 자판기 버튼
- "콜라" 버튼을 누르면 자판기는 내부에서 복잡한 과정을 거쳐 콜라를 내보내죠.
- 우리는 "콜라 버튼을 누르는 방법"만 알면 됩니다.
- 버튼을 눌렀을 때 무슨 일이 일어나는지, 콜라가 어떻게 만들어지는지는 알 필요 없어요.
(3) 예시
- Google Maps API
- "이 주소의 위치를 지도에 표시해 주세요"라고 요청하면, 내부에서 복잡한 계산을 하고 지도 데이터를 반환
- OpenWeather API
- "서울의 날씨를 알려주세요"라고 요청하면, 서버에서 데이터를 찾아 반환
Library
(1) 정의
- Library는 재사용 가능한 기능 코드의 모음
- 개발자가 직접 호출해서 사용하며, 호출 타이밍과 실행 흐름은 개발자가 전적으로 결정
(2) 비유
- Library = 믹서기, 칼, 냄비 등의 요리 도구 세트
- 예를 들어, 믹서기는 "과일을 갈아주는 기능"만 제공해요.
- 믹서기를 사용해서 주스를 만들지, 다른 요리에 사용될지, 아니면 사용하지 않을지는 요리사가 결정합니다.
- 도구는 기능을 제공하지만, 전체 요리를 어떻게 완성할지는 요리사(개발자)의 몫이에요.
(3) 예시
- Java의 Math 라이브러리
- Math.sqrt(16)을 호출하면 제곱근을 계산해주는 "도구"를 제공
- Python의 NumPy 라이브러리
- 복잡한 수학 계산 도구를 제공하지만, 이 도구를 어디에 사용할지는 개발자가 결정
Framework
(1) 정의
- Framework는 전체 애플리케이션의 구조를 제공하고, 개발자는 그 구조에 맞춰서 코드를 작성
- 프레임워크가 애플리케이션 실행 흐름을 통제하며, 우리는 특정 지점만 커스터마이즈(구현)
- 제어의 역전(Inversion of Control) : 프레임워크가 애플리케이션의 흐름을 제어
- "제어의 역전(Inversion of Control)" 개념이 핵심
(2) 비유
- Framework = 레시피
- 레시피는 요리를 만드는 데 필요한 기본적인 재료와 단계를 알려줍니다.
- 마찬가지로, 프레임워크는 개발자가 애플리케이션을 만드는 데 필요한 기본 구조와 규칙을 제공합니다.
- 개발자는 레시피 내의 특정 구간(코드)만 바꿀 수 있어요.
- 레시피는 기본적인 흐름을 제공하지만, 요리사는 재료를 추가하거나 단계를 변경하여 자신만의 독창적인 요리를 만들 수 있습니다
(3) 예시
- Spring Framework (Java)
- 애플리케이션 실행 흐름과 기본 구조를 제공
- 개발자는 컨트롤러나 서비스 레이어만 작성하면 나머지는 프레임워크가 처리
- 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 |