오늘부터 주특기 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 |