항해99/개발일지

20220121 개발일지

paran21 2022. 1. 21. 20:33

오늘부터 주특기 Spring 기본 주차를 시작한다.

이번주에는 개인과제로 조건에 맞는 웹페이지를 만들고, 팀과제로는 Spring 공부하면서 나오는 여러 개념들을 정리한다.

 

새로운 개념들이 많이 나오기도 했고, 실제로 해보면서 하는게 좋을 것 같아서

내일부터 바로 과제 시작해야할 것 같다.

 

#Spring의 구조

  • Controller : 가장 바깥 부분, 요청/응답을 처리함.
  • Service : 중간 부분, 실제 중요한 작동이 많이 일어남.
  • Repository : 가장 안쪽 부분, DB와 맞닿아 있음 

#Controller

  • 클라이언트의 요청(Request)을 전달받는 코드
  • Rest : 서버의 응답이 JSON형식임을 나타냄 → RestControlle
  • @RestController
  • @GetMapping : Get방식으로 정보를 요청. 브라우저에 주소를 치는 방식으로 정보를 요청한다.
    @GetMapping("/api/courses")
    public List<Course> getCourses() {
        return courseRepository.findAll();
    }​
  • @PostMapping : 생성 요청
    @PostMapping("/api/courses")
    public Course createCourse(@RequestBody CourseRequestDto requestDto) {
        Course course = new Course(requestDto);
        return courseRepository.save(course);
    }
  • @PutMapping : 수정요청
    @PutMapping("/api/courses/{id}")
    public Long updateCourse(@PathVariable Long id, @RequestBody CourseRequestDto requestDto) {
        return courseService.update(id, requestDto);
    }​
  • @DeleteMapping : 삭제
    @DeleteMapping("/api/courses/{id}")
    public Long deleteCourse(@PathVariable Long id) {
        courseRepository.deleteById(id);
        return id;
    }​

 

#ARC

    • Advanced REST Client
    • API를 확인할 수 있는 틀
    • Get 

  • Post
  • Put
  •  

 

#그레이들(Gradle)

  • Maven Repository(https://mvnrepository.com/)에서 원하는 라이브러리를 찾아서 사용할 수 있다.
    • build.gradle에 원하는 라이브러리 코드를 복사해서 dependencies에 붙여넣고, 실행한다.

 

#RDBMS

  • RDBMS(Relational DataBase Management System) : 컴퓨터에 정보를 저장하고 관리하는 기술
  • 주로 MySQL이 많이 사용된다.
  • H2
    • In-memory DB : 서버가 작동하는 동안에만 내용을 저장하고, 서버가 작동을 멈추면 데이터가 삭제됨
    • http://localhost:8080/h2-console에서 Connect해서 이용하면 된다.
    • H2를 사용하기 위해서는 scr > main > resources > application.properties 파일에 H2 웹콘솔 설정을 입력한다.
      spring.h2.console.enabled=true 
      spring.datasource.url=jdbc:h2:mem:testdb​

#JPA

  • SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기
  • JPA사용 코드
    @Bean 
    public CommandLineRunner demo(CourseRepository repository) {
    	return (args) -> {
    	};
    }​
  • CRUD
    • 생성(Create)
    • 조회(Read)
    • 변경(Update)
    • 삭제(Delete)

 

#Domain, Repository

  • Domain은 테이블, SQL은 Repository
  • Repository는 인터페이스 
  • public interface CourseRepository extends JpaRepository<Course, Long> { }​
  • application.properties에 spring.jpa.show-sql=true 를 추가하면 SQL이 보인다.

 

#Lombok

  • 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해주어 코드를 절약할 수 있도록 도와주는 라이브러리
  • 설정방법
    • 프로젝트 시작할때 추가
    • Setting에서 Annotation Processors :
      체크하기
    • plugins에서 lombok 설치
  • @Getter
  • @Setter
  • @RequiredArgsConstruction : final의 생성자 생략시켜줌

 

#DTO

  • Data Transfer Object
  • 데이터를 수정할 때 원 데이터(클래스)가 아니라 DTO를 사용
  • 아래와 같이 필요한 변수들을 선언 + lombok을 통해 getter, setter로 접근해서 이용
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@RequiredArgsConstructor
public class CourseRequestDto {
    private final String title;
    private final String tutor;
}
@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());
            }
        };
    }
    }

 

 

'항해99 > 개발일지' 카테고리의 다른 글

20220124 개발일지 #게시판 만들기(멀티페이지)  (0) 2022.01.25
20220122 개발일지  (0) 2022.01.23
20220120 개발일지(WIL)  (1) 2022.01.21
20220113 개발일지  (1) 2022.01.13
20220112 개발일지  (0) 2022.01.13