MyBlog - 개발일지 (항해99 - 17일차)

스브코·2021년 11월 18일
0
post-thumbnail
post-custom-banner

website URL: http://ksbfirst.shop
github: https://github.com/SeongBeomKo/myblog

MyBlog

로그인 기능 없이 접속자가 글을 남길 수 있고 포스트된 글은 24시간동안만 유지된다. CRUD 기능 중 Create, Read만 구현했고 로그인 기능이 없기 때문에 Update와 Delete는 구현하지 않았다.

기술 스택

backend

Spring Boot
Java
AWS
MySql

Frontend

HTML, CSS
Jquery

요구사항

  1. 전체 게시글 목록 조회 페이지
    • 제목, 작성자명, 작성 날짜를 조회하기
    • 작성 날짜 기준으로 내림차순 정렬하기
    • 특정 게시글을 클릭할 경우 게시글 조회 페이지로 이동하기
    • 전체 게시글은 24시간마다 리셋
  2. 게시글 작성 페이지
    • 제목, 작성자명, 작성 내용을 입력하기
    • "글쓰기" 버튼을 클릭하면 전체 게시글 목록 조회 페이지로 이동하고, 최신 게시글이 최상단에 위치함을 확인하기
  3. 게시글 조회 페이지
    • 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기

API 정보

고민한 내용

상세페이지를 나누는 방법이 제공된 강의 자료에 없었다.

Flask framework에서는 render_template() 함수를 이용해서 원하는 페이지로 이동 시키고 Jinja2로 데이터를 쉽게 넘길 수 있었는데 Spring에서는 비슷한 기능을 어떻게 구현하는지 참고 자료가 제공 되지 않아서 구글링이 필요했다.

총 두가지 개념을 알아야 했다.

ModelAndView 객체 사용

model과 view를 동시에 설정이 가능하며 콘트롤러는 ModelAndView객체만 리턴하지만 Model과 View가 모두 리턴가능하다. addObject() 함수를 사용하여 모델의 데이터를 객체에 포함 시킨다.

Model 인터페이스의 addAttribute method를 통해 key / value 형태로 값을 임시로 저장한다. Controller는 Model에 데이터를 저장하고 View Name을 Return 하면서 View로 넘어간다. 이때 View는 Model에 저장된 Data를 참고하여 결과를 화면에 보여준다. 이러한 과정을 Web MVC Framework에서 Model과 View 둘다 저장할 수 있게 해주어서 Model 객체를 인자로 사용하지 않고 내부에서 ModelAndView 객체를 생성해서 사용한다. 또한 ModelAndView 객체에서 Attribute를 정의하며, 리턴할 View Name까지 모두 정의하기 때문에 더욱 간편해졌다.

Thymeleaf 사용

  • 뷰 템플릿 엔진으로, 컨트롤러가 전달하는 데이터를 이용하여 동적으로 화면을 구성할 수 있게 해준다.

  • html 태그를 기반으로 하여 동적인 View를 제공한다.

  • th:속성을 이용하여 데이터를 바인딩한다.

@Controller와 @RestController의 차이

@Controller + @ResponseBody = @RestController

전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다.

@ResponseBody는 자바객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송합니다.(JSON으로 Request했으면 JSON으로 변환하여 보내준다는거 같음)

@RestController는 리턴값에 자동으로 @ResponseBody가 붙게되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터에 자바객체가 매핑되어 전달됩니다.

@Controller와 @RestController의 주요 차이점 중 하나는 @RestController을 표시하면 모든 메소드가 뷰 대신 객체로 작성됩니다.

Restful 웹서비스를 만드는 경우에는 @RestController를 사용하는 것이 좋다.

Restful 웹서비스란?

REST(Representational State Transfer)란 분산시스템 설계를 위한 아키텍쳐 스타일에 맞는 웹서비스들 말한다.

Rest의 원칙

  • 리소스는 URI를 통해 쉽게 이해될수 있도록 표현해야한다.

  • Json 혹은 XML을 전송하여 데이터 객체나 속성을 나타내야 한다.

  • 메세지는 HTTP method를 이용하여 명시적으로 표현해야한다. (CRUD조작을 HTTP요청에 매핑)

  • Stateless 상호작용이란 각 요청 간 클라이언트의 context가 서버에 저장되지 않습니다.

회고

하루만에 스프링을 이용해서 간단히 API를 구현해보는 프로젝트였다. 다음주에 조금 더 심화 과정을 배워서 더 재미있는 프로젝트를 하고 싶다.

profile
익히는 속도가 까먹는 속도를 추월하는 그날까지...
post-custom-banner

0개의 댓글