본문 바로가기

스프링부트12

[Spring Security]로그인/회원가입 페이지 구현해보기 이번 게시물에서는 Spring Security 공부 차원에서 이를 활용하여 로그인 페이지, 회원가입 페이지가 있는 소규모 프로젝트를 만들어 볼 것이다. 전체 코드는 Github에서 확인해 볼 수 있다. 해당 게시물은 해어린 블로그님의 게시물과 코딩스타트님의 게시물, 레퍼런스를 참조하여 작성했다. 1. Spring Security란? Spring Security는 스프링 기반 에플리케이션의 보안을 담당해주는 스프링 하위 프레임워크이다. 이를 활용하면 개발자가 직접 보안 관련 로직을 짜는 수고를 덜 수가 있다. 스프링 시큐리티에 대해 공부하기 위해 여러 포스팅과 블로그, 레퍼런스들을 둘러보았고, 우선 다음의 4가지 용어를 이해한 후 넘어갈 것이다. 1) 접근 주체(Principal) - 보호되어 있는 리소스.. 2021. 7. 26.
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.