Closed wjlee611 closed 2 weeks ago
@wjlee611
오오 웅재님! 너무 잘 생각해주셔서 놀랐습니다!
DbService.save 메서드 호출 (단, 비동기 처리가 아니기 때문에 실제 DB에 저장되지 않은 채로 문구가 /submit 에 반환됨)
이 부분에 있어서 비동기 처리가 아니기에 저장되지 않은 채로 return되어서 문구가 반환된다고 하셨는데요!
코드를 실행하였을 때 쿼리가 어느 시점에 실행되는지 확인해보시는 작업을 추가로 진행해보시면 좋을거 같아요!
(중간중간 출력문을 넣어서 분기 확인해보는 방법도 있습니다.)
🔍 생각해보기
예측되는 과정은 아래와 같을 거 같습니다 a. localhost 접속 b.
HomeController
에서 index 페이지로 리다이렉트 (여기서 templates 의 \<name>.html 이 호출되는 듯..?) c. 제출 클릭시 POST 메서드로 /submit API 호출 d.DbController.submit
에서 수신 e.DbService.save
메서드 호출 (단, 비동기 처리가 아니기 때문에 실제 DB에 저장되지 않은 채로 문구가 /submit 에 반환됨) f.DbService
에서PracticeDto
모델 생성 (toEntity
메서드는 builder pattern을 이용해Practice
객체 반환) g.PracticeRepository.save
메서드 호출 (JpaRepository
를 상속받기에 제네릭으로 지정된Practice
규칙에 따라 DB에 엔트리 생성)java로 작성된 관계형 데이터베이스로 실제로 영구적으로 데이터를 저장하는 것이 아닌 메모리상에 띄우는 데이터베이스 입니다
form에서 input 태그의 name 필드가 엔티티 모델의 필드에 대응되는 거 같습니다. 따라서 form이 submit 되면 multipart의 형태로 데이터가 전송되는데, 이 때
{field:value, ...}
와 같은 형태로 전송됩니다. 이 때, ModelAttribute 어노테이션을 사용하면 사용자가 보내는 데이터를 객체 형태로 매핑이 가능해집니다. (RequestParam 어노테이션의 경우에는 단순 데이터 1:1 매핑방식)아래에서 언급합니다
🛠️ 진행하다 어려웠던 부분에 대해서 작성 or 그런 부분을 어떻게 해결했는지 알려주세요!
📃 참고한 출처