π[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 맀ν, ν΄λΌμ΄μΈνΈ μμ² μ²λ¦¬, κ·Έλ¦¬κ³ μλ΅ μ μ‘μ λ¨κ³λ‘ μ΄λ£¨μ΄μ§λλ€.
- ν΄λΌμ΄μΈνΈκ° μμ²μ 보λ΄λ©΄ μλ²λ ν΄λΉ μμ²μ μ μ ν 컨νΈλ‘€λ¬ λ©μλλ‘ λΌμ°ν νμ¬ λ°μ΄ν°λ₯Ό μ²λ¦¬νκ³ , κ·Έ κ²°κ³Όλ₯Ό μλ΅μΌλ‘ λ°ννλ μΌλ ¨μ κ³Όμ μ΄ μνλ©λλ€.