πŸš€ Spring Boot + JPA + RESTful API 핡심 정리

Kim ChanwooΒ·2025λ…„ 9μ›” 23일

Spring Boot

λͺ©λ‘ 보기
2/6
post-thumbnail

🏷 1️⃣ Entity 클래슀

ν•­λͺ©μ„€λͺ…
EntityDB의 ν…Œμ΄λΈ” μ—­ν• 
FieldDB 컬럼 μ—­ν• 
κΈ°λ³Έ μƒμ„±μžJPA 객체 생성 μ‹œ ν•„μˆ˜
@AllArgsConstructor@Id @GeneratedValue ν•„λ“œκ°€ 있으면 였λ₯˜ λ°œμƒ
Lombok ν™œμš©@NoArgsConstructor(force = true) + @RequiredArgsConstructor β†’ κΈ°λ³Έ μƒμ„±μž + ν•„μˆ˜ ν•„λ“œ 생성

πŸ’‘ Tip: final / @NonNull ν•„λ“œκ°€ μžˆμ–΄λ„ force = trueλ₯Ό μ“°λ©΄ JPA κΈ°λ³Έ μƒμ„±μžλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ”— 2️⃣ ν…Œμ΄λΈ” 관계 (Owner ↔ Car)

관계섀λͺ…
Owner(1) ↔ Car(N)ν•œ λͺ…μ˜ μ†Œμœ μžκ°€ μ—¬λŸ¬ λŒ€μ˜ μžλ™μ°¨λ₯Ό μ†Œμœ 
Car 클래슀@ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name="owner")
Owner 클래슀@OneToMany(cascade = CascadeType.ALL, mappedBy="owner")

πŸ”Ή Fetch μ „λž΅

  • LAZY : ν•„μš”ν•  λ•Œλ§Œ λ‘œλ”© β†’ μ„±λŠ₯ μ΅œμ ν™”
  • EAGER : 쑰회 μ‹œ μ—°κ΄€ 데이터 μ¦‰μ‹œ λ‘œλ”© β†’ κ°„λ‹¨ν•˜μ§€λ§Œ 무거움

πŸ–Ό 3️⃣ JSON 직렬화

  • λ¬΄ν•œ 반볡 λ°©μ§€:
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
@JsonIgnore // cars ν•„λ“œ

Owner ↔ Car κ΄€κ³„μ—μ„œ JSON λ³€ν™˜ μ‹œ λ¬΄ν•œ 루프 λ°©μ§€


πŸ’Ύ 4️⃣ DB λ³€κ²½ (H2 β†’ MariaDB)

  • build.gradle / application.properties μˆ˜μ •
  • MariaDB 접속 정보 μ •μ˜: URL, 계정, λΉ„λ°€λ²ˆν˜Έ, λ“œλΌμ΄λ²„
  • JPA ddl-auto: create-drop β†’ μ•± μž¬μ‹œμž‘λ§ˆλ‹€ ν…Œμ΄λΈ” μ΄ˆκΈ°ν™”
  • MariaDB μ‚¬μš© μ‹œ 데이터 영ꡬ μ €μž₯ κ°€λŠ₯

🌐 5️⃣ RESTful API

ν•­λͺ©μ„€λͺ…
Controller@RestController + HTTP λ©”μ„œλ“œ λ§€ν•‘
HTTP λ©”μ„œλ“œGET β†’ 쑰회, POST β†’ 생성, PATCH/PUT β†’ μˆ˜μ •, DELETE β†’ μ‚­μ œ
RepositoryJpaRepository 톡해 DB μ ‘κ·Ό
JSON λ³€ν™˜Jackson μžλ™ 처리
Owner ↔ CarJSON 직렬화 μ‹œ λ¬΄ν•œ 반볡 λ°©μ§€ ν•„μš”

⚑ 6️⃣ Spring Data REST

  • Repository 기반 CRUD μžλ™ 생성
  • μ—”λ“œν¬μΈνŠΈ κΈ°λ³Έ κ·œμΉ™: Entity 이름 β†’ λ³΅μˆ˜ν˜• μ†Œλ¬Έμž (/cars, /owners)
  • μ—”λ“œν¬μΈνŠΈ λ³€κ²½ κ°€λŠ₯
@RepositoryRestResource(path="vehicles")
  • HATEOAS 지원 β†’ JSON에 링크 포함

  • 쿼리 λ©”μ„œλ“œ μ •μ˜ κ°€λŠ₯

    • 예: /api/cars/search/findByBrand?brand=Kia

πŸ›  7️⃣ Postman ν™œμš©

ν•­λͺ©μ„€λͺ…
μš”μ²­ μœ ν˜•GET / POST / PATCH / PUT / DELETE
PUT vs PATCHPUT: 전체 key-value ν•„μš”, PATCH: 일뢀 key만 μˆ˜μ • κ°€λŠ₯
Owner 등둝PUT μš”μ²­ μ‹œ Content-Type = text/uri-list μ„€μ • ν•„μš”

πŸ’‘ 8️⃣ 핡심 μš”μ•½

  1. Entity 클래슀 = DB ν…Œμ΄λΈ” ꡬ쑰 + JPA 연동
  2. ν…Œμ΄λΈ” 관계 = @ManyToOne / @OneToMany + Fetch μ „λž΅
  3. JSON 직렬화 μ‹œ λ¬΄ν•œ 반볡 λ°©μ§€ ν•„μˆ˜
  4. DB λ³€κ²½ μ‹œ build.gradle / application.properties μˆ˜μ •
  5. Controller + Repository = RESTful API κ΅¬ν˜„
  6. Spring Data REST = CRUD μžλ™ 제곡 + HATEOAS 지원
  7. Postman = API μš”μ²­/응닡 확인 및 ν…ŒμŠ€νŠΈ κ°€λŠ₯

0개의 λŒ“κΈ€