20220520 TIL

Don Lee·2022년 5월 21일
0

EpiTIL

목록 보기
11/24
post-thumbnail
post-custom-banner

  • Spring 실행 시 다음과 같이 변경
    • Group: com.”원하는 문구”
    • Artifact: week01
    • Type: Gradle
    • Language: Java
    • Java Version: 8

  • Spring 실행 시 꼭 필요한 5가지 요소
    • Lombok
    • Spring Web
    • Spring Data JPA
    • H2 Database
    • MySQL Driver

  • Auto import
    1. 환경설정 → "auto import"
    2. 옵션을 다음처럼 체크하고 OK 클릭하여 종료
      • Insert imports on paste: Always
      • Add unambiguous imports on the fly: 체크

패키지는 폴더와 같은 개념

💡 데이터로 응답하려면, RestController 를 사용해야 합니다.
  • Rest: Representational State Transfer
    • RestController란?: https://joomn11.tistory.com/53
      @RestController = @Controller + @ResponseBody
      주용도는 Json 형태로 객체 데이터를 반환하는 것.
      - 클라이언트의 요청(Request)을 전달받는 코드를 Controller 라고 부름.
          → JSON 만을 돌려주는 것은 RestController 라고 부름.
          
  • Spring MVC(Model - View - Controller): https://taes-k.github.io/2019/05/15/about-spring-mvc/

  • Lombok 소개

    👉 코드 절약하기!

    Lombok(이하 롬복)은, 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리입니다.

    • Course.java: Course 클래스 Getter, NoArgsConstructor 적용
    • CourseService.java: CourseService 클래스 RequiredArgsConstructor 적용
  • DTO

    👉 테이블을 막 건드려도 될까? = read, update할 때 Course 클래스를 막 써도 될까? = 내가 아닌 다른 사람이 변경이라도 한다면?? 😱 완충재로 활용하는 것이 DTO(Data Transfer Object)입니다.
    • 생성하기
      1. src > main > java > com.sparta.week02 > models 에 CourseRequestDto 파일 생성

      2. [코드스니펫] CourseRequestDto.java

        @NoArgsConstructor
        @Getter
        public class CourseRequestDto {
            private String title;
            private String tutor;
        
            public CourseRequestDto(String title, String tutor) {
                this.title = title;
                this.tutor = tutor;
            }
        }
    • 적용하기
      • [코드스니펫] CourseService 변경하기
        @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();
            }
        }
      • [코드스니펫] Course 변경하기
        @Getter
        @NoArgsConstructor
        @Entity
        public class Course extends Timestamped {
        
            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            private Long id;
        
            @Column(nullable = false)
            private String title;
        
            @Column(nullable = false)
            private String tutor;
        
            public Course(String title, String tutor) {
                this.title = title;
                this.tutor = tutor;
            }
        
            public void update(CourseRequestDto requestDto) {
                this.title = requestDto.getTitle();
                this.tutor = requestDto.getTutor();
            }
        }
      • [코드스니펫] Week02Application 변경하기
        @EnableJpaAuditing
        @SpringBootApplication
        public class Week02Application {
        
            public static void main(String[] args) {
                SpringApplication.run(Week02Application.class, args);
            }
        
            @Bean
            public CommandLineRunner demo(CourseRepository courseRepository, CourseService courseService) {
                return (args) -> {
                    courseRepository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));
        
                    System.out.println("데이터 인쇄");
                    List<Course> courseList = courseRepository.findAll();
                    for (int i=0; i<courseList.size(); i++) {
                        Course course = courseList.get(i);
                        System.out.println(course.getId());
                        System.out.println(course.getTitle());
                        System.out.println(course.getTutor());
                    }
        
                    CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "임민영");
                    courseService.update(1L, requestDto);
                    courseList = courseRepository.findAll();
                    for (int i=0; i<courseList.size(); i++) {
                        Course course = courseList.get(i);
                        System.out.println(course.getId());
                        System.out.println(course.getTitle());
                        System.out.println(course.getTutor());
                    }
        
                    courseRepository.deleteAll();
                };
            }
        }
profile
쾌락코딩
post-custom-banner

0개의 댓글