목록Backend/Spring (17)
elevne's Study Note

Spring Security 는 Servlet Filter 에 기반하여 작동한다고 한다. 이를 이해하기 위해 우선 Filter 의 역할에 대해 알아보아야 했다. Filter 이란 서버가 보내거나 받는 자료에 적용되는 작업을 말한다. 클라이언트가 서버에 보내는 자료는 입력필터가 처리하고, 서버가 클라이언트에 보내는 자료는 출력필터가 처리한다. 데이터에 여러 개의 필터를 사용할 수 있으며, 그 여러 개의 필터의 순서를 지정해줄 수도 있다. 클라이언트가 애플리케이션에 요청을 보내면, 컨테이너는 Filter 인스턴스들과 서블릿을 포함하여 HttpServletRequest 를 처리하는 FilterChain 이라는 것을 만들게된다. Spring MVC 구조에서 Servlet 은 DispatcherServlet 의..

간단한 게시판 서버를 Spring Boot 를 통해 천천히 구현해보고자 하였다. 우선 아래와 같은 dependency 들만 추가해주었다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'org.springframework.boot:spring-boot-starter-security' implementation '..

게시판의 질문, 답변에는 누가 글을 작성하였는지 알려주는 속성이 필요하다. Question, Answer 클래스에 아래 코드를 추가해준다. @ManyToOne private SiteUser author; Question, Answer 에 위 속성을 추가해준 뒤에는 질문과 답변 저장 시 author 속성도 저장할 수 있는 것이다. Answer Controller 부터 아래와 같이 수정해주었다. package com.springboot.study.controller; import com.springboot.study.entity.Question; import com.springboot.study.entity.SiteUser; import com.springboot.study.form.AnswerForm; i..

이번에는 Spring Boot 에서 회원가입, 로그인 등을 도와주는 Spring Security 를 사용해보았다. Spring Security 는 Spring 기반 Application 의 인증(Authenticate)과 권한(Authorization)을 담당하는 Spring 의 하위 프레임워크이다. 여기서 인증(Authentication)은 로그인을 의미, 권한(Authorization)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 우선 이를 사용하기 위해서 build.gradle 파일을 수정해주었다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org...

저번 시간에 이어 이번에는 Bootstrap 을 이용하여 페이지를 꾸미고, 새로운 질문을 등록하는 기능을 개발하였다. 질문을 등록하는 것은 PostMapping 을 이용하여 Form 을 전달받게 되는데, 질문이나 내용을 등록할 때 비어있는 값으로 등록할 수 없도록 처리를 해줘야 한다. 이러한 Validation 을 진행하기 위해서 Spring Boot Validation 라이브러리가 사용된다. 우선 build.gradle 의 dependencies 에 implementation 'org.springframework.boot:spring-boot-starter-validation' 를 추가해준다. 해당 라이브러리를 추가해주면 아래와 같은 어노테이션들을 사용하여 입력 값들을 검증해볼 수 있다. 또, 위 어노..

이번에는 우선 템플릿으로 사용할 HTML 파일을, 템플릿엔진으로 Thymeleaf 를 사용하여 작성해보았다. templates 디렉토리에 question_list.html 이라는 이름의 파일을 생성하고, 컨트롤러와 해당 파일을 아래와 같이 작성하였다. Controller package com.springboot.study.controller; import com.springboot.study.entity.Question; import com.springboot.study.repository.QuestionRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.s..

저번 시간에는 JPA, ORM 활용을 위해 엔티티를 생성해두었다. 하지만 Entity 만으로는 데이터베이스에 데이터를 저장하거나 조회할 수 없다. 데이터 처리를 위해서는 실제 DB 와 연동하는 JDBC Repository 가 필요하다. Repository 는 Entity 에 의해 생성된 DB 테이블에 접근하는 메서드들 (e.g., findAll, save 등) 을 사용하기 위한 인터페이스이다. 데이터 처리를 위해서는 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD 가 필요한데, 이 때 이러한 CRUD 를 어덯게 처리할지 정의하는 계층이 바로 Repository 이다. 아래와 같이 Question 을 위한 Repository 코드를 작성한다. package com.springboot.study.re..

Spring Boot 는 웹 프로그램을 쉽고 빠르게 만들 수 있도록 도와주는 웹 프레임워크이다. Spring Boot 는 장점이 많은 프레임워크라고 한다. 우선 보안 기능이 기본적으로 어느정도 되어있는 튼튼한 웹 프레임워크라고 한다. SQL 인젝션(악의적인 SQL 주입 공격), XSS(Cross-Site Scripting)(자바스크립트 삽입 공격), CSRF(Cross-Site Request Forgery)(위조된 요청 공격), Click Jacking(사용자의 의도하지 않은 클릭 유도) 과 같은 보안 공격을 기본적으로 막아준다. 또한 로그인, 페이징 등 많은 기본 기능들이 내장되어있다. 뿐만 아니라, Spring Boot 는 WAS 가 따로 필요없다. Spring Boot 대신 Spring 만 사용하여..