일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GOF
- 서브셋폰트
- 캡슐화
- Secret
- PostgreSQL
- package
- dfs
- 다형성
- 디자인 패턴
- github
- AOP
- bfs
- MariaDB
- process.env
- 추상화
- dotenv
- 동적계획법
- mock
- 객체지향
- Solid
- 클라우드
- 메모이제이션
- npm
- git
- netlify
- 상속
- CSS
- DP
- Java
- azure
- Today
- Total
이것저것 해보기🌼
TO-DO LIST 만들기 프로젝트 1 (구현) 본문
필요 Tool
1) IntelliJ
https://www.jetbrains.com/ko-kr/idea/
2) Postman App
https://www.postman.com/downloads/
0. 프로젝트 목표
1 | TO-DO LIST에 아이템 추가 |
2 | TO-DO LIST에 특정 아이템 조회 |
3 | TO-DO LIST 전체 목록 조회 |
4 | TO-DO LIST의 특정 아이템 수정 |
5 | TO-DO LIST의 특정 아이템 삭제 |
6 | TO-DO LIST의 전체 목록 삭제 |
구현해야할 6가지 기능은 위와 같다. Spring boot로 백엔드를 만들고, 프론트엔드를 통해 이를 확인해보자.
1. 프로젝트 생성
Gradle 로 New Project를 만든다.
우선 build.gradle에 필요한 plugin과 dependencies를 추가했다.
dependencies의 정보는 구글에 maven spring boot를 검색하면 아래와 같은 사이트에서 정보를 확인해볼수 있다.
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web/2.4.3
이후 다시 build를 해서 BUILD SUCCESSFUL 가 나오면 된다.
lombok의 경우 plugins에서 검색해서 추가로 설치를 해주어야한다.
2. 모델 구현
model 이라는 패키지를 생성하여 그 아래 3개의 클래스를 만든다.
1) todoEntity
lombok에서 제공되는 @Data, @NoArgsConstructor, @AllArgsConstructor 등을 사용한다.
public class TodoEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(name = "todoOrder", nullable = false)
private Long order;
@Column(nullable = false)
private Boolean completed;
}
2) todoRequest
마찬가지로 @Data, @NoArgsConstructor, @AllArgsConstructor를 import 하고,
아래와 같은 private data를 갖는다.
public class TodoRequest {
private String title;
private Long order;
private Boolean completed;
}
3) todoResponse
response에는 모든 데이터를 담아보낼수 있도록 아래와 같이 구성한다.
url의 경우 저렇게 코드안에 직접적으로 주소를 넣는것은 설계상 좋지 않지만, 우선 간단한 구현목표를 위해 이렇게 작성하였다.
public class TodoResponse {
private Long id;
private String title;
private Long order;
private Boolean completed;
private String url;
public TodoResponse(TodoEntity todoEntity){
this.id = todoEntity.getId();
this.title = todoEntity.getTitle();
this.order = todoEntity.getOrder();
this.completed = todoEntity.getCompleted();
this.url = "http://localhost:8080/" + this.id;
}
}
3. Repository 구현
데이터 인터페이스를 위한 repository 를 구현한다.
JpaRepository 를 extend하여 그안의 기능들을 사용한다.
package org.example.repository;
import org.example.model.TodoEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface TodoRepository extends JpaRepository<TodoEntity, Long> {
}
JpaRepository 에 어떤 기능이 들어있는지도 확인이 가능하다.
4. 서비스코드 구현
마찬가지로 service 의 패키지를 추가하고 그아래 TodoService 라는 Class를 추가하였다.
@Service
@AllArgsConstructor
public class TodoService {
private final TodoRepository todoRepository;
public TodoEntity add(TodoEntity request){
TodoEntity todoEntity = new TodoEntity();
todoEntity.setTitle(request.getTitle());
todoEntity.setOrder(request.getOrder());
todoEntity.setCompleted(request.getCompleted());
return this.todoRepository.save(todoEntity);
}
public TodoEntity searchById(Long id){
return this.todoRepository.findById(id)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
}
public List<TodoEntity> searchAll(){
return this.todoRepository.findAll();
}
public TodoEntity updateById(Long id, TodoRequest request){
TodoEntity todoEntity = this.searchById(id);
if(request.getTitle() != null){
todoEntity.setTitle(request.getTitle());
}
if(request.getOrder() != null){
todoEntity.setOrder(request.getOrder());
}
if(request.getCompleted() != null){
todoEntity.setCompleted(request.getCompleted());
}
return this.todoRepository.save(todoEntity);
}
public void deleteById(Long id){
this.todoRepository.deleteById(id);
}
public void deleteAll(Long id){
this.todoRepository.deleteAll();
}
}
import 부분을 제외하고 서비스 코드는 위와 같다.
5. 컨트롤러 구현
마찬가지로 controller 라는 패키지를 추가하고, 그아래 TodoController 클래스를 기본적인 뼈대만 먼저 완성했다.
@CrossOrigin
@AllArgsConstructor
@RequestMapping("/")
@RestController
public class TodoController {
private final TodoService service;
@PostMapping
public ResponseEntity<TodoResponse> create(){
System.out.println("CREATE");
return null;
}
@GetMapping
public ResponseEntity<TodoResponse> readOne(){
System.out.println("READ ONE");
return null;
}
@GetMapping
public ResponseEntity<List<TodoResponse>> readAll(){
System.out.println("READ ALL");
return null;
}
@PatchMapping("{id}")
public ResponseEntity<TodoResponse> update(){
System.out.println("UPDATE");
return null;
}
@DeleteMapping("{id}")
public ResponseEntity<?> deleteOne(){
System.out.println("DELETE");
return null;
}
@DeleteMapping
public ResponseEntity<?> deleteAll(){
System.out.println("DELETE ALL");
return null;
}
}
실행을 위해 Main method도 구현해준다.
org.example 패키지 아래 TodoApplication.java 의 내용은 아래와 같다.
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TodoServerApplication {
public static void main(String[] args) {
SpringApplication.run(TodoServerApplication.class, args);
}
}
'BE > Spring Boot' 카테고리의 다른 글
[REST API] PUT 다루기 (0) | 2021.06.30 |
---|---|
[REST API] POST 다루기 (0) | 2021.06.30 |
[REST API] GET 다루기 (0) | 2021.06.30 |
웹 개발 개론 (0) | 2021.06.30 |
TO-DO LIST 만들기 프로젝트 2 (실행 및 테스트) (0) | 2021.06.29 |