[JAVA] JAVA로 REST API 구현하기

2024. 7. 19. 08:00· Java
목차
  1. 💻 1. REST API란?
  2. 💻 2. HTTP 메서드
  3. 🛠️ GET
  4. 🛠️ POST
  5. 🛠️ PUT
  6. 🛠️ PATCH
  7. 🛠️ DELETE
  8. 💻 3. JAVA로 REST API 사용하기
  9. 🛠️ Spring Boot 설정
  10. 🛠️ 데이터 모델 생성
  11. 🛠️ 레포지토리 생성
  12. 🛠️ 컨트롤러 생성
  13. 🛠️ 애플리케이션 실행
  14. 💻 4. JpaRepository에 대한 설명
  15. 💻 5. JPA의 동작 원리
  16. 🛠️ 엔티티(Entity)
  17. 🛠️ 엔티티 매니저(Entity Manager)
  18. 🛠️ 영속성 컨텍스트(Persistence Context)
  19. 🛠️ 트랜잭션(Transaction)
  20. 💻 6. DeleteMapping의 동작 원리
  21. 💻 7. REST API의 장점
반응형

💻 1. REST API란?

REST API는 Representational State Transfer의 약자로, 웹에서 자원을 효율적으로 교환하기 위해 만들어진 아키텍처 스타일이에요. 간단히 말해, 웹 애플리케이션이 서버와 데이터를 주고받는 방식 중 하나죠. RESTful한 시스템은 자원(Resource), 자원의 상태(Representation), 이 자원을 조작하기 위한 표준 HTTP 메서드(GET, POST, PUT, DELETE)를 사용해요.


💻 2. HTTP 메서드

REST API의 핵심은 HTTP 메서드를 사용해 자원과 상호작용하는 거예요. 주요 메서드에는 GET, POST, PUT, PATCH, DELETE 등이 있어요. 각 메서드는 특정 작업을 나타내요.

🛠️ GET

GET 메서드는 서버에서 자원을 가져올 때 사용해요. 보통 데이터를 조회(read)할 때 쓰죠.

GET /users

위와 같은 요청은 모든 사용자의 정보를 가져오라는 의미예요.

🛠️ POST

POST 메서드는 서버에 자원을 생성할 때 사용해요. 새로운 데이터를 추가(insert)할 때 쓰죠.

POST /users
{
  "name": "John",
  "email": "john@example.com"
}

이 요청은 새로운 사용자를 생성하라는 의미예요.

🛠️ PUT

PUT 메서드는 서버의 자원을 업데이트할 때 사용해요. 전체 자원을 교체하는 방식으로 이해하면 돼요.

PUT /users/1
{
  "name": "John Doe",
  "email": "john.doe@example.com"
}

이 요청은 ID가 1인 사용자의 정보를 전체적으로 업데이트하라는 의미예요.

🛠️ PATCH

PATCH 메서드는 서버의 자원을 부분적으로 업데이트할 때 사용해요. 일부 데이터만 수정할 때 쓰죠.

PATCH /users/1
{
  "email": "new.email@example.com"
}

이 요청은 ID가 1인 사용자의 이메일만 업데이트하라는 의미예요.

🛠️ DELETE

DELETE 메서드는 서버의 자원을 삭제할 때 사용해요.

DELETE /users/1

이 요청은 ID가 1인 사용자를 삭제하라는 의미예요.


💻 3. JAVA로 REST API 사용하기

이제 Java로 REST API를 어떻게 사용하는지 예시 코드를 통해 알아보아요. Spring Boot 프레임워크를 사용해서 간단한 RESTful 웹 서비스를 만들어볼게요.

🛠️ Spring Boot 설정

먼저 Spring Boot 프로젝트를 생성하고, 필요한 의존성을 추가해요. build.gradle 파일에 다음과 같이 설정할 수 있어요.

plugins {
    id 'org.springframework.boot' version '2.5.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

🛠️ 데이터 모델 생성

User 데이터를 나타내는 간단한 모델 클래스를 생성해요.

package com.example.demo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String email;

    // getters and setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

🛠️ 레포지토리 생성

JPA를 이용해 데이터베이스와 상호작용하는 레포지토리 인터페이스를 생성해요.

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Integer> {
}

🛠️ 컨트롤러 생성

이제 REST API의 엔드포인트를 정의하는 컨트롤러 클래스를 만들어볼게요.

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

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

    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable int id, @RequestBody User user) {
        return userRepository.findById(id)
                .map(existingUser -> {
                    existingUser.setName(user.getName());
                    existingUser.setEmail(user.getEmail());
                    return userRepository.save(existingUser);
                })
                .orElseGet(() -> {
                    user.setId(id);
                    return userRepository.save(user);
                });
    }

    @PatchMapping("/{id}")
    public User partialUpdateUser(@PathVariable int id, @RequestBody User user) {
        return userRepository.findById(id)
                .map(existingUser -> {
                    if (user.getName() != null) {
                        existingUser.setName(user.getName());
                    }
                    if (user.getEmail() != null) {
                        existingUser.setEmail(user.getEmail());
                    }
                    return userRepository.save(existingUser);
                })
                .orElse(null);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable int id) {
        userRepository.deleteById(id);
    }
}

🛠️ 애플리케이션 실행

Spring Boot 애플리케이션을 실행하기 위해 메인 클래스를 설정해요.

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

 


 

💻 4. JpaRepository에 대한 설명

UserRepository 인터페이스는 JpaRepository를 확장해요. Spring Data JPA가 제공하는 JpaRepository는 CRUD (Create, Read, Update, Delete) 작업을 위한 기본 메서드를 자동으로 구현해줘요. 주요 메서드들에는 다음과 같은 것들이 있어요:

  • save(S entity): 엔티티를 저장하거나 업데이트해요.
  • findById(ID id): 주어진 ID로 엔티티를 찾아요.
  • findAll(): 모든 엔티티를 리스트로 반환해요.
  • deleteById(ID id): 주어진 ID로 엔티티를 삭제해요.

이러한 메서드들은 SQL 쿼리를 직접 작성하지 않아도 데이터베이스와 상호작용할 수 있게 해줘요.


💻 5. JPA의 동작 원리

Java Persistence API (JPA)는 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 표준화한 인터페이스에요. JPA의 핵심 개념과 작동 방식은 다음과 같아요:

🛠️ 엔티티(Entity)

데이터베이스 테이블과 매핑되는 클래스에요. @Entity 어노테이션을 사용해 정의해요.

🛠️ 엔티티 매니저(Entity Manager)

엔티티의 생명주기를 관리해요. 엔티티를 데이터베이스에 삽입, 수정, 삭제, 조회하는 작업을 수행해요.

🛠️ 영속성 컨텍스트(Persistence Context)

엔티티 매니저가 관리하는 엔티티 인스턴스의 집합이에요. 엔티티가 영속성 컨텍스트 내에 있으면 "영속 상태"라고 해요.

🛠️ 트랜잭션(Transaction)

데이터베이스 작업의 논리적 단위에요. 모든 작업은 트랜잭션 내에서 이루어져야 해요. 트랜잭션은 원자성을 보장해요.

JPA는 이러한 개념을 바탕으로 동작하며, 개발자는 JPA를 통해 데이터베이스와의 상호작용을 쉽게 할 수 있어요.


💻 6. DeleteMapping의 동작 원리

@DeleteMapping 어노테이션은 단순히 HTTP DELETE 요청을 처리하는 메서드라는 것을 명시해줄 뿐이에요. 실제 데이터베이스에서 삭제 작업을 수행하는 것은 UserRepository의 deleteById 메서드에 의해 이루어져요.

deleteById 메서드는 JPA 레포지토리 인터페이스의 기본 메서드 중 하나로, 엔티티의 ID를 인자로 받아 해당 엔티티를 데이터베이스에서 삭제해요. 이 메서드는 내부적으로 JPA가 제공하는 표준 SQL DELETE 쿼리를 생성하고 실행해요.

따라서, @DeleteMapping 어노테이션을 사용하면 Spring Boot는 해당 엔드포인트에 대한 HTTP DELETE 요청을 받았을 때, 자동으로 연결된 메서드를 호출하고, 그 메서드에서 deleteById를 통해 데이터베이스 삭제 작업을 수행하게 돼요.


💻 7. REST API의 장점

REST API는 다음과 같은 장점들이 있어요:

  • 확장성: 클라이언트와 서버의 독립성 덕분에 각기 따로 확장이 가능해요.
  • 유연성: 다양한 데이터 형식을 지원해요 (JSON, XML 등).
  • 가독성: URL과 HTTP 메서드를 사용해 직관적이에요.
  • 성능: HTTP의 캐싱 기능을 사용할 수 있어 성능이 좋아요.

REST API는 현대 웹 개발에서 빼놓을 수 없는 중요한 기술이에요. GET, POST, PUT, PATCH, DELETE 같은 메서드를 잘 이해하고 활용하면, 효율적이고 확장 가능한 웹 서비스를 만들 수 있어요.

 


반응형
저작자표시 비영리 변경금지 (새창열림)

'Java' 카테고리의 다른 글

[JAVA] Java Stream API 활용법  (0) 2024.09.02
[JAVA] 자바 버전별 차이점  (0) 2024.08.02
[JAVA] String Boot에서 AOP를 활용한 로그인 시스템 구현방법  (0) 2024.05.16
[JAVA]Java에서의 Deque 소개  (1) 2024.04.30
[JAVA] 컬렉션 정렬 방법  (1) 2024.04.27
  1. 💻 1. REST API란?
  2. 💻 2. HTTP 메서드
  3. 🛠️ GET
  4. 🛠️ POST
  5. 🛠️ PUT
  6. 🛠️ PATCH
  7. 🛠️ DELETE
  8. 💻 3. JAVA로 REST API 사용하기
  9. 🛠️ Spring Boot 설정
  10. 🛠️ 데이터 모델 생성
  11. 🛠️ 레포지토리 생성
  12. 🛠️ 컨트롤러 생성
  13. 🛠️ 애플리케이션 실행
  14. 💻 4. JpaRepository에 대한 설명
  15. 💻 5. JPA의 동작 원리
  16. 🛠️ 엔티티(Entity)
  17. 🛠️ 엔티티 매니저(Entity Manager)
  18. 🛠️ 영속성 컨텍스트(Persistence Context)
  19. 🛠️ 트랜잭션(Transaction)
  20. 💻 6. DeleteMapping의 동작 원리
  21. 💻 7. REST API의 장점
'Java' 카테고리의 다른 글
  • [JAVA] Java Stream API 활용법
  • [JAVA] 자바 버전별 차이점
  • [JAVA] String Boot에서 AOP를 활용한 로그인 시스템 구현방법
  • [JAVA]Java에서의 Deque 소개
TaeHuiLee
TaeHuiLee
창업, 사업, 자기개발, 운동, Web, App, Java, python, 이슈, 개발자, JavaScript, amazon, cloud server, 취업, 스펙, Android Studio, Spring, React, Node.js, 구독하면 댓글 남겨주세요.
TaeHuiLee
Developer_TaeHui
TaeHuiLee
  • 분류 전체보기 (228)
    • WEB (71)
    • Java (38)
    • APP (17)
    • 딥러닝 (2)
    • DB (5)
    • 알고리즘 (17)
    • Python (10)
    • AWS (5)
    • Git (8)
    • Docker (13)
    • 창업 (2)
    • Java Script (5)
    • 군집드론 (3)
    • C언어 (1)
    • IT 지식 (16)
    • Rust (1)
    • Tomcat (1)
    • Nginx (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • javascript
  • 티스토리챌린지
  • 어플
  • 자바
  • GIT
  • WSL
  • Java
  • github
  • 도커
  • spring boot
  • Spring
  • python
  • 서울 맛집
  • ubuntu
  • 오블완
  • 관상 어플
  • Nuxt
  • docker
  • mariadb
  • DB
  • 정렬
  • 선택정렬
  • VUE
  • 강릉 맛집
  • 수원 맛집
  • 파이썬
  • axios
  • 수원역 맛집
  • Queue
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
TaeHuiLee
[JAVA] JAVA로 REST API 구현하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.