본문 바로가기
Etc/BootCamp : TIL

[Day 117] 솔로 프로젝트 - 웹 애플리케이션 설계

by 달의 조각 2022. 10. 17.

학습 주제

 

Todo 애플리케이션 만들기
- Restful API
- CRUD에 해당하는 HTTP Method

서버와 클라이언트
CORS

Tomcat을 이용한 수동 배포
Ngrok을 이용해 로컬에서 서버 실행

 


 

새롭게 배운 내용

 

2022.10.17 - [Back-End/Spring Boot] - [솔로 프로젝트] 웹 애플리케이션 설계 : TodoList

2022.10.17 - [Back-End/Spring Boot] - [솔로 프로젝트] To-do App

 

  • 서비스 계층에서 엔티티를 수정 기능을 구현하기 위해서는 엔티티에 Getter와 Setter가 필요하다.
  • Dto의 이너 클래스인 Patch는 Controlelr에서 requestBody.setMemberId(memberId);를 위해 Setter가 필요하다.
  • boolean 타입의 데이터를 가져올 때에는 isCompleted()를 사용한다.
Optional.ofNullable(todo.getTitle()).ifPresent(title -> findTodo.setTitle(title));
Optional.ofNullable(todo.isCompleted()).ifPresent(completed -> findTodo.setCompleted(completed));
  • 엔티티와 DTO의 필드 이름은 같아야 한다.

 

 

보강할 내용

 

  • JPA의 by
  • CORS

 

 

회고

 

  간단하게 CRUD를 구현할 수 있는 Todo 웹 애플리케이션을 만들었다. API 계층을 통해 클라이언트의 요청을 받고, Service 계층에서 비즈니스 로직을 통해 JPA 기반의 Repository에 데이터를 담는다. 웹 애플리케이션을 구성하고 Postman과 Todo Backend 사이트로 API 요청에 대한 응답을 확인했다.

1차적으로 Spring Boot에 내장된 Tomcat을 이용하여 JAR로 패키징 된 애플리케이션을 실행했고, 2차로는 내장 컨테이너가 아닌 톰캣을 사용하고, WAR로 패키징하여 확인했다. 톰캣 서버로는 여러 도메인이 각각의 웹 애플리케이션 환경을 구성할 수 있는 Virtual Host 기능이 있는데, 내장 컨테이너에서는 경량으로 포함되어 있어서 불가능하다. WAR은 웹 관련 자원을 포함한 웹 애플리케이션을 압축한 파일이다.

터미널 명령을 통해 톰캣 서버를 실행하고 빌드 결과물인 war 파일을 톰캣의 데릭토리에 위치하도록 했다. webapps 내부에 옮겨 두면 톰캣이 해당 애플리케이션을 실행한다. (server.xml 파일 수정 등이 필요하다.) 여기까지가 톰캣으로 로컬 환경에서 배포하는 과정이다.

배포를 하면 localhost:8080 주소에 접속 시 웹 애플리케이션에 접근할 수 있다! 그런데 이 방법은 다른 사람에게 전달 시의 문제가 발생한다. 이를 해결하기 위해 터널링 프로그램인 Ngrok을 사용한다. 발급받은 임시 도메인으로 다른 사람이 내 로컬 환경에 접근할 수 있게 한다.

각 API의 요청을 보낼 때 Postman에서는 알맞은 응답을 받을 수 있었다. 그런데 Todo Backend 사이트에서는 POST 요청을 보낸 할 일이 업데이트 되지 않는 문제가 발생했다. 프로젝트 시 CORS 문제를 자주 마주하게 될 것이라고 했는데 바로 이 문제였다. 우선 아래 코드를 통해 문제를 해결했지만, 이에 대한 문제는 따로 포스팅 해서 정리해야겠다.

@CrossOrigin(origins = "*", allowedHeaders = "*")

 

 

★★★★★

 

'Etc > BootCamp : TIL' 카테고리의 다른 글

[Day 120] Pre Project 시작 🦈  (0) 2022.10.20
[Day 119] Section 4 회고  (0) 2022.10.19
[Day 114] Spring WebFlux  (0) 2022.10.14
[Day 113] Spring WebFlux : Project Reactor  (0) 2022.10.13
[Day 106] Cloud : 배포 자동화  (0) 2022.10.06

댓글