1️⃣ API란?
📌 API (Application Programming Interface) 정의
"API는 소프트웨어 간의 데이터 및 기능을 제공하고 상호작용할 수 있도록 하는 인터페이스"
즉, API는 서로 다른 소프트웨어, 서비스, 애플리케이션이 서로 데이터를 주고받고 기능을 호출할 수 있도록 도와주는 매개체입니다.
✅ API의 특징
특징설명
| 인터페이스 제공 | 특정 기능을 제공하는 접점 |
| 데이터 교환 | JSON, XML, HTML 등의 데이터 송수신 |
| 재사용 가능 | 여러 애플리케이션에서 동일한 API 활용 가능 |
| 보안 관리 | API 키, OAuth2, JWT 등의 보안 적용 가능 |
2️⃣ API의 종류
API는 여러 가지 방식으로 구분할 수 있습니다.
✅ 1. 제공 방식에 따른 API 분류
API 유형설명
| 오픈 API (Open API) | 누구나 사용할 수 있도록 공개된 API (예: 카카오 로그인 API) |
| 파트너 API (Partner API) | 특정 파트너 기업과만 연동 가능 (예: 은행 API) |
| 프라이빗 API (Private API) | 내부 시스템에서만 사용 (예: 내부 관리 시스템 API) |
✅ 2. 통신 방식에 따른 API 분류
API 유형설명
| REST API (Representational State Transfer API) | HTTP 기반, 리소스(URL) 중심, JSON 데이터 반환 |
| SOAP API (Simple Object Access Protocol) | XML 기반, 강력한 보안 지원, 엔터프라이즈급 API |
| gRPC (Google Remote Procedure Call) | HTTP/2 기반, 빠른 데이터 전송, Protocol Buffer 사용 |
| GraphQL | 클라이언트가 원하는 데이터만 요청 가능, 페이스북에서 개발 |
✅ 3. 실행 방식에 따른 API 분류
API 유형설명
| 동기 API (Synchronous API) | 요청 후 즉시 응답을 받음 (예: REST API) |
| 비동기 API (Asynchronous API) | 요청을 보낸 후 나중에 응답을 받을 수 있음 (예: WebSocket, Kafka) |
🔹 예시 1: 서로 다른 애플리케이션 간 API
- A사의 쇼핑몰(백엔드)이 B사의 결제 시스템(카카오페이 API)을 호출하여 결제 기능을 수행
- 사용자가 A사의 웹사이트에서 결제를 누르면, API를 통해 B사의 결제 시스템과 통신
➡ 이런 경우 API는 "애플리케이션 간" 데이터를 주고받는 역할을 함
🔹 예시 2: 같은 애플리케이션 내에서의 API
Spring Boot에서는 같은 애플리케이션 내부에서 Controller, Service, Repository가 서로 데이터를 주고받으며 API 역할을 수행할 수 있습니다.
✔ 사용자가 웹사이트에서 GET /api/users/1을 요청하면?
- Controller가 요청을 받고,
- Service가 비즈니스 로직을 수행하며,
- Repository가 데이터베이스에서 데이터를 조회하고,
- 최종적으로 Controller가 JSON으로 변환하여 응답
3️⃣ Spring Boot에서 API 기반 개발
Spring Boot에서는 API 기반 애플리케이션을 쉽게 만들 수 있습니다.
특히 RESTful API를 빠르게 개발할 수 있도록 다양한 기능을 제공합니다.
✅ 1. RESTful API 개발 (Spring Boot + REST API)
📌 REST API란?
"REST 아키텍처 스타일을 기반으로 리소스를 HTTP 메서드를 사용하여 조작하는 API"
✅ Spring Boot REST API 개발 예제
📌 1️⃣ REST 컨트롤러 생성 (UserController.java)
@RestController
@RequestMapping("/api/users")
public class UserController {
private final Map<Long, String> users = new HashMap<>();
@GetMapping
public Map<Long, String> getUsers() {
return users;
}
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return users.getOrDefault(id, "사용자 없음");
}
@PostMapping
public String createUser(@RequestParam String name) {
long id = users.size() + 1;
users.put(id, name);
return "사용자 추가 완료: " + name;
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) {
users.remove(id);
return "사용자 삭제 완료: " + id;
}
}
📌 2️⃣ API 요청 및 응답
# 전체 사용자 조회
$ curl http://localhost:8080/api/users
=> {}
# 사용자 추가
$ curl -X POST "http://localhost:8080/api/users?name=John"
=> "사용자 추가 완료: John"
# 특정 사용자 조회
$ curl http://localhost:8080/api/users/1
=> "John"
# 사용자 삭제
$ curl -X DELETE http://localhost:8080/api/users/1
=> "사용자 삭제 완료: 1"
4️⃣ JPA를 활용한 API 개발
JPA(Java Persistence API)는 데이터베이스를 객체 중심으로 관리할 수 있는 API입니다.
Spring Boot에서 Spring Data JPA를 사용하면 API 기반의 데이터 처리를 쉽게 구현할 수 있습니다.
✅ 1. JPA 기반 API 개발 예제
📌 1️⃣ Entity 클래스 생성 (User.java)
@Table(name = "users")
public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
public User() {}
public User(String name) { this.name = name; }
public Long getId() { return id; }
public String getName() { return name; }
}
📌 2️⃣ Repository 생성 (UserRepository.java)
List<User> findByName(String name); // 자동으로 쿼리 생성됨
}
📌 3️⃣ Service 계층 추가 (UserService.java)
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User createUser(String name) {
return userRepository.save(new User(name));
}
public List<User> getUsers() {
return userRepository.findAll();
}
public Optional<User> getUserById(Long id) {
return userRepository.findById(id);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
📌 4️⃣ Controller 생성 (UserController.java)
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.createUser(user.getName());
}
@GetMapping
public List<User> getUsers() {
return userService.getUsers();
}
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
return userService.getUserById(id)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return ResponseEntity.noContent().build();
}
}
5️⃣ Spring Boot + JPA API 개발의 특징
항목설명
| Spring Boot | API 개발을 위한 프레임워크, 빠른 설정 가능 |
| Spring Data JPA | 데이터베이스와 객체 매핑 (ORM) |
| RestController | REST API 요청을 처리 |
| Repository 계층 | 데이터베이스 연동을 쉽게 처리 |
| JSON 데이터 반환 | HttpMessageConverter를 통해 JSON 변환 |
📌 결론
✅ API → 서로 다른 소프트웨어 간의 데이터 교환 인터페이스
✅ API의 종류 → Open API, REST API, SOAP, GraphQL 등
✅ Spring Boot API 개발 → RESTful API 제공 (@RestController)
✅ JPA 기반 API 개발 → 데이터베이스를 객체 기반으로 다루는 API 개발 (Spring Data JPA)
'개발 이론 > WEB' 카테고리의 다른 글
| 자바스크립트 문법 (0) | 2025.03.19 |
|---|---|
| HTML/CSS/JS (0) | 2025.03.13 |
| 웹(Web)이란? (0) | 2025.02.20 |