πŸ¦λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ λ°±μ—”λ“œ μŠ€ν„°λ”” (4)

μœ€μ€€μƒΒ·2024λ…„ 9μ›” 29일
0

λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ

λͺ©λ‘ 보기
4/4
post-thumbnail

μ–΄λŠλ§ λ§ˆμ§€λ§‰ ν•™κΈ°λ₯Ό μ‹œμž‘ν•œμ§€ 거의 ν•œλ‹¬μ΄ λ˜μ–΄κ°„λ‹€. 좔석도 있고 가쑱여행도 κ°”λ‹€μ™€μ„œ 금방 μ§€λ‚˜κ°„κ²ƒ κ°™λ‹€. 쑸업을 ν•΄μ•Όλ˜μ–΄μ„œ μ§€κΈˆ 쀀비쀑인 λ…Όλ¬Έ ν”„λ‘œμ νŠΈμ™€ μ‘Έμ—…μ‹œν—˜, 자격증, μ·¨μ—… 같은 걱정듀이 λ„ˆλ¬΄ λ§Žλ‹€. μ§€κΈˆ 진행쀑인 ν”„λ‘œμ νŠΈλ„ 잘됐음 μ’‹κ² κ³  λͺ¨λ“ κ²Œ λ‹€ 잘되길 그리고 취업을 ν•  수 μžˆμ—ˆμŒ μ’‹κ² λ‹€. 그리고 λ‚΄ μ£Όμœ„ λͺ¨λ‘κ°€ κ±΄κ°•ν–ˆμœΌλ©΄ μ’‹κ² λ‹€.

λ°±μ—”λ“œ μŠ€ν„°λ”” (4)


이번 ν¬μŠ€νŒ…μ—μ„œλŠ” Spring Bootμ—μ„œ 자주 μ‚¬μš©λ˜λŠ” μ£Όμš” μ–΄λ…Έν…Œμ΄μ…˜κ³Ό REST APIμ—μ„œ 자주 ν™œμš©λ˜λŠ” 컨트둀러 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ •λ¦¬ν–ˆλ‹€. κΈ°λ³Έ ν‚€(PK) μ„€μ •λΆ€ν„°, ν•„λ“œμ™€ 객체 맀핑, 그리고 각 HTTP λ©”μ†Œλ“œμ— λŒ€μ‘ν•˜λŠ” 컨트둀러 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ„€λͺ…ν•œλ‹€.

λͺ©μ°¨

  1. κΈ°λ³Έ ν‚€(PK) μ–΄λ…Έν…Œμ΄μ…˜
  2. ν•„λ“œ/컬럼 μ–΄λ…Έν…Œμ΄μ…˜
  3. 객체와 ν…Œμ΄λΈ” 맀핑
  4. REST API κ°œλ…
  5. μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ‚¬μš©ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜

1. κΈ°λ³Έ ν‚€(PK) μ–΄λ…Έν…Œμ΄μ…˜

  • @Id: μ—”ν‹°ν‹°μ˜ κΈ°λ³Έ ν‚€λ₯Ό μ„ μ–Έν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜
  • @GeneratedValue: κΈ°λ³Έ ν‚€ 값을 μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” μ „λž΅μ„ μ„€μ •ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜
    • GenerationType.AUTO : μžλ™μœΌλ‘œ ν‚€λ₯Ό 생성
    • GenerationType.IDENTITY : λ°μ΄ν„°λ² μ΄μŠ€μ— μ˜ν•΄ ν‚€λ₯Ό 생성
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

2. ν•„λ“œ/컬럼 μ–΄λ…Έν…Œμ΄μ…˜

  • @Column : ν•„λ“œλ₯Ό ν…Œμ΄λΈ” μ»¬λŸΌμ— 맀핑할 λ•Œ μ‚¬μš©λ˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜
    • name : ν…Œμ΄λΈ”μ˜ 컬럼λͺ…
    • nullable : null 값을 ν—ˆμš©ν• μ§€ μ—¬λΆ€
    • length : λ¬Έμžμ—΄μ˜ μ΅œλŒ€ 길이 μ„€μ •
@Column(name = "username", nullable = false, length = 50)
private String name;
  • @Enumerated : μžλ°”μ˜ enum νƒ€μž…μ„ λ°μ΄ν„°λ² μ΄μŠ€μ— 맀핑할 λ•Œ μ‚¬μš©
@Enumerated(EnumType.STRING)
private RoleType roleType;

3. 객체와 ν…Œμ΄λΈ” 맀핑

Hibernate의 hbm2ddl.auto 섀정을 톡해 엔티티와 ν…Œμ΄λΈ” κ°„μ˜ 맀핑 및 μžλ™ 생성 μ—¬λΆ€λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

  • create, update, validate λ“± λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ 선택할 수 있으며, μ‹€μ œ 개발 ν™˜κ²½μ—μ„œ μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€.

4. REST API κ°œλ…

REST APIλŠ” μ›Ή μ‹œμŠ€ν…œμ—μ„œ λΆ„μ‚°λœ ν•˜μ΄νΌλ―Έλ””μ–΄ μ‹œμŠ€ν…œμ„ μœ„ν•œ μ†Œν”„νŠΈμ›¨μ–΄ 아킀텍쳐이닀. HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•΄ λ‹€μ–‘ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ£Όκ³ λ°›μœΌλ©° 각 λ¦¬μ†ŒμŠ€λŠ” URL둜 μ‹λ³„λœλ‹€.

5. μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ‚¬μš©ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜

@Controller

  • @Controller와 @ResponseBodyλ₯Ό κ²°ν•©ν•œ μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ JSON/XML ν˜•μ‹μ˜ 데이터λ₯Ό λ°˜ν™˜ν• λ•Œ μ‚¬μš©λœλ‹€.
@RestController
public class MyRestController {
    @GetMapping("/greeting")
    public String greeting() {
        return "Hello, World!";
    }
}

@RequestParam

  • URL 쿼리 νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ 값을 λ©”μ†Œλ“œ λ§€κ°œλ³€μˆ˜μ— λ°”μΈλ”©ν•œλ‹€.
@GetMapping("/test")
public void test(@RequestParam String name, @RequestParam int price) {
    System.out.println(name);  // 좜λ ₯: spring
    System.out.println(price); // 좜λ ₯: 20000
}

@RequestBody

  • HTTP μš”μ²­μ˜ λ°”λ”” 뢀뢄을 μžλ°” 객체둜 λ³€ν™˜ν•΄μ€€λ‹€. 주둜 POST λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©λœλ‹€.
@PostMapping("/new")
public void createQuestion(@RequestBody QuestionDTO dto) {
    // 처리 둜직
}

@PathVariable

  • URL κ²½λ‘œμ—μ„œ 값을 κ°€μ Έμ˜¬λ•Œ μ‚¬μš©λœλ‹€. κ²½λ‘œμ— μžˆλŠ” λ³€μˆ˜λ₯Ό λ©”μ†Œλ“œ λ§€κ°œλ³€μˆ˜μ— λ°”μΈλ”©ν•œλ‹€.
@GetMapping("/champions/{name}")
public List<String> getChampionByName(@PathVariable String name) {
    return championService.getChampionByName(name);
}

마무리

Spring Bootμ—μ„œ μ œκ³΅ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜λ“€μ€ REST API κ°œλ°œμ—μ„œ 맀우 μœ μš©ν•˜κ²Œ ν™œμš©λœλ‹€.
이번 ν¬μŠ€νŒ…μ—μ„œλŠ” κ·Έμ€‘μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” κΈ°λ³Έ μ–΄λ…Έν…Œμ΄μ…˜λ“€κ³Ό 컨트둀러 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ•Œμ•„λ³΄μ•˜λ‹€.

profile
ν˜λŸ¬κ°€λ˜ μ›ν•˜λŠ” λ°©ν–₯으둜

0개의 λŒ“κΈ€