[Etc] ๐ŸŽž๏ธ Boilerplate์™€ Lombok

๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ ํ…œํ”Œ๋ฆฟ์ธ Boilerplate์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.


๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , spring์—์„œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ธ ๋กฌ๋ณต์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(Boilerplate)๋ž€?

  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ ํ…œํ”Œ๋ฆฟ
  • ๐Ÿ”ฅ ์ฆ‰, โ€œ๋งค๋ฒˆ ์ƒˆ๋กœ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ์„ธํŠธโ€๋ฅผ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ผ๊ณ  ํ•จ
  • ์˜๋ฏธ
    • ์›๋ž˜๋Š” ์ธ์‡„ ์‚ฐ์—…์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธˆ์†ํŒ์„ ์˜๋ฏธ
    • ์ดํ›„ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ๋„ โ€œ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌโ€๋ฅผ ์˜๋ฏธํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ์˜ ํŠน์ง•

  1. ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋งค๋ฒˆ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ๋“ค์ด ํฌํ•จ๋จ
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ, ์„ค์ • ํŒŒ์ผ, ์ธ์ฆ ๋กœ์ง ๋“ฑ์ด ํ•ด๋‹น

    ๋ฐ˜๋ณต์ ์ด๋‹ˆ ์•ˆ์ข‹๋‹ค๊ณ  ์—ฌ๊ฒจ์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์™„์ „ํžˆ ์—†์• ๋Š”๊ฒŒ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ ์ตœ์†Œํ™”ํ•˜๊ณ  ํšจ์œจํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ!

  1. ํ…œํ”Œ๋ฆฟํ™”
  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ์ค„์—ฌ์คŒ
  • ์˜ˆ๋ฅผ ๋“ค์–ด, React, Express, Spring Boot๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํ…œํ”Œ๋ฆฟ์ด ์ œ๊ณต๋จ
  1. ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋จ
  • React : create-react-app์ด ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ ์„ค์ •์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • Express : express-generator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ์ ์ธ Express ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • Spring Boot : Spring Initializr๋ฅผ ์‚ฌ์šฉ์‚ฌ๋ฉด ๊ธฐ๋ณธ์ ์ธ ์„ค์ •์ด ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์˜ˆ์ œ ์ฝ”๋“œ

  • Spring Boot ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

Lombok

๋กฌ๋ณต(Lombok)์€ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜

ํ•˜์ง€๋งŒ Spring ์ „์ฒด๊ฐ€ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ตฌ์กฐ๊ณ , ๋กฌ๋ณต์€ ๊ทธ ์ค‘ ์ผ๋ถ€๋ถ„

  • Java์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋“ค (getter, setter, constructor ๋“ฑ)์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ

์–ด๋…ธํ…Œ์ด์…˜์„ค๋ช…
@Getter๋ชจ๋“  ํ•„๋“œ์— getter ์ƒ์„ฑ
@Setter๋ชจ๋“  ํ•„๋“œ์— setter ์ƒ์„ฑ
@ToStringtoString() ์ž๋™ ์ƒ์„ฑ
@EqualsAndHashCodeequals()์™€ hashCode() ์ž๋™ ์ƒ์„ฑ
@NoArgsConstructor๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ƒ์„ฑ
@AllArgsConstructor๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ์ƒ์„ฑ
@RequiredArgsConstructorfinal ํ•„๋“œ๋งŒ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ์ƒ์„ฑ
@DataGetter + Setter + ToString + EqualsAndHashCode + @RequiredArgsConstructor ํฌํ•จ๋œ ์ข…ํ•ฉ ํŒจํ‚ค์ง€
@Builder๋นŒ๋” ํŒจํ„ด ์ž๋™ ์ƒ์„ฑ (.builder()๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ๊ฐ€๋Šฅ)

์˜ˆ์‹œ:

โœ… ์ผ๋ฐ˜์ ์ธ Java ์ฝ”๋“œ (๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ๋งŽ์Œ)

public class User {
    private String name;
    private int age;

    public User() {}
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // ... ๋ฐ˜๋ณต
}

โœ… ๋กฌ๋ณต ์‚ฌ์šฉ

import lombok.Data;

@Data
public class User {
    private String name;
    private int age;
}
  • @Data ํ•˜๋‚˜๋กœ getter/setter/toString/equals/hashCode/constructor ์ „๋ถ€ ์ƒ์„ฑ๋จ ๐ŸŽ‰

๐Ÿ’ก ๋กฌ๋ณต์˜ ์žฅ์ 

  1. โœ‚๏ธ ์ฝ”๋“œ๊ฐ€ ์งง์•„์ ธ์„œ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง
  2. ๐Ÿšซ getter/setter ์ž‘์„ฑ ์‹ค์ˆ˜ ๋ฐฉ์ง€
  3. ๐Ÿงช ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๊ฐ„ํŽธํ•ด์ง
  4. โฑ ์ฝ”๋“œ ์ž‘์„ฑ ์†๋„ ๊ธ‰์ƒ์Šน
  5. ๐Ÿ”„ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ์ˆ˜์ •ํ•  ์ฝ”๋“œ ์ค„์–ด๋“ฆ

Spring์—์„œ์˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ํ•ด๊ฒฐ ๊ตฌ์กฐ

๋„๊ตฌ / ๊ฐœ๋…์—ญํ• 
Spring Boot์„ค์ •ํŒŒ์ผ, ์„œ๋ฒ„ ์‹คํ–‰ ๋“ฑ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ž๋™ํ™”
Spring MVC ๊ตฌ์กฐ์ปจํŠธ๋กค๋Ÿฌ/์„œ๋น„์Šค/๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ตฌ์กฐ ์ •ํ˜•ํ™”ํ•ด์„œ ๋ฐ˜๋ณต ํŒจํ„ด ํ†ต์ผ
Spring Initializrํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ๋ผˆ๋Œ€ ์ž๋™ ์ƒ์„ฑ
๋กฌ๋ณต(Lombok)DTO๋‚˜ ์—”ํ‹ฐํ‹ฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” getter/setter ๋“ฑ ์ œ๊ฑฐ
์˜์กด์„ฑ ์ฃผ์ž… (DI)๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ ์—ฐ๊ฒฐ์„ Spring์ด ๋Œ€์‹  ์ฒ˜๋ฆฌ