Server/SpringBoot

[์›น๊ฐœ๋ฐœ์˜ ๋ด„, Spring] 2์ฃผ์ฐจ ๊ฐœ๋ฐœ์ผ์ง€(3) - Lombok, DTO, Controller

meeeeejin 2021. 7. 6. 21:59

 

[์›น๊ฐœ๋ฐœ์˜ ๋ด„, Spring] 2์ฃผ์ฐจ ๊ฐœ๋ฐœ์ผ์ง€(1) - RDBMS, H2, SQL

[์›น๊ฐœ๋ฐœ์˜ ๋ด„, Spring] 2์ฃผ์ฐจ ๊ฐœ๋ฐœ์ผ์ง€(2) - JPA์˜ CRUD์™€ Repository

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์ •๋ฆฌํ•  ๋ถ€๋ถ„์€ Lombok, DTO, Controller์— ๊ด€ํ•œ ๋‚ด์šฉ์ด๋‹ค. 

 

 

Lombok

๐Ÿ’ก Lombok์ด๋ž€?

Lombok(๋กฌ๋ณต)์€ ์ž๋ฐ” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ๊ฑฐ์˜ ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ/์ƒ์„ฑ์ž ๋“ฑ์„ ์ž๋™ ์ƒ์„ฑํ•ด์คŒ์œผ๋กœ์จ ์ฝ”๋“œ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. plugins์—์„œ lombok์„ ๊ฒ€์ƒ‰ํ•ด์„œ ์„ค์น˜ํ•œ ํ›„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

Getter, NoArgsConstructor, RequiredArgsConstructor ๋“ฑ์„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ดค๋‹ค. 

 

 

 

 

DTO

๐Ÿ’ก DTO์˜ ํ•„์š”์„ฑ

read, update๋ฅผ ํ•  ๋•Œ Course ํด๋ž˜์Šค๋ฅผ ๋ง‰ ์จ๋„ ๋ ๊นŒ? ๋‚ด๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด?? ์ฆ‰, ํ…Œ์ด๋ธ”์„ ๋ง‰ ๊ฑด๋“œ๋ ค๋„ ๋˜๋Š” ๊ฑธ๊นŒ??? ์ด๋Ÿฐ ๊ฑฑ์ •์ด ๋“ค ๋•Œ, ์™„์ถฉ์žฌ๋กœ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด DTO(Data Transfer Object)์ด๋‹ค. 

 

 

๐Ÿ’ก DTO ์ ์šฉํ•˜๊ธฐ

DTO๋ฅผ 2์ฃผ์ฐจ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด์ž. 

1. src > main > java > com.sparta.week02 > domain์— CourseRequestDto ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

@NoArgsConstructor
@Getter
public class CourseRequestDto {
    private String title;
    private String tutor;

    public CourseRequestDto(String title, String tutor) {
        this.title = title;
        this.tutor = tutor;
    }
}

2. CourseService, Course, Week02Application ํด๋ž˜์Šค์—์„œ update ๋ถ€๋ถ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค„ ๋•Œ CourseRequestDto๋ฅผ ์ด์šฉํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค. 

- CourseSercvie.java ์˜ˆ์‹œ

@RequiredArgsConstructor
@Service
public class CourseService {
    private final CourseRepository courseRepository;

    @Transactional
    public Long update(Long id, CourseRequestDto requestDto) {
        Course course1 = courseRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("ํ•ด๋‹น ์•„์ด๋””๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.")
        );
        course1.update(requestDto);
        return course1.getId();
    }
}

 

 

 

 

Controller

๐Ÿ’ก API

API๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„์˜ ์•ฝ์†์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •ํ•œ๋Œ€๋กœ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ(Request)์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‘๋‹ต(Response)์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

REST๋ž€ ์ฃผ์†Œ์— ๋ช…์‚ฌ, ์š”์ฒญ ๋ฐฉ์‹์— ๋™์‚ฌ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋ƒ„์„ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋™์‚ฌ๋Š” ์ „์— ๋งํ–ˆ๋˜ CRUD๋ฅผ ์ง€์นญํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด courses์— ๋Œ€ํ•ด ์ƒ์„ฑ(POST)/์กฐํšŒ(GET)/์ˆ˜์ •(PUT)/์‚ญ์ œ(DELETE) ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

์ฐธ๊ณ ๋กœ, ์ฃผ์†Œ์— ๋“ค์–ด๊ฐ€๋Š” ๋ช…์‚ฌ๋“ค์€ ๋ณต์ˆ˜ํ˜•์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฃผ์†Œ์— ๋™์‚ฌ๋Š” ๊ฐ€๊ธ‰์  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. 

 

 

๐Ÿ’ก Controller์— API ์ž‘์„ฑํ•˜๊ธฐ

controller ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— CourseController ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

@RequiredArgsConstructor
@RestController
public class CourseController {

    private final CourseRepository courseRepository;
	
    // ์—ฌ๊ธฐ์— API ์ž‘์„ฑํ•  ์˜ˆ์ •
    
}

 

- GET

@GetMapping("/api/courses")
public List<Course> getCourses() {
	return courseRepository.findAll();
}

 

- POST

@PostMapping("/api/courses") 
public Course createCourse(@RequestBody CourseRequestDto requestDto) {
	Course course = new Course(requestDto);
	return courseRepository.save(course);
}

 

- PUT

@PutMapping("/api/courses/{id}")
public Long updateCourse(@PathVariable Long id, @RequestBody CourseRequestDto requestDto) {
    return courseService.update(id, requestDto);
}

 

- DELETE

@DeleteMapping("/api/courses/{id}")
public Long deleteCourse(@PathVariable Long id) {
    courseRepository.deleteById(id);
    return id;
}

 

 

์ฐธ๊ณ ) ๊ฐ•์˜์—์„  ARC(Advanced REST Client)๋ฅผ ์ด์šฉํ•ด์„œ API ๊ธฐ๋Šฅ ํ™•์ธ์„ ํ–ˆ๋‹ค. ์ฃผ์˜ํ•  ์ ์€ POST, PUT ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” header์— Content-Type์„ application/json์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๋’ค, body์— json ํ˜•์‹์œผ๋กœ course ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ค˜์•ผ ํ•œ๋‹ค. 

 

 

 

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ: ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ ์›น๊ฐœ๋ฐœ์˜ ๋ด„, Spring 2์ฃผ์ฐจ ๊ฐ•์˜์ž๋ฃŒ

 

 

728x90