๐Ÿ—„๏ธ DB ๋ฐ์ดํ„ฐ ์ถœ๋ ฅํ•˜๊ธฐ + Lombok ์„ค์น˜

EthAnalogยท2025๋…„ 8์›” 22์ผ

Spring Boot

๋ชฉ๋ก ๋ณด๊ธฐ
8/16
post-thumbnail

โœ… ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๊ฐ€?

  • DB์— ์ €์žฅ๋œ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์™€์„œ ์ƒํ’ˆ๋ชฉ๋ก ํŽ˜์ด์ง€์— ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ฝ”๋“œ ์–‘์„ ์ค„์ด๊ธฐ ์œ„ํ•ด Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

๐Ÿ‘‰ ์™œ ์ด๊ฑธ ๋ฐฐ์›Œ์•ผ ํ•˜์ง€?

  • ์ง€๊ธˆ๊นŒ์ง€๋Š” ์ž„์‹œ ๋ฐ์ดํ„ฐ๋งŒ HTML์— ๋„ฃ์—ˆ๋Š”๋ฐ, ์ด์ œ ์‹ค์ œ DB ๋ฐ์ดํ„ฐ์™€ ์—ฐ๋™ํ•ด์•ผ ํ•œ๋‹ค.
  • Spring JPA + Repository ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด SQL์„ ์ง์ ‘ ์“ฐ์ง€ ์•Š๊ณ ๋„ DB ์ž…์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Lombok์€ ๋ฐ˜๋ณต์ ์ธ getter/setter, ์ƒ์„ฑ์ž ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜์„œ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์—ฌ์ค€๋‹ค.

๐Ÿ“š ๊ฐœ๋… ์ •๋ฆฌ

๊ฐœ๋…์„ค๋ช…
Lombok๋ฐ˜๋ณต ์ฝ”๋“œ(getter/setter/constructor ๋“ฑ) ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
RepositoryJPA์—์„œ DB ์ž…์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ณ„์ธต
JpaRepositoryJPA์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค. findAll(), save() ๋“ฑ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ ์ œ๊ณต
List์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜• (ArrayList ๋“ฑ ๊ตฌํ˜„์ฒด ์žˆ์Œ)
Dependency Injectionํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์ด ์•Œ์•„์„œ ์ƒ์„ฑ(new)ํ•ด์„œ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๋ฐฉ์‹

โš™๏ธ ๊ตฌํ˜„ ํ๋ฆ„ ๋ฐ ์ฝ”๋“œ

1. Lombok ์„ค์น˜ (build.gradle)

dependencies {
  compileOnly 'org.projectlombok:lombok'
  annotationProcessor 'org.projectlombok:lombok'
}
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ + annotation processor ์ฒดํฌ ํ•„์š”

2. Repository ์ƒ์„ฑ

public interface ItemRepository extends JpaRepository<Item, Long> {
}
  • Item ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ฒฐ๋œ Repository ์ƒ์„ฑ
  • Long์€ id ์ปฌ๋Ÿผ์˜ ํƒ€์ž…

3. Controller์—์„œ Repository ์ฃผ์ž…

@Controller
@RequiredArgsConstructor   // Lombok: ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ž ๋งŒ๋“ค์–ด์คŒ
public class ItemController {
    private final ItemRepository itemRepository;

    @GetMapping("/list")
    @ResponseBody
    public String list() {
        var result = itemRepository.findAll();
        System.out.println(result);
        return result.toString();
    }
}
  • private final๋กœ ์„ ์–ธ ํ›„ Lombok์˜ @RequiredArgsConstructor ์‚ฌ์šฉ โ†’ ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ itemRepository๋ฅผ ์ฃผ์ž…ํ•จ

4. List ์ž๋ฃŒํ˜• ํ™œ์šฉ

List<Item> result = itemRepository.findAll();
System.out.println(result.get(0));        // ์ฒซ ๋ฒˆ์งธ ํ–‰ ์ „์ฒด
System.out.println(result.get(0).title);  // ์ฒซ ๋ฒˆ์งธ ํ–‰์˜ title ์ปฌ๋Ÿผ๋งŒ ์ถœ๋ ฅ

๐Ÿ’ก ์ด๋Ÿฐ ๊ณณ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”

  • ์ƒํ’ˆ ๋ชฉ๋ก ์ถœ๋ ฅ
  • ๊ฒŒ์‹œํŒ ๊ธ€ ๋ฆฌ์ŠคํŠธ
  • ํšŒ์› ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€
  • ๊ด€๋ฆฌ์ž์šฉ ๋ฐ์ดํ„ฐ ์กฐํšŒ

โœ๏ธ ๊ฐœ์ธ ์ •๋ฆฌ ๋ฐ ํšŒ๊ณ 

  • ์ด์ œ DB๋ž‘ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์—ฐ๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
  • Repository ํŒจํ„ด์„ ์“ฐ๋ฉด SQL ๋ชฐ๋ผ๋„ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๊ฐ€๋Šฅ โ†’ ์‹ ์„ธ๊ณ„!
  • Lombok ์—†์„ ๋• ์ƒ์„ฑ์ž/Getter/Setter ๋ฐ˜๋ณตํ•ด์„œ ์ผ๋Š”๋ฐ, ์ด์ œ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๋‹ค.

๐Ÿ”‘ ์˜ค๋Š˜ ๋ฐฐ์šด ํ•ต์‹ฌ 3์ค„ ์š”์•ฝ

  1. Lombok ์„ค์น˜ โ†’ ๋ฐ˜๋ณต ์ฝ”๋“œ ์ค„์ด๊ธฐ
  2. Repository ์ƒ์„ฑ + @RequiredArgsConstructor โ†’ DB ์ž…์ถœ๋ ฅ ์ค€๋น„ ๋
  3. itemRepository.findAll() โ†’ DB ๋ฐ์ดํ„ฐ ์ „๋ถ€ ๊ฐ€์ ธ์˜ค๊ธฐ ๊ฐ€๋Šฅ

0๊ฐœ์˜ ๋Œ“๊ธ€