๐[Spring] ์๋ฒ๋ฅผ ์คํ์์ผ API๋ฅผ ๋์์ํค๊ธฐ๊น์ง ์ผ์ด๋๋ ์ผ
Java ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์๋ฒ๋ฅผ ์คํ์์ผ API๋ฅผ ๋์์ํค๊ธฐ๊น์ง๋ ์ฌ๋ฌ ๋จ๊ณ์ ๊ณผ์ ์ด ์์ฐจ์ ์ผ๋ก ์งํ๋ฉ๋๋ค.
์ด ๊ณผ์ ์ ์ฃผ๋ก Spring Boot์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ์ค์ผ๋ก ์ค๋ช
๋ฉ๋๋ค.
์ ์ฒด ํ๋ฆ์ ์๋ฒ ์์์์ API ์์ฒญ ์ฒ๋ฆฌ๊น์ง์ ๊ณผ์ ์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
๐โโ๏ธ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์
1๏ธโฃ ์๋ฒ ์์.
- Java ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ฒ๋ฅผ ์์ํ๋ ค๋ฉด ๋จผ์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋์ด์ผ ํฉ๋๋ค.
- Spring Boot์์๋
SpringApplication.run()
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํฉ๋๋ค.
Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
-
@SpringBootApplication
์ ๋ํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ (Entry Point) ์ญํ ์ ํ๋ฉฐ,SpringApplication.run()
๋ฉ์๋๊ฐ ์คํ๋๋ฉด ๋ด๋ถ์ ์ผ๋ก ํฐ์ผ(Tomcat) ๊ณผ ๊ฐ์ ์๋ฒ ๋๋ ์น ์๋ฒ๊ฐ ์์๋ฉ๋๋ค.
2๏ธโฃ ์๋ฒ ๋๋ ์น ์๋ฒ ์คํ.
- ์๋ฒ ๋๋ ํฐ์ผ ์๋ฒ๋ Spring Boot์ ํฌํจ๋ ๊ธฐ๋ณธ ์น ์๋ฒ๋ก, ๊ฐ๋ฐ์๊ฐ ๋ณ๋๋ก ์๋ฒ๋ฅผ ์ค์ ํ์ง ์์๋ ๋ฉ๋๋ค.
- ์๋ฒ๊ฐ ์คํ๋๋ฉด ์ง์ ๋ ํฌํธ(๊ธฐ๋ณธ์ ์ผ๋ก 8080)์์ ํด๋ผ์ด์ธํธ HTTP ์์ฒญ์ ์์ ํ ์ค๋น๋ฅผ ํฉ๋๋ค.
- ์ด ๊ณผ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋ฉ๋๋ค.
- ์๋ฒ๊ฐ ํฌํธ๋ฅผ ์ด๊ณ , ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์ค๋ HTTP ์์ฒญ์ ์์ ํ ์ ์๊ฒ ์ค๋นํฉ๋๋ค.
- Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ๋ด์ ์ ์๋ ์ปจํธ๋กค๋ฌ์ ๋งคํ๋ URL์ ๋ฑ๋กํ์ฌ ์ด๋ค ์์ฒญ์ด ๋ค์ด์ฌ ๋ ์ด๋ค ๋ฉ์๋๊ฐ ์ฒ๋ฆฌํด์ผ ํ๋์ง ์ค์ ํฉ๋๋ค.
- ์ด ๊ณผ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋ฉ๋๋ค.
3๏ธโฃ ์์กด์ฑ ์ฃผ์ ๋ฐ ์ปดํฌ๋ํธ ์ค์บ.
- Spring Boot๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ํ๋ฉด์ ์์กด์ฑ ์ฃผ์
(Dependency Injection) ๊ณผ ์ปดํฌ๋ํธ ์ค์บ(Component Scan) ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์ ์๋ Bean(๊ฐ์ฒด) ๋ค์ ์ฐพ์ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ(Application Context) ์ ๋ฑ๋กํฉ๋๋ค.
-
์์กด์ฑ ์ฃผ์
- ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์๋์ผ๋ก ์ฃผ์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด ๊ฐ์ ์ํธ์์ฉ์ ์ค์ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์๋น์ค(Service)๊ฐ ์ปจํธ๋กค๋ฌ(Controller)์ ์๋์ผ๋ก ์ฃผ์ ๋ฉ๋๋ค.
-
์ปดํฌ๋ํธ ์ค์บ
-
@Controller
,@Service
,@Repository
๊ฐ์ ์ ๋ํ ์ด์ ์ ํตํด ์ ์๋ Bean์ ์ฐพ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ๋ฑ๋กํฉ๋๋ค.
-
-
์์กด์ฑ ์ฃผ์
4๏ธโฃ URL ๋งคํ ๋ฐ ๋ผ์ฐํ ์ค์ .
- Spring Boot๋
@RestController
์ ๊ฐ์ ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ์ฌ API ์ค๋ํฌ์ธํธ์ HTTP ๋ฉ์๋(GET, POST, PUT, DELETE) ๋ฅผ ๋งคํํฉ๋๋ค. - ์๋ฒ๊ฐ ์์๋๋ฉด, URL ์์ฒญ์ด ๋ค์ด์ฌ ๋ ์ด๋ค ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ง ๋ผ์ฐํ ์ ๋ณด๊ฐ ์ค์ ๋ฉ๋๋ค.
์์: ์ปจํธ๋กค๋ฌ ์ค์ .
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List<User> getAllUsers() {
// ๋น์ฆ๋์ค ๋ก์ง์ ํธ์ถํ์ฌ ์ฌ์ฉ์ ๋ชฉ๋ก์ ๋ฐํ
return userService.getAllUsers();
}
}
-
/api/users
๋ก ๋ค์ด์ค๋ GET ์์ฒญ์getAllUsers()
๋ฉ์๋๋ก ๋ผ์ฐํ ๋ฉ๋๋ค. - Spring์
DispatcherServlet
์ด๋ผ๋ ์ค์ ์ ์ด ์ญํ ์ ํ๋ ์๋ธ๋ฆฟ์ ํตํด ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์ค๋ HTTP ์์ฒญ์ ์ ์ ํ ์ปจํธ๋กค๋ฌ๋ก ์ ๋ฌํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค.
5๏ธโฃ ํด๋ผ์ด์ธํธ ์์ฒญ ์ฒ๋ฆฌ.
- ์๋ฒ๊ฐ ์คํ๋ ํ, ํด๋ผ์ด์ธํธ(์: ์น ๋ธ๋ผ์ฐ์ , Postman) ๊ฐ HTTP ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ API ์๋ํฌ์ธํธ(์:
/api/users
)๋ก GET ์์ฒญ์ ๋ณด๋์ ๋, ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ๋ฐ์ํฉ๋๋ค.-
1. HTTP ์์ฒญ ์์
- ํฐ์ผ ์๋ฒ๋ ์ง์ ๋ ํฌํธ(์: 8080)์์ HTTP ์์ฒญ์ ์์ ํฉ๋๋ค.
-
2. DispatcherServlet์ผ๋ก ์ ๋ฌ
- ์์ฒญ์ Spring์ DispatcherServlet์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- DispatcherServlet์ ์ค์ ์ ์ด ์ญํ ์ ํ๋ฉฐ, ์์ฒญ์ ์ ์ ํ ์ปจํธ๋กค๋ฌ๋ก ๋ผ์ฐํ ํ๋ ์ญํ ์ ํฉ๋๋ค.
-
3. ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ์คํ
- ์์ฒญ๋ URL๊ณผ HTTP ๋ฉ์๋(GET, POST ๋ฑ)์ ๋ง๋ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
- ์๋ฅผ ๋ค์ด,
/api/users
๋ก ๋ค์ด์จ GET ์์ฒญ์getAllUsers()
๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
-
4. ๋น์ฆ๋์ค ๋ก์ง ์คํ
- ์ปจํธ๋กค๋ฌ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋น์ค ๊ณ์ธต์ ํธ์ถํฉ๋๋ค.
- ์๋น์ค ๊ณ์ธต์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ ํ์๋ก ํ๋ ๊ฒฝ์ฐ, ์๋น์ค๋ Repository๋ฅผ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
-
5. ์๋ต ์์ฑ
- ์ปจํธ๋กค๋ฌ๋ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ JSON ํ์์ผ๋ก ๋ณํํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ต์ ๋ฐํํฉ๋๋ค.
- Spring Boot๋ ์๋์ผ๋ก Java ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ์ง๋ ฌํ(Serialization)ํ์ฌ ํด๋ผ์ด์ธํธ์ ๋ฐํํฉ๋๋ค.
-
1. HTTP ์์ฒญ ์์
์์: ์์ฒญ ๋ฐ ์๋ต.
- ํด๋ผ์ด์ธํธ ์์ฒญ.
GET http://localhost:8080/api/users
- ์๋ฒ ์๋ต
[ { "id": 1, "name": "Kobe", "email": "kobe@example.com" }, { "id": 2, "name": "MinSeong", "email": "minseong@example.com" } ]
6๏ธโฃ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋(Optional_
- ์์ฒญ์ ๋ฐ๋ผ ๋น์ฆ๋์ค ๋ก์ง์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํด์ผ ํ๋ ๊ฒฝ์ฐ, JPA๋ Hibernate์ ๊ฐ์ ORM(Object-Relational Mapping) ํ๋ ์์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ ์ฅํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ์์(Repository ์ฌ์ฉ)
@Repository
public interface UserRepository extend JpaRepository<User, Long> {
}
- ์๋น์ค ๊ณ์ธต์์
UserRepository
๋ฅผ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์ ์ฅํ๋ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
7๏ธโฃ ์๋ต ์ ์ก ๋ฐ ์ข ๋ฃ
- ์ปจํธ๋กค๋ฌ์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ DispatcherServlet์ด ๋ฐ์์ ์ ์ ํ HTTP ์๋ต(Response) ์ผ๋ก ๋ณํํฉ๋๋ค.
- ์๋ต ๋ฐ์ดํฐ๋ JSON์ผ๋ก ๋ณํ๋ ํ, HTTP ์ํ ์ฝ๋์ ํจ๊ป ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋ฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก 200 OK ์ํ ์ฝ๋์ ํจ๊ป JSON ๋ฐ์ดํฐ๊ฐ ์ ์ก๋ฉ๋๋ค.
8๏ธโฃ ์์ฝ
- Java ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ API๊ฐ ๋์ํ๋ ๊ณผ์ ์ ํฌ๊ฒ ์๋ฒ ์คํ, ์์กด์ฑ ์ฃผ์ ๋ฐ ์ปดํฌ๋ํธ ์ค์บ, URL ๋งคํ, ํด๋ผ์ด์ธํธ ์์ฒญ ์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์๋ต ์ ์ก์ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ํด๋น ์์ฒญ์ ์ ์ ํ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ก ๋ผ์ฐํ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋ต์ผ๋ก ๋ฐํํ๋ ์ผ๋ จ์ ๊ณผ์ ์ด ์ํ๋ฉ๋๋ค.