개발 이론/WEB

API

jeonghoe21 2025. 3. 1. 21:57

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을 요청하면?

  1. Controller가 요청을 받고,
  2. Service가 비즈니스 로직을 수행하며,
  3. Repository가 데이터베이스에서 데이터를 조회하고,
  4. 최종적으로 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)

@Entity
@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)

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByName(String name); // 자동으로 쿼리 생성됨
}
 

📌 3️⃣ Service 계층 추가 (UserService.java)

@Service
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)

@RestController
@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