본문 바로가기

Spring

(27)
[Spring]기능 - 회원가입 회원가입을 만들어보자. 1. 엔티티 생성 회원의 정보를 담을 수 있는 엔티티를 생성한다. @Getter @Setter @Entity public class SiteUser { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique = true) private String username; private String password; @Column(unique = true) private String email; } 이름과 이메일은 한가지만 들어올 수 있도록 unique를 주었다. 2. Repository와 Service class 생성 기능을 위한 Repository와 Service를 생성한다. User..
CSRF(Cross Site Request Forgery) CSRF 이란 사이트 간 위조 요청을 통한 공격으로 CSRF 공격은 사용자가 의도치 않게 등록, 수정 등 특정 웹 사이트에 위조된 요청을 보내는 것을 의미한다. Spring에서는 CSRF 방어를 위해 Spring Security를 통해 CSRF Token을 발급한다. 게시물을 만들 때 필요한 form 태그이다. Spring Security를 켜지 않았을 때와는 다르게 value 속성에 어떠한 값이 들어있다. 이것은 CSRF Token으로써 해당 토큰의 값이 정확한지 검증하고, 검증되지 않으면 게시물이 생성되지 않도록 Spring Security가 Block해준다. 예시를 보자. https://codepen.io/jae-soon/pen/qBoLXMp qBoLXMp ... codepen.io 해당 사이트를 ..
[Spring]Spring Security 스프링 시큐리티란 스프링 기반의 Application 인증과 권한, 인가 등을 담당하는 스프링의 하위 프레임 워크이다. 인증? : 신원을 확인하는 것 (누구인지? / 로그인 아이디, 비밀번호가 유효한지?) 인가? : 권한이 있는지 확인하는 것(어떤 것을 할 수 있는지? / 너가 뭘 할 수 있어?) 주로 Servlet Filter와 Filter Chain으로 구성된 위임모델을 사용하며, 개발자는 일일이 보안관련 로직을 만들지 않아 편해진다. 특징 보안과 관련된 많은 옵션을 제공받아 편리하게 사용 가능 Filter 기반으로 동작해 MVC와 분리하여 관리 및 동작 가능 어노테이션 사용으로 간단하게 설정 가능 세션 & 쿠키 방식으로 인증 인증 관리자와 접근 결정 관리자를 통해 사용자의 리소스 접근 관리 Filt..
[Spring]기능 - 페이징 기능 페이징은 아주 많은 글이 있을 경우, ?개씩 묶어 출력시켜주는 기능을 얘기한다. 페이징 기능을 구현해보자. 1. 테스트 데이터 생성 많은 데이터가 필요하기에 테스트 데이터를 만들어보자. 이미 Test를 위한 데이터를 만드는 부분이 있으니 이를 이용해보자. @Test void 저장() { int lastId = 300; IntStream.rangeClosed(3, lastId).forEach(id -> { Question q = new Question(); q.setSubject("%d번 질문".formatted(id)); q.setContent("%d번 질문의 내용".formatted(id)); q.setCreateDate(LocalDateTime.now()); questionRepository.save..
[Spring]기능 - 네비게이션 바 네비게이션 바 만들기를 해보자. 네비게이션 바는 그냥 네비게이션 같은 역할을 한다. 이런것도 네비게이션 바 일 것이다.. 바로 만들어보자. 내용은 "Spring 시작하기"를 이어서 진행한다. 1. nav영역 추가 모든 페이지에 공통적으로 추가해야하는 부분이기 때문에 layout.html에 추가한다. bootstrap을 이용해 꾸며준 navbar영역의 코드를 header 영역 대신에 추가한다. SBB 로그인 그러면 이와 같이 네비게이션 바가 생성된다. 하지만, 화면이 줄어들었을 때 햄버거 바가 생성된다. 이를 클릭하면 로그인 및 다른 기능들이 나올 수 있도록 해야하는데 JavaScript를 사용한다. 나는 BootStrap JavaScript를 사용했다. head 부분에 아래 코드를 삽입한다. 그러면 이렇..
[Spring]Spring 시작해보기(14) - 에러메시지 출력 창 중복 제거 각 template에서 오류 메시지를 출력하기 위한 부분의 중복이 있다. 이런 중복을 없애기 위해서는 어떻게 해야할까? “공통 템플릿”을 사용해 에러메시지를 출력하는 부분의 중복을 없애보자. 1. 중복되는 영역 템플릿 생성 form_errors.html 파일을 만들어 중복되는 부분을 템플릿 상속으로 해결할 수 있도록 한다. 여기서 th:fragment=”formErrorsFragment” 라는 속성을 추가했는데, 이는 반복되는 부분을 처리하기 위한 것이다. 2. 공통 템플릿 적용 공통 템플릿을 적용하기 위해 각 form.html을 수정한다. 여기서 replace는 해당 태그를 완전히 대체하는 방법으로 해당 구간을 form_error.html 파일의 fragment 속성이 formErrorsFragment..
[Spring]Spring 시작해보기(13) - 답변 등록 오류 이전 글 처럼 답변 작성에 form이 비어있을 경우, 오류창을 띄우는 방법을 알아보자. 1. AnswerForm class를 만든다. answer의 내용을 적는 form이 비어있는지, 아닌지에 대해서 검증하기 위해 사용하는 AnswerForm 객체를 만든다. @Getter @Setter public class AnswerForm { @NotEmpty(message = "내용은 필수항목입니다.") private String content; } 2. Controller 수정 @PostMapping("/create/{id}") public String createAnswer(Model model, @PathVariable("id") Integer id, @Valid AnswerForm answerForm, B..
[Spring]Spring 시작해보기(12) - 질문 등록 버튼 및 폼 생성 질문들의 List는 출력하지만, 질문을 등록할 수 있는 방법은 DB에서 직접 적어 넣을 수 있는 방법밖에는 없다. 하지만, 을 사용해 질문을 직접 web application에서 만들 수 있다. 1. 질문 등록하기 버튼 생성 question_list.html 파일 가장 아래 button을 넣을 곳에 아래 코드를 넣어준다. 질문 등록하기 bootstrap을 사용한 버튼이 생성되고, question/create로 Link되었다. 2. URL Mapping 우리는 question/create란 URL로 이동할 수 없다. 왜냐하면 Controller에서 Mapping을 해주지 않았기 때문이다. Mapping을 위해 QuestionController에 아래 코드를 적어주자. @GetMapping("/create"..