You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 스프링 부트 프로젝트 예제 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.Experience-Porthcawl.com team, along with other related topics such as: 스프링 부트 프로젝트 예제 스프링부트 프로젝트 주제, 스프링 부트 웹사이트 만들기, 간단한 스프링 프로젝트, Spring boot 예제 소스, 스프링부트 프로젝트 추천, Spring-Boot Example GitHub, 스프링부트 프로젝트 구조, 스프링 간단한 회원가입
Spring Boot) Spring Boot 프로젝트 예제로 기초 이해하기 / Building an Application with Spring Boot
- Article author: seungyooon.tistory.com
- Reviews from users: 25665 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about Spring Boot) Spring Boot 프로젝트 예제로 기초 이해하기 / Building an Application with Spring Boot IntelliJ IDEA CE; Mac OS; JDK 1.8; Gradle; + intelliJ에서 스프링 부트 프로젝트를 시작하는 방법은 생략할 수 있도록 git 에서 예제를 clone해서 … …
- Most searched keywords: Whether you are looking for Spring Boot) Spring Boot 프로젝트 예제로 기초 이해하기 / Building an Application with Spring Boot IntelliJ IDEA CE; Mac OS; JDK 1.8; Gradle; + intelliJ에서 스프링 부트 프로젝트를 시작하는 방법은 생략할 수 있도록 git 에서 예제를 clone해서 … Spring Boot 프로젝트 예제로 기초 이해하기 spring boot 동작 방식을 이해하기 위해 공식 사이트에서 제공한 가이드를 따라 연습한 내용을 정리한 자료입니다. Building an Application with Spring Boot this gu..
- Table of Contents:
Spring Boot 프로젝트 예제로 기초 이해하기
References
태그
‘웹 개발Spring Boot’ Related Articles
티스토리툴바
Spring Boot 웹 프로젝트 만들기
- Article author: offbyone.tistory.com
- Reviews from users: 14859 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about Spring Boot 웹 프로젝트 만들기 Spring Boot를 사용하여 웹 프로젝트를 만들고, 간단한 웹페이지를 출력하는 예제를 해보겠습니다. 스프링 부트는 한번도 해본적이 없는데, … …
- Most searched keywords: Whether you are looking for Spring Boot 웹 프로젝트 만들기 Spring Boot를 사용하여 웹 프로젝트를 만들고, 간단한 웹페이지를 출력하는 예제를 해보겠습니다. 스프링 부트는 한번도 해본적이 없는데, … Spring Boot를 사용하여 웹 프로젝트를 만들고, 간단한 웹페이지를 출력하는 예제를 해보겠습니다. 스프링 부트는 한번도 해본적이 없는데, 여기저기 글들을 읽다보면 스프링부트가 많이 쓰이고 있는 것 같았습니..
- Table of Contents:
태그
댓글14
공지사항
최근글
인기글
최근댓글
태그
티스토리툴바
코딩트리
- Article author: veneas.tistory.com
- Reviews from users: 40836 Ratings
- Top rated: 4.4
- Lowest rated: 1
- Summary of article content: Articles about 코딩트리 1.1. 프로젝트 정의. 다음과 같이 정의합니다. Project. Gradle Project. Language. Java. Spring BOOT. …
- Most searched keywords: Whether you are looking for 코딩트리 1.1. 프로젝트 정의. 다음과 같이 정의합니다. Project. Gradle Project. Language. Java. Spring BOOT. 목차 0. 환경 m1 macbook IntelliJ IDEA(m1) – 202102 java 11(AdoptOpenJDK-11.0.11) 자바를 설치하지 않았다면 아래의 링크를 활용해주세요. https://veneas.tistory.com/entry/WindowsJAVAJDK-설치 https://ven..
- Table of Contents:
네비게이션
[코드로 배우는 스프링 부트] 1 SpringBoot 프로젝트 생성0 환경
1 Spring Boot 프로젝트 생성
2 Spring Boot 열기(IntelliJ)
3 IntelliJ 설정
4 Spring Boot 실행
5 빌드하고 실행하기
참고 강의
사이드바
검색
티스토리툴바
31. [springboot] Spring boot 기초 회원가입 예제 v2.0
- Article author: dkyou.tistory.com
- Reviews from users: 13205 Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about 31. [springboot] Spring boot 기초 회원가입 예제 v2.0 어느덧 개발자로서는 2년차를 향해 달려가고 있습니다. 다양한 프로젝트를 경험하고, 여기저기서 주워들은 지식을 활용해서 더 깊게 정리하고 싶은 마음이 … …
- Most searched keywords: Whether you are looking for 31. [springboot] Spring boot 기초 회원가입 예제 v2.0 어느덧 개발자로서는 2년차를 향해 달려가고 있습니다. 다양한 프로젝트를 경험하고, 여기저기서 주워들은 지식을 활용해서 더 깊게 정리하고 싶은 마음이 … 1. 서론 회원가입v1.0 포스팅을 쓴지 6개월이 지났습니다. 어느덧 개발자로서는 2년차를 향해 달려가고 있습니다. 다양한 프로젝트를 경험하고, 여기저기서 주워들은 지식을 활용해서 더 깊게 정리하고 싶은 마음..
- Table of Contents:
1 서론
2 본론
태그
관련글
댓글0
공지사항
최근글
인기글
최근댓글
태그
전체 방문자
티스토리툴바
spring boot 예제 – 웹 프로젝트 만들기 – /* No Comment */
- Article author: hyeonguj.github.io
- Reviews from users: 15619 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about spring boot 예제 – 웹 프로젝트 만들기 – /* No Comment */ spring boot 예제. spring boot 를 이용하여 웹페이즈를 만드는 샘플 프로젝트를 소개하려한다. 작업한 소스코드 예시는 github에 공유하고있습니다. …
- Most searched keywords: Whether you are looking for spring boot 예제 – 웹 프로젝트 만들기 – /* No Comment */ spring boot 예제. spring boot 를 이용하여 웹페이즈를 만드는 샘플 프로젝트를 소개하려한다. 작업한 소스코드 예시는 github에 공유하고있습니다.
- Table of Contents:
사용법
프로젝트 생성하기
선택하기
Dependencies
압축 해제
IDE
첫 페이지 만들기
실행해보기
Spring Boot | 웹 프로젝트 만들기 (Thymeleaf, Jar, Gradle, Eclipse)
- Article author: kitty-geno.tistory.com
- Reviews from users: 19042 Ratings
- Top rated: 4.4
- Lowest rated: 1
- Summary of article content: Articles about Spring Boot | 웹 프로젝트 만들기 (Thymeleaf, Jar, Gradle, Eclipse) Spring Boot 웹 프로젝트 만들기. # Step. 프로젝트 생성; Thymeleaf(Template Engine) 설정; Controller, html 생성; 서버 실행; 테스트. …
- Most searched keywords: Whether you are looking for Spring Boot | 웹 프로젝트 만들기 (Thymeleaf, Jar, Gradle, Eclipse) Spring Boot 웹 프로젝트 만들기. # Step. 프로젝트 생성; Thymeleaf(Template Engine) 설정; Controller, html 생성; 서버 실행; 테스트. ▶ Spring Boot 웹 프로젝트 만들기 # Step 프로젝트 생성 Thymeleaf(Template Engine) 설정 Controller, html 생성 서버 실행 테스트 1. New > Project… 2. 프로젝트 설정 # 설정에 대한 설명 이름 설명 Servi..
- Table of Contents:
▶ Spring Boot 웹 프로젝트 만들기
# 설정에 대한 설명
태그
관련글
댓글0
전체 방문자
최근글
인기글
티스토리툴바
[Spring] 스프링 부트(Spring boot)로 웹 프로젝트 만들기
- Article author: needneo.tistory.com
- Reviews from users: 8719 Ratings
- Top rated: 3.6
- Lowest rated: 1
- Summary of article content: Articles about [Spring] 스프링 부트(Spring boot)로 웹 프로젝트 만들기 스프링부트(Springboot)로 프로젝트를 시작하기 위해서는 우선 프로젝트가 어떤 성격을 띄었는지를 알고, 해당 성격에 맞는 설정을 한 후 Generate를 … …
- Most searched keywords: Whether you are looking for [Spring] 스프링 부트(Spring boot)로 웹 프로젝트 만들기 스프링부트(Springboot)로 프로젝트를 시작하기 위해서는 우선 프로젝트가 어떤 성격을 띄었는지를 알고, 해당 성격에 맞는 설정을 한 후 Generate를 … 스프링부트(Springboot)로 프로젝트를 시작하기 위해서는 우선 프로젝트가 어떤 성격을 띄었는지를 알고, 해당 성격에 맞는 설정을 한 후 Generate를 하는 방법이 있다. 예를 들어 프로젝트가 웹개발을 해야 하고..
- Table of Contents:
Header Menu
Main Menu
[Spring] 스프링 부트(Spring boot)로 웹 프로젝트 만들기스프링 사이트 부트 설정화면
STS(이클립스) 부트 설정
웹 프로젝트 실행
‘LanguageSpring’ 관련 글
Sidebar – Right
Sidebar – Footer 1
Sidebar – Footer 2
Sidebar – Footer 3
Copyright © 네오가 필요해 All Rights Reserved
Designed by JB FACTORY
티스토리툴바
꾸준히 성장하는 개발자스토리
- Article author: ssdragon.tistory.com
- Reviews from users: 5020 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about 꾸준히 성장하는 개발자스토리 최근에는 Gradle로 많이 쓰는 추세이다. Language. 프로젝트에 쓸 프로그래밍 언어 선택. Spring Boot. 스프링 부트 버전을 선택. Project Metadata. …
- Most searched keywords: Whether you are looking for 꾸준히 성장하는 개발자스토리 최근에는 Gradle로 많이 쓰는 추세이다. Language. 프로젝트에 쓸 프로그래밍 언어 선택. Spring Boot. 스프링 부트 버전을 선택. Project Metadata. 실전! 스프링 부트와 JPA 활용 1 을 보면서 프로젝트를 진행한다. 먼저 스프링 부트의 프로젝트 생성 방법부터 알아보자. 사전 준비물 Java 11 IDE(통합개발환경) : IntelliJ 또는 Eclipse 설치 스프링 부트 프로..꾸준히 성장하는 개발자스토리입니다.
- Table of Contents:
스프링부트 프로젝트 생성
사전 준비물
스프링 부트 프로젝트를 만드는 방법은 2가지
See more articles in the same category here: Top 74 tips update new.
Spring Boot 웹 프로젝트 만들기
반응형
Spring Boot를 사용하여 웹 프로젝트를 만들고, 간단한 웹페이지를 출력하는 예제를 해보겠습니다. 스프링 부트는 한번도 해본적이 없는데, 여기저기 글들을 읽다보면 스프링부트가 많이 쓰이고 있는 것 같았습니다. 실제로 처음 스프링 부트를 사용해서 웹 애플리케이션을 처음 만들어본 상황에서는 장점을 잘 모르겠습니다. 좀 공부해보고 정말 장점이 있는지 확인을 해봐야 할 것 같습니다.
Sprng Boot를 사용해서 웹프로젝트를 만드는 방법은 알아보니 STS(Spring Tool Suite)나 전자정부표준프레임웍크 3.8에는 Spring Boot 프로젝트 템플릿이 있어서 그걸 사용하면 되는데 일반 Eclipse에는 프로젝트 템플릿이 없어서 Spring Initializr 사이트에서 템플릿을 다운로드 받아서 import 하는게 편할것 같습니다.
이 글의 예제는 전자정부표준프레임워크 3.8 개발툴을 사용해서 테스트 했습니다. 전체 예제 소스는 글 하단에 추가 했습니다.
– File -> New -> Other…를 선택해서 참을 띄웁니다. Spring Boot -> Spring Starter Project를 선택합니다.
– 프로젝트 설정 창입니다.
+ Type : Maven – 프로젝트 빌드 및 의존성 관리에 Maven 을 사용합니다. Gradle을 선택할 수도 있습니다.
+ Packaging: Jar – 패키징을 Jar로 하도록 설정합니다. War로도 설정할 수 있습니다.
+ Java Version: 8 – 자바는 1.8을 사용합니다.
+ Language: Javav – 언어는 Java를 사용합니다. Kotlin을 선택할 수도 있습니다.
+ Group com.tistory.offbyone – 자신에게 맞는 값을 넣으면 됩니다. 보통 도메인을 사용합니다.
+ Artifact: spring-boot-test – Mave 아티팩트명인데, 이것이 프로젝트명이 됩니다.
+ Version: 0.0.1-SNAPSHOT – 프로젝트의 버전입니다.
+ Description: Demo project for Spring Boot – 프로젝트 설명입니다.
+ Package : com.tistory.offbyone.springboot – 초기 소스들이 만들어질 기본 패키지명 입니다.
– 프로젝트의 의존성을 설정합니다(필요한 라이브러리들을 선택합니다).
+ Spring Boot Version: 2.1.5 – 현재 최신 버전 입니다.
+ Avaliable: 여기에 검색어를 입력하면 선택할 수 있는 라이브러리들의 리스트를 검색할 수 있습니다. 이 예제에서는 Spring Web Starter 하나만 선택합니다.
– Site Info입니다.
실제로 앞에서 설정한 정보를 가지고, https://start.spring.io 사이트에서 다운 받는것 같습니다.
– 프로젝트 템플릿이 없을때 Spring Initializr 사이트에서 프로젝트 템플릿을 다운 받는 방법입니다.
https://start.spring.io에 들어가서 앞에서 설정 했던 정보들과 같이 프로젝트 정보를 입력합니다.
– 의존성(Dependencies)에 역시 앞에서와 같이 Spring Web Starter를 선택하고 다운로드해서 이클립스에서 import하면 됩니다.
– 프로젝트가 만들어 졌습니다.
그런데 에러가 발생하고 있습니다. pom.xml 파일 첫줄에서 에러라고 표시되고 있습니다.
– 에러를 잡고, 웹 애플리케이션 실행을 위한 의존성을 추가합니다.
+ 앞의 에러는 Spring Boot 2.1.5에 maven-jar-plugin 3.1.2가 사용되고 있는데 뭔가 맞지 않는 것이 있어서 입니다.
에 을 3.1.1로 오버라이드해 줍니다. 1.8 3.1.1 + 웹 애플리케이션 실행을 위한 의존성을 추가합니다.
org.apache.tomcat.embed tomcat-embed-jasper provided – 웹 파일을 위한 폴더를 생성하고, 뷰 리졸버(View Resolver)를 설정합니다.
웹 파일을 위한 폴드를 생성합니다.
+ /src/main/webapp 폴더 만듭니다.
+ /src/main/webapp/WEB-INF 폴더를 만듭니다.
+ /src/main/webapp/WEB-INF/jsp 폴더를 만듭니다.
/src/main/resources/application.properties 파일에 뷰 리졸버를 설정합니다.
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
– 컨트롤러를 만듭니다.
이 테스트용 컨트롤러는 하는 일은 없고 뷰로 바로 넘어가게 되어 있습니다.
package com.tistory.offbyone.springboot.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class WelcomeController { @RequestMapping(“/welcome”) public String welcome() { return “welcome”; } }
– jsp 파일을 생성합니다.
– 애플리케이션을 실행합니다.
프로젝트 생성시 SpringBootTestApplication.java 파일이 생성 되어 있습니다. 이 파일에 마우스 오른쪽 키를 누르고, Run As -> Java Application으로 실행합니다.
– 웹 브라우저로 실행해 봅니다.
컨트롤러에 맵핑되어 있는 URL인 http://localhost:8080/welcome 을 호출합니다.
Spring Boot를 사용해서 간단한 스프링 웹 애플리케이션 프로젝트를 만들어 보았습니다. Spring Boot의 장점이 무엇인지 아직은 잘 모르겠네요. 실제로 간단한 기능을 만들어 보면서 확인해 봐야 겠습니다.
전체 예제 소스:
spring-boot-test.zip 0.06MB
————————
2019-10-07 내용 추가
Spring Boot 애플리케이션은 독립실행이 가능 합니다. 이 글의 예제를 jar파일로 만들어서 실행해 보았습니다. 실행을 다음 명령으로 할 수 있습니다.
C:\> java -jar spring-boot-test-0.0.1-SNAPSHOT.jar
프로그램 실행 후 웹 브라우저로 요청해본 결과 404 not found에러가 발생하였습니다. Spring Boot는 처음이라 이것저건 테스트해본 결과 WEB-INF 폴더에 파일을 넣을 경우 jar로 패키징하여 독립실행할 경우 파일을 찾지 못하는 것 같습니다.
필요한 파일을 src/main/resources 폴더 아래에 넣어서 테스트해본 결과 제대로 실행되었습니다.
아마도 독립실행이 아니라 다른 웹서버에 배포할 수 있도록 war 파일로 만든다면 WEB-INF 폴더도 사용할 수 있을것 같습니다. jar와 war 패키징의 차이점을 좀 더 확인해보고 관련해서 글을 올려 보겠습니다.
반응형
31. [springboot] Spring boot 기초 회원가입 예제 v2.0
728×90
반응형
1. 서론
회원가입v1.0 포스팅을 쓴지 6개월이 지났습니다. 어느덧 개발자로서는 2년차를 향해 달려가고 있습니다.
다양한 프로젝트를 경험하고, 여기저기서 주워들은 지식을 활용해서 더 깊게 정리하고 싶은 마음이 커졌습니다. 그래서 2.0 버전을 만들게 되었습니다.
이번 포스팅 역시 스프링 시큐리티를 이용하여 권한을 부여하고, 회원가입 처리를 하는 간단 예제를 만들어 볼 것입니다.
조금 더 세련된 기술이 적용되었고, v1.0보다 더 쉽게 로직을 따라갈 수 있도록 만들었습니다. 이번 프로젝트에서는 포스팅 겸 프로젝트도 만들어보았습니다. 최신화된 예제 코드는 여기에서 참조가능합니다.
+) 이번 포스팅을 작성하기 위해 저만의 작은 목표를 정해보았습니다. 목표는 아래와 같습니다.
1. @Valid
2. @interface
3. AOP
4. TDD
이 포스팅을 이해한다면?
이 글을 이해하면 간단한 회원가입을 스프링 시큐리티를 이용해서 구현할 수 있습니다.
간단한 MVC 구조를 알고 계신다면 더 편하게 따라오실 수 있습니다.
2. 본론
프로젝트를 생성합니다.
예제의 전체 구조는 다음과 같습니다.
[그림01] 전체 조감도입니다.Spring Boot 2.4.0 을 사용하였고, Java15를 이용하였습니다.
pom.xml
4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.0 com.example demo 0.0.1-SNAPSHOT demo Demo project for Spring Boot 15 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web org.thymeleaf.extras thymeleaf-extras-springsecurity5 org.springframework.boot spring-boot-devtools runtime true com.h2database h2 runtime org.springframework.boot spring-boot-configuration-processor true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.security spring-security-test test javax.validation validation-api 2.0.1.Final org.springframework.boot spring-boot-maven-plugin 도메인 모델링
먼저, 원활한 회원가입을 위해 도메인을 모델링해줍니다.
여기서 주의할 점은 username 부분인데, 시큐리티에서 템플릿과 연동 시 기본으로 제공하는 name 값이 username 이므로 이에 맞추어 줍니다. (스프링 시큐리티를 이용해 커스터마이징 가능합니다.)
+) @EqualsAndHashCode(of=”id”)를 사용했습니다.
연관 관계가 복잡해 질 때, @EqualsAndHashCode에서 서로 다른 연관 관계를 순환 참조하느라 무한 루프가 발생하고, 결국 stack overflow가 발생할 수 있기 때문에 id 값만 주로 사용해줍니다.(출처)
++) @Setter를 사용하지 않는 이유는 값을 함부로 변경하는 것을 방지하기 위해서입니다.
Account.java
package com.example.demo.account; import lombok.*; import javax.persistence.*; import java.util.UUID; @Entity @Getter @Builder @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(of = “id”) public class Account { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = “account_id”) private Long id; private String username; private String password; private String nickname; private boolean remember; }
레파지토리 모델링
엔티티를 바탕으로 repository 클래스를 만들어줍니다.
JpaRepository는 다양한 interface를 제공해주는데, 제가 요즘 가장 많이 사용하고 있는 두 함수를 만들어줍니다.
이름만 봐도 무엇을 Param으로 삼아 처리해줄 것인지 유추해볼 수 있습니다.
AccountRepository.java
package com.example.demo.account; import org.springframework.data.jpa.repository.JpaRepository; public interface AccountRepository extends JpaRepository
{ boolean existsByUsername(String username); Account findByUsername(String username); } 서비스 모델링
서비스 클래스를 만들어 Transaction 처리할 수 있는 환경을 만들어줍니다. @Transactional 어노테이션은 함수가 불의의 사고로 구동 실패 시 Rollback 할 수 있도록 안전장치하는 어노테이션이므로 로직 처리는 여기에서 진행해줍니다.
+) 이 계층은 흔히 ‘비즈니스 로직’이라고 불리웁니다. 엥간한 로직처리는 여기에서 수행해줍니다.
AccountService.java
package com.example.demo.account; import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional @RequiredArgsConstructor public class AccountService implements UserDetailsService { private final AccountRepository accountRepository; private final PasswordEncoder passwordEncoder; public void signUp(SignUpForm signUpForm) { Account account = Account.builder().username(signUpForm.getUsername()) .password(passwordEncoder.encode(signUpForm.getPassword())) .build(); accountRepository.save(account); } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Account account = accountRepository.findByUsername(username); if(account == null){ throw new UsernameNotFoundException(username); } return new UserAccount(account); } }
+) 여기엔 SignUpForm 이라는 DTO 객체가 있습니다. Entity의 변경은 자주 이루어지는 것을 지양합니다. 자주 변경하면, 협업에 혼돈이 올 수 있기 때문입니다. 이를 방지하기 위해 DTO를 만들어 프런트엔드 개발자분이 수행한 name attribute와 이름을 맞춰주고, 백엔드단의 Entity와 매핑하는 작업을 진행하기 위해 DTO를 사용합니다.
SignUpForm.java
package com.example.demo.account; import lombok.Data; import javax.validation.constraints.NotBlank; @Data public class SignUpForm { @NotBlank private String username; private String password; private String nickname; private boolean remember; }
웹 계층 모델링
– 프론트엔드와 직접적으로 관련된 컨트롤러 계층입니다. 직관적이고 쉽게 코드를 짜는 것이 좋습니다.
package com.example.demo.account; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Errors; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PostMapping; import javax.validation.Valid; import java.util.Collections; import java.util.List; @Controller @RequiredArgsConstructor public class AccountController { private final AccountService accountService; private final AccountRepository accountRepository; private final SignUpFormValidator signUpFormValidator; @InitBinder(“signUpForm”) public void initBinder(WebDataBinder webDataBinder){ webDataBinder.addValidators(signUpFormValidator); } @GetMapping(“/sign-up”) public String signUpForm(Model model){ model.addAttribute(“signUpForm”,new SignUpForm()); return “sign-up”; } @PostMapping(“/sign-up”) public String signUpSubmit(@Valid SignUpForm signUpForm, Errors errors, RedirectAttributes attributes){ if(errors.hasErrors()){ return “sign-up”; } attributes.addFlashAttribute(“message”,”회원가입 성공!”); accountService.signUp(signUpForm); return “redirect:/”; } @GetMapping(“/”) public String home(@CurrentUser Account account, Model model){ if(account != null){ model.addAttribute(account); } return “index”; } }
@GetMapping일 때는 간단한 DTO객체를 만들어 sign-up 뷰로 넘기고, @PostMapping 요청으로 받았을 때에는 에러유무를 확인한 후, 회원가입 로직을 수행합니다. 그 후, Flash Message를 담아 초기화면으로 리다이렉트 시켜줍니다.
+) 여기서 추가 구현 할 부분이 두 가지 있습니다. @Valid와 @CurrentUser 입니다.
@Valid
@Valid는 Errors와 함께 다니며, Validator를 상속받아 구현체를 만들어주면 백엔드에서 로직검사를 수행할 수 있습니다. 이를 WebDataBinder로 가져오게 되고, Validator를 추가하기만 하면 끝입니다.
@InitBinder(“signUpForm”) public void initBinder(WebDataBinder webDataBinder){ webDataBinder.addValidators(signUpFormValidator); }
SignUpFormValidator.java
package com.example.demo.account; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.Validator; @Component @RequiredArgsConstructor public class SignUpFormValidator implements Validator { private final AccountRepository accountRepository; @Override public boolean supports(Class> aClass) { return aClass.isAssignableFrom(SignUpForm.class); // 어떤 타입의 인스턴스를 검증을 할 것인가? } // 뭘 검사할 것인가? @Override public void validate(Object o, Errors errors) { SignUpForm signUpForm = (SignUpForm)o; if(accountRepository.existsByUsername(signUpForm.getUsername())){ errors.rejectValue(“username”,”invalid username”,”이미 사용중인 아이디입니다.”); } } }
해당 DTO를 활용하여 validate 로직을 구현해보았습니다. 저는 단순히 아이디가 존재하면, 에러를 반환하도록 하였습니다.
@CurrentUser
@CurrentUser 라는 어노테이션으로 Account 타입을 받고 싶을 때 사용합니다.
package com.example.demo.account; import org.springframework.security.core.annotation.AuthenticationPrincipal; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) // 런타임까지 유지할 수 있도록 합니다. @Target(ElementType.PARAMETER) // 파라메타에만 붙을 수 있도록 합니다. @AuthenticationPrincipal(expression = “#this == ‘anonymousUser’ ? null : account”) public @interface CurrentUser { }
@AuthenticationPrincipal 어노테이션은 스프링 시큐리티에서 사용하는 어노테이션입니다. 로그인 이전에는 anonymousUser라는 String 타입이고, 인증되었다면 account를 받을 수 있도록 합니다. 하지만 시큐리티에서는 account라는 property는 존재하지 않습니다. 기본적을 제공해주는 것은 username, password, grant 정도인데요. 이를 커스텀하기 위한 어뎁터를 구현해줍니다.
UserAccount.java
package com.example.demo.account; import lombok.Getter; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import java.util.List; // @CurrentUser와 연관된 객체 @Getter public class UserAccount extends User { private Account account; public UserAccount(Account account) { super(account.getUsername(), account.getPassword(), List.of(new SimpleGrantedAuthority(“ROLE_USER”))); this.account = account; } }
스프링 시큐리티가 지원하는 유저정보(extends User)와, 도메인에서 다루는 유저정보(Account)의 차이를 매꾸어줍니다.
뷰 꾸며주기
뷰 페이지를 꾸며줍니다. 프론트엔드는 부트스트랩을 이용합니다. 디자인적 감각이 없어도 가성비넘치는(?) 디자인적 감각을 이끌어주기 때문입니다.
index.html
대문을 장식하는 인덱스 페이지를 만들어주도록 합니다. 단순하게 회원가입과 로그인만 가능한 마이크로 서비스입니다.
[그림02] 인덱스페이지
멋지진 않지만 나름 느낌있는 첫 화면이 완성되었습니다.
sign-up.html
회원가입 폼도 만들어줍니다. 이메일, 패스워드, 닉네임을 받도록 했습니다.
[그림03] 회원가입 페이지
Sign Up
Please fill in this form to create an account.
이메일이 중복되지 않는다면, 가입이 성공했기 때문에 다음과 같은 화면을 볼 수 있습니다.
[그림04] 회원가입 성공 메세지 띄우기또한, Validator를 구현했기 때문에 똑같은 이메일로 가입하려 했을 때 다음과 같은 창을 볼 수 있습니다.
[그림05] 회원가입 실패 메세지 띄우기3. 결론
간단하게 회원가입을 구현해보았습니다. 사실 여기까지는 스프링 시큐리티도 제대로 쓰지 않았고(쓰긴 했지만,,) 일반적인 회원 가입 로직입니다. (한번에 쓰려했는데 너무 양이 많네유,,) 다음 포스팅에서 이어서 로그인을 구현해보겠습니다.
728×90
반응형
[Spring] 스프링 부트(Spring boot)로 웹 프로젝트 만들기
스프링부트(Springboot)로 프로젝트를 시작하기 위해서는 우선 프로젝트가 어떤 성격을 띄었는지를 알고, 해당 성격에 맞는 설정을 한 후 Generate를 하는 방법이 있다. 예를 들어 프로젝트가 웹개발을 해야 하고 Rest 형태로 통신을 하는 것이 존재하며 MongoDB를 호출한다라는 설정을 넣게 되면 그에 맞게 세팅을 이미 한 프로젝트를 내려받아서 사용하는 것이다.
스프링부트로 웹프로젝트 만들기
스프링 사이트 부트 설정화면
스프링부트 initializr, start.spring.io
보통 spring의 웹사이트에서 이런 작업을 진행하지만 이클립스에서 스프링 툴을 설치했거나 STS(Spring Tool Suite)를 사용해서 웹프로젝트를 만들게 되면, 이 작업을 이클립스 내부에서 할 수 있다.
STS(이클립스) 부트 설정
STS나 스프링이 애드온된 이클립스를 실행하면 File -> New를 선택할 시 이와같이 Spring Starter Project라는 것이 보일 것이다. 이 메뉴는 스프링부트로 프로젝트를 생성한다는 것이니 해당 메뉴를 선택한다.
스프링스타터 화면
그러면 이와 같이 New Spring Starter Project라는 화면이 뜨고 여기에 맞는 설정들을 입력한다.
위 화면은 일단 블로그 주소를 기반으로 group과 package를 만들었고, 프로젝트는 MyFirstWeb이라고 지었으며, Java Version은 8, Type은 Maven이 아니라 Gradle, Package는 War로 선택하였다.
DI 설정
기본 세팅이 완료되면, 이제 의존성(Dependency)들을 설정해야 한다. 본 포스팅은 그냥 웹프로젝트를 만들어 보는 것을 목적으로 하고 있기에 Available에 web을 선택하였고, 그 밑에 Web 메뉴에 있는 Spring Web을 체크하였다. 체크를 하는 순간 우측에 있는 Selected에 선택한 Dependency가 뜨게 된다.
Dependency를 모두 마무리 하였다면 Finish를 선택하여 여때까지 만들어진 설정을 토대로 프로젝트를 만들도록 한다.
웹 프로젝트 실행
프로젝트 시작
설정을 완료 한다면 위와 같이 Import Getting Started Content가 뜨면서 설정들을 받으며 세팅을 하는 작업을 자동으로 한다.
아직 완료가 되지 않는 상태에서 왼쪽 상단에 있는 package Explorer에 있는 MyFirstWeb은 아무런 스프링 표시가 없다가도
설정이 마무리되면 프로젝트명 우측에 [boot]라고 뜨게 된다.
설정이 완료되었으면, 왼쪽 하단의 Boot Dashboard에 있는 프로젝트를 선택한 후, 위 이미지에 보이는 실행 버튼을 클릭한다.
실행중인 화면
실행버튼을 누르면 내장된 톰캣에 프로젝트를 Deploy하게 된다. Deploy를 하였다면 대시보드에 있는 프로젝트 명 우측에 포트번호가 보이게 된다.
이제 실행된 화면을 보기 위해서 위에 있는 브라우저 버튼을 선택한다. 이렇게 브라우저를 실행해도 되고 혹은 브라우저를 직접 띄우고 localhost:8080을 입력하여 화면을 실행해볼 수 있다.
에러 화면
위와 같은 화면이 나왔다면 성공적으로 된 것이다. 아직 아무런 내용을 작성하지 않았기에 에러가 뜨는 것이며 이제 개발을 할 준비가 끝난 상태이다.
반응형
So you have finished reading the 스프링 부트 프로젝트 예제 topic article, if you find this article useful, please share it. Thank you very much. See more: 스프링부트 프로젝트 주제, 스프링 부트 웹사이트 만들기, 간단한 스프링 프로젝트, Spring boot 예제 소스, 스프링부트 프로젝트 추천, Spring-Boot Example GitHub, 스프링부트 프로젝트 구조, 스프링 간단한 회원가입