본문 바로가기

Web/스프링 부트와 aws로 구현하는 웹서비스14

13. 전체 조회 화면 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 앞선 게시물에서는 게시글 등록 화면과 실제로 작동하도록 index.js까지 완성하였다. 이번 게시물에서는 index.mustache에서 저장되어있는 게시물 목록을 볼 수 있도록 구현할 계획이다. 우선 index.mustache를 변경한다. 기존의 index.mustache의 글 등록 버튼을 포함한 div 아래 작성한다. 여기서 머스테치의 문법이 처음으로 등장한다.(레이아웃 제외하고) 1) {{#posts}} - 이는 마치 Java의 for문과 동일하게 생각하면 되며, posts라는 list를 순회한다. 2) {{id}} 등등 {{변수명}} - List에서 뽑아낸 객체의 필드를 사용한다. ind.. 2021. 7. 21.
12. 게시글 등록화면 만들기 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 앞서서 PostsApiController로 api는 미리 만들어 놨으므로 바로 화면으로 개발한다. 여기서 오픈소스인 부트스트랩을 이용하여 화면을 구성해본다. 부트스트랩, 제이쿼리 등과 같은 프론트엔드 라이브러리는 첫째, 외부 CDN을 받아 사용하는 것이며 둘째는 직접 라이브러리를 받아서 사용하는 방법이다. 해당 책에서는 외부 CDN을 받아서 사용한다. 실제 서비스에서는 외부 서비스에 의존해 버려, CDN 서비스하는 곳에 문제가 생기면 우리 서비스도 타격을 받아 잘 사용하지 않지만, 사용법이 간단하고 실제 서비스가 아니므로 이 방법을 선택한다. 하지만 부트스트랩과 제이쿼리를 추가하려면 머스테치 .. 2021. 7. 21.
11. 머스테치 활용해 기본 페이지 생성, 테스트 코드 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 우선 build.gradle에 머스테치 스타터 의존성을 등록한다. implementation 'org.springframework.boot:spring-boot-starter-mustache' 머스테치는 스프링부트에서 공식 지원하는 템플릿 엔진이며, 추가 설정이 필요 없으며 스프링 부트의 버전 또한 신경쓰지 않아도 된다. 머스테치 파일의 기본 위치는 src/main/resources/templates 이다. 이곳에 머스테치 파일을 두면, 스프링 부트에서 자동으로 인식하여 로딩하게 된다. 우선 첫 페이지 index.mustache를 위의 위치에 생성한다. 이 머스테치에 URL을 매칭하기 위해서는.. 2021. 7. 20.
10. 서버/클라이언트 템플릿 엔진의 차이, 머스테치 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 이번 게시물에서는 템플릿 엔진의 종류 및 서버 템플릿 엔진과 클라이언트 템플릿 엔진의 타이점, 그리고 이 책에서 머스테치를 사용하게 된 이유에 대해 나열할 것이다. 1. 템플릿 엔진 우선 웹 개발에 있어 템플릿 엔진이란, 지정된 템플릿 양식과 데이터가 합쳐져 HTML문서를 출력하는 소프트웨어를 이야기한다. 쉽게 이야기해서, 웹사이트 화면을 어떤 형태로 만들지 도와주는 양식이라고 생각하면 된다. 여기에는 JSP, Freemarker 부터 시작해서, 리액트, 뷰와 같은 View 파일이 있다. 모두 지정되어있는 템플릿과 데이터를 이용하여 HTML을 생성하는 템플릿 엔진이지만, 전자는 서버 템플릿 엔.. 2021. 7. 20.
9. JPA Auditing으로 생성/수정시간 자동화 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 엔티티에는 보통 데이터의 생성/수정 시간을 포함한다. 따라서 매번 DB에 insert, update할때 마다 날짜 데이터를 등록, 혹은 수정하는 코드가 들어가게 된다. 문제는 이런 메소드를 만들어 필요할 때 마다 사용하면 모든 테이블과 서비스 메소드에 포함되며, 코드가 지저분해지게 된다. 따라서 이를 해결하고자 JPA Auditing을 사용한다. 참고로 날짜를 기록하기 위해서 날짜 타입을 사용한다. 이때, Java 8 부터 등장한 LocalDate와 LocalDateTime을 사용한다. 이는 기존에 사용하던 Date와 Calendar 클래스의 문제를 해결하게 되었으며, 스프링부트 2.x 버전을.. 2021. 7. 20.
8. 수정, 조회 api 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 지난 게시물에서 등록 api를 작성하였으므로, 이어서 게시글을 수정, 조회하는 api를 작성할 것이다. 수정은 PUT 방식, 조회는 GET방식으로 작성한다. PostsResponseDto.java를 새로 생성한다. 해당 Dto는 조회하는 기능만 필요하므로, 생성자 어노테이션을 사용하지 않고 @Getter 어노테이션만 사용하도록 한다. 또한, Entity의 일부만 사용하므로 생성자에 Entity를 받아 필드에 값을 넣는다. 수정 위한 Dto도 추가하고, Posts Entity 클래스에 update 함수를 추가한 후 PostsService Service 클래스에 업데이트, 조회 함수를 작성한다. .. 2021. 7. 19.
7. 스프링부트, Gradle, Junit 업데이트 하기 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 책을 보며 공부를 이어나가던 도중, 저자님의 블로그에 스프링부트 2.1 -> 2.4, Gradle 4.10 -> 6, Junit4 -> Junit5의 새로운 버전으로 코드를 정리하신 글을 발견하였다. (링크) 물론 현재 스프링부트 2.5, Gradle은 7.1버전이 출시되었지만 최근 협업하고 있는 프로젝트의 버전은 스프링부트 2.4.8, Gradle 6.9이므로 우선 위의 링크를 통해 프로젝트를 수정하고, 추후에 더 상위버전을 공부할 것이다. 1. Gradle 버전 올리기 기존에 gradle 4.10.4를 사용하였는데, 우선 gradle 버전을 올려준다. 해당 블로그 게시물에서는 6.7.1로 .. 2021. 7. 19.
6. 게시판 등록 api 만들어 보기 해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다. 이번 게시물은 게시물 등록, 수정, 조회를 위한 api를 만들도록 할 것 이다. api를 만들기 위해서는 1. Request 데이터를 받을 Dto 2. API 요청을 받을 Controller 3. 트랜잭션, 도메인 기능간의 순서를 보장하는 Service 왜 도메인 모델을 다루는지에 대한 설명은 책에 이루어져 있다. 우선 web 패키지에 PostsApiController, web.dto 패키지에 PostsSaveRequestDto, service.posts 패키지 생성 후 PostsService를 생성하고 작성한다. 책에서도 언급되어있으나 Entity클래스와 거의 유사함에도 불구하고 Dto클래스.. 2021. 7. 16.