당신은 주제를 찾고 있습니까 “스프링 부트 프로젝트 예제 – 스프링부트(springboot)로 만드는 Restful Api [센치한개발자]“? 다음 카테고리의 웹사이트 https://you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: https://you.tfvp.org/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 센치한개발자 이(가) 작성한 기사에는 조회수 19,791회 및 좋아요 290개 개의 좋아요가 있습니다.
스프링 부트 프로젝트 예제 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 스프링부트(springboot)로 만드는 Restful Api [센치한개발자] – 스프링 부트 프로젝트 예제 주제에 대한 세부정보를 참조하세요
#센치한개발자 #서버개발 #springboot
▶︎ 센치한개발자 강의 구독하기 : https://goo.gl/wPYaXG
스프링 부트(springboot)로 만드는 Restful Api
*. 이번 방송은 아주 간단하게 스프링 부트를 통해 Restful Api 프로젝트를 만드는 방법을 알아봅니다~
스프링 부트 프로젝트 예제 주제에 대한 자세한 내용은 여기를 참조하세요.
Spring Boot 프로젝트 예제로 기초 이해하기 – seungyoon’s
IntelliJ IDEA CE; Mac OS; JDK 1.8; Gradle; + intelliJ에서 스프링 부트 프로젝트를 시작하는 방법은 생략할 수 있도록 git 에서 예제를 clone해서 …
Source: seungyooon.tistory.com
Date Published: 9/28/2021
View: 7870
θ Spring Boot 예제1 (회원관리)
프로젝트 생성 & 회원 가입 & 로그인 정리! 사용 IDE : IntelliJ IDEA Ultimate; 사용 DB : MySQL; 사용 언어 & SDK : Java & Amazon correto 11 …
Source: velog.io
Date Published: 11/2/2021
View: 1699
[코드로 배우는 스프링 부트] 1. SpringBoot 프로젝트 생성
1.1. 프로젝트 정의. 다음과 같이 정의합니다. Project. Gradle Project. Language. Java. Spring BOOT.
Source: veneas.tistory.com
Date Published: 8/1/2022
View: 9475
Spring Boot 웹 프로젝트 만들기 – 쉬고 싶은 개발자
Spring Boot를 사용하여 웹 프로젝트를 만들고, 간단한 웹페이지를 출력하는 예제를 해보겠습니다. 스프링 부트는 한번도 해본적이 없는데, …
Source: offbyone.tistory.com
Date Published: 11/11/2021
View: 6226
31. [springboot] Spring boot 기초 회원가입 예제 v2.0
어느덧 개발자로서는 2년차를 향해 달려가고 있습니다. 다양한 프로젝트를 경험하고, 여기저기서 주워들은 지식을 활용해서 더 깊게 정리하고 싶은 마음이 …
Source: dkyou.tistory.com
Date Published: 1/1/2021
View: 7745
spring boot 예제 – 웹 프로젝트 만들기
spring boot 예제. spring boot 를 이용하여 웹페이즈를 만드는 샘플 프로젝트를 소개하려한다. 작업한 소스코드 예시는 github에 공유하고있습니다.
Source: hyeonguj.github.io
Date Published: 8/10/2021
View: 2574
Spring Boot | 웹 프로젝트 만들기 (Thymeleaf, Jar, Gradle …
Spring Boot 웹 프로젝트 만들기. # Step. 프로젝트 생성; Thymeleaf(Template Engine) 설정; Controller, html 생성; 서버 실행; 테스트.
Source: kitty-geno.tistory.com
Date Published: 11/2/2022
View: 443
[Spring] 스프링 부트(Spring boot)로 웹 프로젝트 만들기
스프링부트(Springboot)로 프로젝트를 시작하기 위해서는 우선 프로젝트가 어떤 성격을 띄었는지를 알고, 해당 성격에 맞는 설정을 한 후 Generate를 …
Source: needneo.tistory.com
Date Published: 12/17/2021
View: 738
스프링 부트로 게시판 만들기1 – 프로젝트 생성 – 오토봇팩토리
스프링 부트는 2014년부터 개발된 스프링의 하위 프로젝트 중 하나입니다. 단독으로 실행이 가능하고(stand-alone), 제품 수준의(production-grade) …
Source: private.tistory.com
Date Published: 2/8/2022
View: 5913
[SpringBoot] Springboot 프로젝트 만들어보기
하기 포스팅은 “스프링부트 시작하기(김인우 저)” 책을 공부하며 적은 포스팅입니다. SpringBoot의 장점. Spring 프레임워크는 웹 어플리케이션에서 사용 …
Source: earth-95.tistory.com
Date Published: 7/4/2021
View: 7958
주제와 관련된 이미지 스프링 부트 프로젝트 예제
주제와 관련된 더 많은 사진을 참조하십시오 스프링부트(springboot)로 만드는 Restful Api [센치한개발자]. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 스프링 부트 프로젝트 예제
- Author: 센치한개발자
- Views: 조회수 19,791회
- Likes: 좋아요 290개
- Date Published: 2020. 6. 7.
- Video Url link: https://www.youtube.com/watch?v=uOMdRWKD4Gc
Spring Boot) Spring Boot 프로젝트 예제로 기초 이해하기 / Building an Application with Spring Boot
메인 메소드는 애플리케이션 시작 지점으로 자바 컨벤션을 따릅니다. 이 메소드에서 SpringApplication 클래스의 run 메소드를 호출하여 자동으로 설정된 톰캣 등의 웹 서버가 시작되고, 애플리케이션이 실행되게 하는 역할을 위임합니다.
θ Spring Boot 예제1 (회원관리)
프로젝트 생성 & 회원 가입 & 로그인 정리! 사용 IDE : IntelliJ IDEA Ultimate
사용 DB : MySQL
사용 언어 & SDK : Java & Amazon correto 11
thymeleaf 사용을 가급적 줄인 예제입니다.
정리본입니다 참고용으로만 봐주세요 😀
회원가입부터 로그인까지 정리본
프로젝트 생성
Project Name : MemberProject
pakage : com.icia.member
dependency는 아래와 같이 설정.
설정 후 생성
생성 후 가장 먼저 할 설정
Annotation Processors에 들어가 Enable anootation processing 체크 후 Apply
프로젝트마다 개별 설정이기 때문에 프로젝트를 생성할 때 마다 이를 설정해줘야함.
역할 : 어노테이션이 역할을 수행할 수 있게 해줌.
yml파일 설정
주의할점!!
들여쓰기는 반드시 지켜주세요. 오류납니다.
아래와 같이 들여쓰기를 해줘야합니다.
server : port : 8093 spring : datasource : driver-class-name : com.mysql.cj.jdbc.Driver url : jdbc : mysql : //localhost : 3306/springbootclass ? serverTimezone=Asia/Seoul &characterEncoding =UTF – 8 username : bootuser password : 1234 thymeleaf : cache : false jpa : database-platform : org.hibernate.dialect.MySQL5InnoDBDialect show-sql : true hibernate : ddl-auto : update
build.gradle 설정
프로젝트 생성할 때 추가하지 못한 Dependency를 추가할 수 있게 해주는 파일
Dependency 추가 후 우측 팝업에 코끼리 모양을 눌러줘야 추가한 Dependency가 적용됨.
plugins { id ‘org.springframework.boot’ version ‘2.6.2’ id ‘io.spring.dependency-management’ version ‘1.0.11.RELEASE’ id ‘java’ } group = ‘com.icia’ version = ‘0.0.1-SNAPSHOT’ sourceCompatibility = ’11’ configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral ( ) } dependencies { implementation ‘org.springframework.boot:spring-boot-starter-thymeleaf’ implementation ‘org.springframework.boot:spring-boot-starter-web’ implementation ‘org.springframework.boot:spring-boot-starter-validation’ implementation ‘org.springframework.boot:spring-boot-starter-data-jpa’ runtimeOnly ‘mysql:mysql-connector-java’ compileOnly ‘org.projectlombok:lombok’ annotationProcessor ‘org.projectlombok:lombok’ testImplementation ‘org.springframework.boot:spring-boot-starter-test’ } test { useJUnitPlatform ( ) }
기본 주소 (index.html) 처리
src/java 안에 controller pakage 생성 & MainController 생성
MainController에 기본주소를 처리하는 메서드 생성
@GetMapping ( “/” ) public String index ( ) { return “index” ; }
templeates 에 index.html 생성 및 회원가입, 로그인 주소 생성
< html lang = " en " > < head > < meta charset = " UTF-8 " > < title > Title title > head > < body > < h2 > index.html h2 > < a href = " /member/save " > 회원가입 a > < a href = " /member/login " > 로그인 a > body > html >
Controller 생성
/member/*를 처리할 Controller 생성
회원가입 페이지 요청 주소 및 저장 주소 생성
@GetMapping ( “save” ) public String saveForm ( ) { return “member/save” ; }
Repository
이제 각종 DB처리를 해주는 Repository를 생성합니다.
Repository는 Interface Class로 만들고 JpaRepository를 상속받는 클래스로 설정합니다.
주의할점으로 Repository에는 @Repository를 붙이지 않게 주의합시다.
public interface MemberRepository extends JpaRepository < MemberEntity , Long > { }
JPA는 maven클래스의 mybatis와 비슷한 역할을 수행하는 Java Class입니다.
mybatis처럼 직접 쿼리문을 작성하지 않아도 JpaRepository에 각종 쿼리문이 포함되어있어 호출만 해도 각종 CRUD를 처리할 수 있습니다.
회원가입 처리
templates 폴더 안에 member라는 폴더 생성
member 폴더 안에 save.html 생성
save.html
회원가입을 받는 html
< html lang = " en " > < head > < meta charset = " UTF-8 " > < title > Title title > head > < body > < h2 class = " mt-3 mb-3 " > 회원가입 h2 > < form action = " /member/save " method = " post " > < input type = " text " name = " memberEmail " placeholder = " 이메일 " > < input type = " password " name = " memberPassword " placeholder = " 비밀번호 " > < input type = " text " name = " memberName " placeholder = " 이름 " > < input type = " submit " value = " 회원가입 " > form > body > html >
Save용 DTO 생성
@Data @NoArgsConstructor @AllArgsConstructor public class MemberSaveDTO { private String memberEmail ; private String memberPassword ; private String memberName ; }
정보 저장 구조
순서 html에서 Controller로 정보 전달 Controller에서 정보를 받은 후 Service로 전달 Service에서 Entity로 정보 전달 Entity에서 DTO타입을 Entity타입으로 변환 후 Service에 전달 Service에서 받은 후 Repository(JPA)로 전달 처리 완료 후 지정한 메서드 or 페이지로 이동
Controller
@PostMapping ( “save” ) public String save ( @ModelAttribute MemberSaveDTO memberSaveDTO ) { Long memberId = ms . save ( memberSaveDTO ) ; return “member/login” ; }
Service
service pakage 생성 후 Service와 ServiceImpl 생성
Service : Interface Class로 생성
ServiceImpl : 일반 Java Class로 생성 및 implements 후 @Service 붙이기.
Service (Interface)
public interface MemberService { Long save ( MemberSaveDTO memberSaveDTO ) ; }
ServiceImpl
@Service @RequiredArgsConstructor public class MemberServiceImpl implements MemberService { private final MemberRepository mr ; @Override public Long save ( MemberSaveDTO memberSaveDTO ) { MemberEntity memberEntity = MemberEntity . saveMember ( memberSaveDTO ) ; return mr . save ( memberEntity ) . getId ( ) ; } }
Entity
entity pakage 생성 & Entity Class 생성
Entity는 Java Class입니다. 주의해주세요.
Entity의 역할 : JPA에 정보를 보내거나 받기 위해 사용.
테이블명 및 컬럼을 선언하는 곳, 또한 데이터 타입을 Entity로 변환을 하는 곳.
@Entity @Getter @Setter @Table ( name = “member_table” ) public class MemberEntity { @Id @GeneratedValue ( strategy = GenerationType . IDENTITY ) @Column ( name = “member_id” ) private Long id ; @Column ( length = 50 , unique = true ) private String memberEmail ; @Column ( length = 20 ) private String memberPassword ; @Column ( ) private String memberName ; public static MemberEntity saveMember ( MemberSaveDTO memberSaveDTO ) { MemberEntity memberEntity = new MemberEntity ( ) ; memberEntity . setMemberEmail ( memberSaveDTO . getMemberEmail ( ) ) ; memberEntity . setMemberPassword ( memberSaveDTO . getMemberPassword ( ) ) ; memberEntity . setMemberName ( memberSaveDTO . getMemberName ( ) ) ; return memberEntity ; } }
위 코드를 잘 따라왔다면 DB에 데이터가 잘 들어간 것을 확인할 수 있습니다.
thymeleaf를 사용한다면 공백체크 & 아이디중복체크도 수행할 수 있지만 여기서는 다루지 않고 차후에 다루겠습니다. 그럼 로그인으로 넘어가겠습니다 😀
login 처리
login을 만들어봅시다.
Controller
login 주소를 처리하는 메서드 생성
@GetMapping ( “login” ) public String loginForm ( ) { return “member/login” ; }
login.html 생성
< html lang = " en " > < head > < meta charset = " UTF-8 " > < title > Title title > head > < body > < h2 > login.html h2 > < form action = " /member/login " method = " post " > < input type = " text " name = " memberEmail " placeholder = " 이메일을 입력하세요 " > < input type = " text " name = " memberPassword " placeholder = " 비밀번호를 입력하세요 " > < input type = " submit " value = " 로그인 " > form > body > html >
Login용 DTO 생성
@Data @NoArgsConstructor @AllArgsConstructor public class MemberLoginDTO { private String memberEmail ; private String memberPassword ; }
로그인 저장 구조
순서 login.html에서 Controller로 정보 전달 Controller에서 정보를 받은 후 Service로 정보 전달 Service에서 Entity로 정보 전달 Entity에서 DTO타입을 Entity 타입으로 변환 후 Service에 전달 Service에서 받은 후 Repository(JPA)로 전달 JPA에서 처리 후 Service에 전달 Service에서 받은 후 null 체크 및 비밀번호 일치여부 확인 처리 결과를 Controller로 전달 사용자가 지정한 메서드 or 주소로 이동
Controller
@PostMapping ( “login” ) public String login ( @ModelAttribute MemberLoginDTO memberLoginDTO , HttpSession session ) { if ( ms . login ( memberLoginDTO ) ) { session . setAttribute ( LOGIN_EMAIL , memberLoginDTO . getMemberEmail ( ) ) ; return “redirect:/member/” ; } else { return “member/login” ; } }
Service
Service
boolean login ( MemberLoginDTO memberLoginDTO ) ;
ServiceImple
jpa에서 지원하는 메서드 중 findBy~ 를 사용하므로 메서드 이름을 멋대로 바꾸면 오류생김.
findAll, findBy~ 등이 있음.
findBy~ : ~인 데이터를 찾겠다 라는 뜻으로 뒤에 각 컬럼을 넣어 사용할 수 있다.
@Override public boolean login ( MemberLoginDTO memberLoginDTO ) { MemberEntity memberEntity = mr . findByMemberEmail ( memberLoginDTO . getMemberEmail ( ) ) ; if ( memberEntity != null ) { if ( memberEntity . getMemberPassword ( ) . equals ( memberLoginDTO . getMemberPassword ( ) ) ) { return true ; } else { return false ; } } else { return false ; } }
Repository
Repository는 기본적으로 메서드를 생성할 일이 거의 없습니다.
하지만 PK가 아닌 값으로 CRUD를 수행하기 위해선 Repository에 메서드를 생성해줘야 합니다.
아까 만든 Repository는 Interface Class이므로 추상메서드로 작성해야합니다.
MemberEntity findByMemberEmail ( String memberEmail ) ;
목차
0. 환경
m1 macbook
IntelliJ IDEA(m1) – 202102
java 11(AdoptOpenJDK-11.0.11)
자바를 설치하지 않았다면 아래의 링크를 활용해주세요. https://veneas.tistory.com/entry/WindowsJAVAJDK-설치 https://veneas.tistory.com/entry/Linux-CentOS7-원하는-특정-버전-Javajdk-설치하기-wget
1. Spring Boot 프로젝트 생성
https://start.spring.io 에 접속해 필요한 환경에 맞게 Spring Boot 프로젝트를 정의해 다운로드합니다.
1.1. 프로젝트 정의
다음과 같이 정의합니다.
Project Gradle Project
Language Java
Spring BOOT 2.5.5 (미정식 버전을 제외하고 최신 버전을 사용하면 됩니다.)
Project Metadata Group: hello (원하는 대로 지정해도 됩니다.) Artifact: hello-spring (원하는 대로 지정해도 됩니다.) Name (그대로 사용) Description (그대로 사용) Package Name (그대로 사용) Packaging: Jar Java: 11
Dependencies Spring Web Thymeleaf(html 웹 템플릿 엔진)
1.2. 프로젝트 다운로드
GENERATE 클릭해 다운로드합니다.
다운로드 후 압축도 해제해 둡니다.
Spring page
2. Spring Boot 열기(IntelliJ)
2.1. Spring Boot Project 열기(IntelliJ)
압축을 풀어 둔 Spring Boot Project를 IntelliJ로 열어줍니다.
라이브러리 다운로드가 필요해 시간이 좀 걸립니다.
IntelliJ Project Open
2.2. Spring Boot Project 구조
Project Tree
주요 디렉터리 및 파일
[.idea]: 인텔리제이가 사용하는 설정 파일 디렉터리 [gradle]: gradle 관련 디렉터리 [src/main]: 메인 디렉터리 [src/main/java]: 자바 파일이 있는 디렉터리 [src/main/resource]: xml properties등과 같은 설정 파일과 html 등이 있는 디렉터리 [src/test]: 테스트 디렉터리(따로 테스트 경로가 있는 걸로 봐서 테스트 소스는 매우 중요하다는 것을 알 수 있습니다.) [build.gradle]: gradle 파일로 프로젝트의 버전 설정하고 라이브러리를 다운로드할 수 있는 파일입니다. [.gitignore]: git 관련 파일build.gradle 파일 내용
plugins { id ‘org.springframework.boot’ version ‘2.5.5’ id ‘io.spring.dependency-management’ version ‘1.0.11.RELEASE’ id ‘java’ } group = ‘hello’ version = ‘0.0.1-SNAPSHOT’ sourceCompatibility = ’11’ //파일을 다운로드 받는 저장소 repositories { mavenCentral() } //사용할(다운로드 필요한) 의존성 라이브러리 파일 dependencies { implementation ‘org.springframework.boot:spring-boot-starter-thymeleaf’ implementation ‘org.springframework.boot:spring-boot-starter-web’ testImplementation ‘org.springframework.boot:spring-boot-starter-test’ } test { useJUnitPlatform() }
3. IntelliJ 설정
프로젝트 실행 전 성능 등을 위해 간단한 IntelliJ 설정을 합니다.
3.1. 프로젝트 자바 버전 확인(JDK)
프로젝트가 원하는 자바 버전으로 잘 설정되어있는지 확인해봅니다. (Java 11)
File > Project Structure > Project > Project SDK
버전이 맞지 않다면 변경해줍니다.
JDK 확인
3.2. 자바 직접 실행 설정
빠른 실행 속도를 위해 자바로 직접 실행하도록 설정을 변경합니다.
Preferences > Build, Execution, Deployment > Build Tools > Gradle
실행 방법 변경
4. Spring Boot 실행
4.1. 컨트롤러 생성
실행 테스트를 위해 @RestController 어노테이션을 이용해 컨트롤러를 생성합니다.
Spring Boot 실행 클래스와 패키지 경로를 통해 접근이 가능한 경로에 컨트롤러 클래스를 생성합니다.
[컨트롤러 소스]package hello.hellospring; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; @RestController public class HomeController { @GetMapping(value = “/”) public HashMap
test(){ HashMap test = new HashMap (); test.put(“project_version”,”2.5.5″); test.put(“java_version”,”11″); return test; } } 4.2. 라이브러리 추가
컨트롤러 호출 시 HashMap이 Json Data Return이 안 될 경우에만 추가하셔도 됩니다. 일반적으로 위에서 프로젝트 파일 다운로드 시 선언한 Spring Web이랑 thymeleaf의 의존성 파일을 Gradle로 자동으로 설치가 될 것입니다.
호출된 컨트롤러의 HashMap 데이터를 Json으로 파싱 하기 위해 필요한 라이브러리를 build.gradle에 추가해줍니다.
jackson-core: implementation group: ‘com.fasterxml.jackson.core’, name: ‘jackson-core’, version: ‘2.12.3’
jackson-databind: implementation group: ‘com.fasterxml.jackson.core’, name: ‘jackson-databind’, version: ‘2.12.3’
dependencies { implementation ‘org.springframework.boot:spring-boot-starter-thymeleaf’ implementation ‘org.springframework.boot:spring-boot-starter-web’ testImplementation ‘org.springframework.boot:spring-boot-starter-test’ // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core implementation group: ‘com.fasterxml.jackson.core’, name: ‘jackson-core’, version: ‘2.12.3’ // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind implementation group: ‘com.fasterxml.jackson.core’, name: ‘jackson-databind’, version: ‘2.12.3’ }
4.3. 프로젝트 실행
Spring Boot 실행 클래스를 실행합니다.
실행 클래스 파일은 프로젝트 생성 시 생성되어있는 클래스 파일이고 main() 메서드를 가진 파일입니다.
4.4. 실행 결과
브라우저를 이용해 컨트롤러로 설정한 경로로 접근합니다.
5. 빌드하고 실행하기
콘솔로 현재 프로젝트 디렉터리로 이동합니다.(터미널, 윈도우 명령 프롬프트, powershell 등)
#pwd /Users/veneas/Desktop/dev/hello-spring # ll total 48 -rw-r–r–@ 1 hjs staff 1.4K 10 10 05:29 HELP.md drwxr-xr-x 10 hjs staff 320B 10 10 21:17 build -rw-r–r–@ 1 hjs staff 952B 11 3 00:02 build.gradle drwxr-xr-x@ 3 hjs staff 96B 10 10 05:29 gradle -rwxr-xr-x@ 1 hjs staff 7.9K 10 10 05:29 gradlew -rw-r–r–@ 1 hjs staff 2.7K 10 10 05:29 gradlew.bat drwxr-xr-x 4 hjs staff 128B 10 17 23:04 out -rw-r–r–@ 1 hjs staff 34B 10 10 05:29 settings.gradle drwxr-xr-x 3 hjs staff 96B 10 30 14:51 sql drwxr-xr-x@ 4 hjs staff 128B 10 10 05:29 src
이동 후 다음 명령어를 실행해 확인합니다.
./gradlew build (윈도우 사용자: gradlew.bat 로 빌드 ) cd build/libs java -jar hello-spring-0.0.1-SNAPSHOT.jar 스프링 부트가 잘 실행이 되었는지 확인(웹 브라우저를 통해 localhost:8080으로 접근하면 페이지가 나타납니다.)
[ 1. 빌드(실행 파일 생성) ] # ./gradlew build Starting a Gradle Daemon (subsequent builds will be faster) > Task :test 2021-11-04 21:27:57.570 INFO 1491 — [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit ‘default’ 2021-11-04 21:27:57.575 INFO 1491 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Shutdown initiated… 2021-11-04 21:27:57.623 INFO 1491 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Shutdown completed. BUILD SUCCESSFUL in 29s 7 actionable tasks: 7 executed [ 2. 생성된 파일 경로로 이동 ] # cd build/libs # ll total 79928 -rw-r–r– 1 hjs staff 20K 11 4 21:27 hello-spring-0.0.1-SNAPSHOT-plain.jar -rw-r–r– 1 hjs staff 39M 11 4 21:27 hello-spring-0.0.1-SNAPSHOT.jar [ 3. 스프링 부트 실행(jar 파일 실행) ] # java -jar hello-spring-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___’_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | ‘_ | ‘_| | ‘_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ‘ |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.5) 2021-11-04 21:30:16.294 INFO 1558 — [ main] h.hellospring.HelloSpringApplication : Starting HelloSpringApplication using Java 11.0.11 on veneas-MacBookAir.local with PID 1558 (/Users/veneas/Desktop/dev/hello-spring/build/libs/hello-spring-0.0.1-SNAPSHOT.jar started by hjs in /Users/veneas/Desktop/dev/hello-spring/build/libs) 2021-11-04 21:30:16.298 INFO 1558 — [ main] h.hellospring.HelloSpringApplication : No active profile set, falling back to default profiles: default 2021-11-04 21:30:17.980 INFO 1558 — [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2021-11-04 21:30:18.120 INFO 1558 — [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 124 ms. Found 1 JPA repository interfaces. 2021-11-04 21:30:20.041 INFO 1558 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2021-11-04 21:30:20.067 INFO 1558 — [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2021-11-04 21:30:20.067 INFO 1558 — [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.53] 2021-11-04 21:30:20.207 INFO 1558 — [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2021-11-04 21:30:20.207 INFO 1558 — [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3742 ms 2021-11-04 21:30:20.769 INFO 1558 — [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2021-11-04 21:30:20.865 INFO 1558 — [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final 2021-11-04 21:30:21.263 INFO 1558 — [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 2021-11-04 21:30:21.441 INFO 1558 — [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Starting… 2021-11-04 21:30:21.536 INFO 1558 — [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Start completed. 2021-11-04 21:30:21.577 INFO 1558 — [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect 2021-11-04 21:30:22.610 INFO 1558 — [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2021-11-04 21:30:22.626 INFO 1558 — [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit ‘default’ 2021-11-04 21:30:23.723 WARN 1558 — [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2021-11-04 21:30:24.413 INFO 1558 — [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html] 2021-11-04 21:30:24.864 INFO 1558 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ” 2021-11-04 21:30:24.877 INFO 1558 — [ main] h.hellospring.HelloSpringApplication : Started HelloSpringApplication in 9.713 seconds (JVM running for 10.57) 2021-11-04 21:31:00.905 INFO 1558 — [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet ‘dispatcherServlet’ 2021-11-04 21:31:00.906 INFO 1558 — [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet ‘dispatcherServlet’ 2021-11-04 21:31:00.907 INFO 1558 — [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms참고 강의
https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard
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 Boot | 웹 프로젝트 만들기 (Thymeleaf, Jar, Gradle, Eclipse)
템플릿 의존성(Thymeleaf, groovy, FreeMaker)등을 추가하게 되면
스프링 부트는 자동적으로 src/main/resources/templates 경로를 기본 경로로 인식한다.
[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을 입력하여 화면을 실행해볼 수 있다.
에러 화면
위와 같은 화면이 나왔다면 성공적으로 된 것이다. 아직 아무런 내용을 작성하지 않았기에 에러가 뜨는 것이며 이제 개발을 할 준비가 끝난 상태이다.
반응형
스프링 부트로 게시판 만들기1
반응형
스프링 부트는 2014년부터 개발된 스프링의 하위 프로젝트 중 하나입니다. 단독으로 실행이 가능하고(stand-alone), 제품 수준의(production-grade) 스프링 기반 어플리케이션을 제작하는 것을 목표로 진행된 프로젝트입니다. 스프링부트의 주요 기능들은
– 단독 실행이 가능한 수준의 스프링 어플리케이션 제작이 가능
– 내장된 Tomcat, Jetty, UnderTow 등의 서버를 이용해서 별도의 서버를 설치하지 않고 실행이 가능
– 최대한 자동화된 설정을 제공
– XML 설정 없이 단순한 설정 방식을 제공
이러한 특징들을 요약하면 스프링 부트는 ‘단독으로 빠르게 개발 가능한 스프링 프로젝트’ 제작용입니다.
처음 스프링 프레임워크를 사용했을 때 많은 XML파일을 설정해가며 개발을 하던 게 어노테이션으로 간편해졌고, Java Config를 사용하며 더더욱 단순해졌는데 이것마저 단순화해줄 수 있는 프로젝트가 스프링 부트(Spring Boot)라고 하네요. 스프링 부트는 스프링의 여러 기술들(Data, Batch, Integration, Web, JDBC, Security)을 사용자가 쉽게 사용할 수 있게 해주는 역할을 합니다.
포트폴리오를 위해 스프링 프레임워크를 사용하여 몇 개의 웹사이트를 제작했었는데….. 왜 그동안 몰랐는지….(눈물) 그런데 문제는 분명 이전보다 간단하고 편리하긴 한데 스프링부트에 대해 아무것도 모르다보니 어렵기는 마찬가지네요; 당연하겠지만 이전 방식에 비해 자료도 부족하고 나는 영어도 못하고….(오열). 그래도 새로운 기술에 도전하고 삽질(?)하는게 개발자의 묘미가 아닐까 생각하며 아예 그냥 블로그를 만들어보자! 마음을 먹었습니다. 중간에 포스팅이 멈추는 일이 없길 바라며….
저의 최종 목적은 Rest방식으로 구현된 스프링부트 프로젝트를 AWS로 배포하여 저의 개인 포트폴리오를 등록할 수 있는 사이트 제작 입니다.
그러기 위해서 구현해야할 기능은 일단 1차로는 글쓰기, 수정, 삭제, 보기, 리스트/ 로그인입니다.
이후로 더 나아가 2차로 소셜api도 사용해보고, 파일도 입출력해보고 등등 다 구현을 해야겠지만 일단 저도 공부하는 입장이기때문에 위의 기능정도만(1차) 구현을 하고 다른 기능은 추후에 구현해보도록 하겠습니다.
Window7 환경에서 Eclipse Mars2를 사용하여서 프로젝트를 생성할거고요. DB는 MyBatis를 사용해서 MySQL과 연동을 시킬거예요. View는 JSP를 사용합니다. 또, XML이 아닌 gradle을 사용할거기 때문에 gradle설치를 해주셔야됩니다.
스프링 부트를 이용한 프로젝트 생성
STS를 이용하면 기본적으로 스프링 부트 프로젝트 생성을 지원하기 때문에 이클립스에서 STS를 설치한 후에 진행해주세요.
참고 : 이클립스에 스프링 플러그인 설치하기
1. File – New – Spring Starter Project선택
2. 프로젝트 이름은 board/Type은 Gradle(STS)/Packaging는 War/Package는 com.board로 지정한 후 Next
*gradle이 설치되어 있지 않으면 Type에 Gradle(STS)가 없습니다. xml을 사용하실 분들은 xml을 선택하셔도 돼요.
3. 프로젝트 생성 시 사용할 라이브러리를 선택하면 프로젝트를 생성하며 자동으로 다운로드 받기 때문에 상당히 편리합니다. 또한, 라이브러리는 추후에 추가할 수도 있으니 일단 web만 선택하고 프로젝트를 생성합니다. Finish
(제가 사용하려고한 MySQL도 체크박스 항목으로 존재하지만 MySQL은 DataSource에 대한 설정이 필요하기 때문에 최초로 생성할 때는 하지 않는 것이 좋다고하니 선택하지 않고 넘어가겠습니다.)
*추후에 추가할 라이브러리는 생성된 프로젝트에서 src – build.gradle의 아래쪽을 보시면 dependencies부분에 라이브러리를 작성해주어 추가해주면 됩니다.
생성된 프로젝트 실행하기
프로젝트의 구조를 보면 생성 시 지정한 패키지(com.board)에 ‘프로젝트명+Application’파일과 War를 선택했을 때 생성되는 ServletInitializer파일이 생성되어 있습니다.
Application 파일에 작성되어 있는 코드를 보면 main() 메서드가 작성되어 있죠? 스프링 부트는 별도의 서버 설정 없이 main() 메서드를 실행하는 것 만으로도 내장된 Tomcat 서버를 이용해서 프로젝트가 실행됩니다.(감탄)
BoardApplication 혹은 프로젝트를 선택하고 우클릭 – Run As – Spring Boot App를 선택해서 프로젝트를 실행해볼까요?
콘솔창을 보면 스프링 부트의 로고와 Tomcat이 실행되는 것을 확인할 수 있습니다.
http://localhost:8080 을 호출하면 다음과 같은 화면이 출력됩니다.
Controller 작성
@RestController를 이용해서 데이터를 처리하는 컨트롤러를 작성해볼게요. 그냥 테스트로 작성하는 것이기 때문에 게시판 만드는것과는 관련이 없으며 테스트만 하고 삭제할거예요^^;
1.src/main/java 아래에 com.board.controller 패키지를 생성하고, TestController.java 클래스를 생성합니다.
TestController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package com.board.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @RequestMapping( “/test” ) public String test(){ return “Hello World” ; } } Colored by Color Scripter cs
TestController를 작성한 후에 프로젝트 구조를 보면 자동으로 스프링의 빈으로 처리되있는 것을 확인할 수 있습니다.
작성한 컨트롤러가 잘 작동하는지 확인하기 위해서 프로젝트를 실행하고 http://localhost:8080/test 를 호출해볼게요.
잘 나오나요? 혹시 프로젝트 실행 시 콘솔창에 에러가 나는 분들은 이미 실행되어 있는 상태에서 또 실행을 해서 에러가 난걸수도 있으니 정지시키고 다시 실행을 해주세요.
**
데이터베이스 설정까지 하려고 했는데 너무 길어지는 것 같아서 다음 포스팅에서 이어가도록 하겠습니다. (github도 사용해볼겸 소스코드를 올리려고 했는데 지금까지는 너무 별거 없어서; 조금더 내용이 추가가 되면 올려보도록 하겠습니다^^;)
반응형
[SpringBoot] Springboot 프로젝트 만들어보기
728×90
반응형
시작하기 전에
하기 포스팅은 “스프링부트 시작하기(김인우 저)” 책을 공부하며 적은 포스팅입니다.
SpringBoot의 장점
Spring 프레임워크는 웹 어플리케이션에서 사용되는 많은 기능을 제공합니다. 다만, 해당 기능을 제대로 사용하기 위해서는 많은 작업이 필요합니다. 따라서, 개발자는 프로젝트의 비즈니스 로직을 고민하는 것 외에 프레임워크 사용을 위해 아래와 같은 여러 작업을 진행해야 했습니다.
라이브러리 추가 및 의존성 관리
스프링 프레임워크가 처리할 작업 인지할 수 있도록 구성 및 설정 파일 작성
이런 불편함을 해소하기 위해 나온 것이 SpringBoot입니다. SpringBoot의 주요 장점은 아래와 같습니다. 하기 장점들을 통해 쉽고 빠르게 개발을 할 수 있게 되었습니다.
프로젝트에 따라 자주 사용되는 라이브러리들이 미리 조합되어 있음
복잡한 설정 자동으로 처리
내장 서버를 포함하고 있어 Tomcat과 같은 서버를 추가 설지하지 않아도 됨
Tomcat이나 Jetty와 같은 WAS(Web Application Server)에 배포하지 않고도 실행할 수 있는 JAR 파일로 웹 어플리케이션 개발
SpringBoot로 프로젝트 생성하기
먼저, SpringBoot 프로젝트를 생성해보겠습니다.
1. File > New > Spring Starter Project를 선택하여 새 스프링 부트 프로젝트를 생성합니다. 이때, New에 나온 항목 중 Spring Starter Project가 없다면, Other…를 눌러 검색하여 찾아주면 됩니다.
Spring Starter Project는 윈도우의 설치 마법사와 같이 손쉽게 SpringBoot 기반 프로젝트를 생성해줍니다.
Spring Starter Project가 없으면 Other…을 눌러 Spring Starter Project를 검색하고 Next > 클릭
2. 설치 마법사에서 프로젝트명, 빌드 관리 도구 및 자바 버전, 패키지 등 프로젝트 기본사항을 설정합니다. 노트북에 깔린 JDK 버전이 11인 관계로, Java Version은 11로 되어 있습니다. “스프링부트 시작하기” 책에서는 Gradle을 빌드 관리 도구로 사용하기 때문에, Maven으로 설정되어 있다면 Gradle로 바꾸었습니다.
스프링 프레임워크는 웹 프로젝트를 만들 때 다양한 라이브러리를 하나하나 추가해야 했습니다. SpringBoot 역시 개발자가 해당 프로젝트에 필요한 의존성을 찾아 추가해야 하지만, 일반적으로 사용하는 의존성 그룹을 보여주어 해당 부분을 쉽게 추가할 수 있게 되어 있습니다.
웹 프로젝트를 만들 것이기 때문에 Spring Web 의존성을 체크하고, 개발 생산성 향상을 위한 Spring Boot DevTools 의존성을 체크합니다.
왼쪽 사진은 프로젝트 기본사항 설정, 중간/오른쪽 사진은 의존성 및 스프링부트 버전 설정
프로젝트에 필요한 의존성을 추가하면 Gradle을 이용하여 여러 라이브러리들을 자동으로 다운로드하고, 해당 내역이 이클립스 콘솔창에 표시됩니다. Maven이나 Gradle와 같은 빌드 관리 도구가 없었을 때에는 프로젝트에 필요한 라이브러리들을 각각 찾아 프로젝트에 포함시켜야 했습니다. 하지만, 빌드 관리 도구를 사용하면 단순히 의존성만 추가함으로써 쉽게 의존성 관리 및 라이브러리 다운이 가능합니다.
3. 설치 마법사를 통해 프로젝트를 생성하면, 아래 사진과 같은 구조로 프로젝트가 생성됩니다. 몇 가지의 패키지와 폴더, 파일들이 생성되는데, 이는 일반적인 Gradle 프로젝트 구조입니다.
Gradle 프로젝트 구조
4. 코드 한 줄 쓰지 않은채, 먼저 프로젝트가 정상적으로 생성되었는지 테스트하도록 하겠습니다. 프로젝트를 클릭하고, 툴바 중 초록색 재생 버튼(사실상 버튼 옆의 ▼)을 클릭합니다. 해당 버튼을 누른 뒤 Run As > Spring Boot App를 클릭하면 프로젝트를 실행할 수 있습니다.
Spring Boot App 실행
Spring Boot 프로젝트를 실행하면 아래와 같이 로그가 콘솔에 찍힘을 확인할 수 있습니다. 아래 로그 중 빨간 박스 표시가 된 부분이 뜨면 프로젝트가 정상적으로 생성된 것입니다.
Spring Boot 실행 시 로그
embedded.tomcat.TomcatWebServer: Tomcat started on port(s): 8080 (http) with context path ”
sample.SampleApplication: Started SampleApplication in 1.214 seconds (JVM running for 1.771)
위 두 개 로그는 sample 프로젝트가 tomcat으로 실행되었으며, 8080 포트를 사용한다는 것을 알려줍니다. 그리고, 실행되는 데 1.214 초가 걸렸음을 의미합니다. 앞서 개발환경을 설정할 때 Tomcat을 따로 설치하지 않았습니다만, SpringBoot는 tomcat 서버를 내장하고 있어 무리 없이 프로젝트가 실행됨을 알 수 있습니다.
왜 브라우저에서 error가 날까?
http://localhost:8080를 호출하면 아래와 같은 에러 페이지가 출력됩니다. 이는 잘못된 것 같아 보일 수 있지만, 정상적인 결과입니다. 이는 현재 프로젝트를 생성만 하여, SpingBoot 프로젝트 생성 시 자동으로 진행되는 프로젝트의 실행에 관한 기능만 설정되었기 때문에 발생한 일입니다. 즉, 화면에 보이는 부분은 자동으로 만들어지지 않기 때문에 따로 코드를 작성하여야 해당 페이지가 제대로 뜨게 됩니다.
브라우저에서 실행하기
SpringBoot Hello World !
프로젝트를 생성까지만 하면, 웹 프로젝트임에도 웹에서 확인이 되지 않으므로, 화면에 간단하게 출력이 되도록 구성을 해보도록 하겠습니다.
1. sample 패키지 안에 controller 패키지를 생성합니다. sample 패키지를 우클릭한 후 New > Package를 클릭합니다. New Java Package 창에서 Name을 sample.controller로 지정하여 controller를 생성합니다.
Controller 패키지 생성
2. controller 패키지를 우클릭한 후 New > Class를 선택합니다. New Java Class 창에서 Name을 HelloController로 설정하여 HelloController.java 파일을 생성합니다.
Class 파일 생성
3. HelloController.java 내에 아래와 같이 작성하여 http://localhost:8080 호출 시, SpringBoot Hello World!가 띄워질 수 있도록 합니다.
package sample.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping(“/”) public String hello() { return “SpringBoot Hello World!”; } }
@RestController 어노테이션 을 이용하여 해당 클래스가 REST 컨트롤러 기능을 수행할 수 있도록 합니다.
을 이용하여 해당 클래스가 REST 컨트롤러 기능을 수행할 수 있도록 합니다. @RequestMapping 어노테이션 은 해당 메소드를 실행할 수 있는 주소를 설정합니다. 여기서는 “/”에 대해 설정했으므로 http://localhost:8080/ 호출 시 해당 메소드가 실행됩니다.
은 해당 메소드를 실행할 수 있는 주소를 설정합니다. 여기서는 “/”에 대해 설정했으므로 http://localhost:8080/ 호출 시 해당 메소드가 실행됩니다. public String hello()는 SpringBoot Hello World! 메시지를 화면에 전달해주는 역할을 합니다. 해당 메소드 바로 위에 있는 @RequestMapping 어노테이션에서 설정한 주소가 호출되면 해당 주소와 연관된 메소드가 실행됩니다.
4. 3번에서 작성한 소스 코드를 저장하고 프로젝트를 재실행하면, 브라우저에서 http://localhost:8080 호출 시 아래와 같이 출력되는 것을 확인할 수 있습니다.
http://localhost:8080과 http://localhost:8080/은 동일
이 때, 프로젝트 생성 후 돌렸던 SpringBoot App은 꼭 종료하고 실행해야 합니다. 그렇지 않으면, 8080 포트에 이미 프로세스가 떠 있다는 경고 메시지를 받게 됩니다.
기존 프로세스 콘솔창 상단 오른쪽의 ■ 버튼을 클릭해서 Shutting down 로그 확인 후 새로 돌려야 함
SpringBoot 프로젝트 구조 알아보기
이번에는, 위에서 만든 프로젝트를 가지고 SpringBoot 프로젝트 구조를 알아보도록 하겠습니다.
프로젝트의 논리적 구조(eclipse에서 보여지는 프로젝트 구조)
프로젝트의 주요 파일 및 구조
프로젝트의 주요 파일 및 구조 의미 src/main/java 자바 소스 디렉토리 SampleApplication.java 어플리케이션을 시작할 수 있는 mani 메소드가 존재하는 스프링 구성 메인 클래스 templates 스프링부트에서 사용 가능한 여러 가지 뷰 템플릿(Thymeleaf, Velocity, FreeMarker 등) 파일 위치 static 스타일 시트, 자바스크립트, 이미지 등 정적 리소스 디렉토리 application.properties 어플리케이션 및 스프링 설정 등에서 사용할 여러 프로퍼티(property) 정의 Project and External Dependencies Gradle에 명시한 프로젝트의 필수 라이브러리 모음 src JSP 등 리소스 디렉토리 build.gradle Gradle 빌드 명세, 프로젝트에 필요한 라이브러리 관리, 빌드 및 배포 설정
SpringBoot 어플리케이션에는 이 외에도 몇 가지 폴더와 파일이 있습니다. test 폴더에는 JUnit을 이용한 테스트 클래스가 있으며, Gradle 폴더 및 gradlew, gradlew.bat은 Gradle 설정 및 실행 관련 스크립트 정보를 가지고 있습니다.
SampleApplication 클래스
SampleApplication은 스프링부트 어플리케이션의 구성과 실행을 담당하는 중요한 클래스입니다. SpringBoot의 장점 중 하나인 자동 구성은 최소한의 설정으로 바로 실행할 수 있는 어플리케이션을 만들어준다는 것을 의미합니다. SampleApplication.java 파일은 아래와 같이 구성됩니다.
/* SampleApplication.java */ package sample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SampleApplication { public static void main(String[] args) { SpringApplication.run(SampleApplication.class, args); } }
@SpringBootApplication @SpringBootApplication 어노테이션은 SpringBoot 어플리케이션의 핵심 어노테이션으로, Spring의 3가지 어노테이션으로 구성 되어 있습니다. @EnableAutoConfiguration SpringBoot의 장점 중 하나인 자동 구성을 할 수 있게 도와주는 어노테이션 입니다. @EnableAutoConfiguration 어노테이션을 사용하면, Spring의 다양한 설정이 자동으로 완료 됩니다. @ComponentScan 기존 Spring은 빈(bean) 클래스를 사용하기 위해 XML에 빈을 각각 선언해야 했습니다. 하지만, @ComponentScan 어노테이션을 사용하면 컴포넌트 검색 기능을 활성화 해 자동으로 여러 컴포넌트 클래스를 검색 하고 검색된 컴포넌트 및 빈 클래스를 Spring 어플리케이션 컨텍스트에 등록 하는 역할을 합니다. 예를 들어, @RestController 어노테이션을 사용하여 스프링 MVC 컨트롤러를 만들 수 있습니다. 이는 컴포넌트 자동 검색 및 구성에 의해 해당 컴포넌트를 사용할 수 있도록 한 것입니다. @Configuration @SpringBootApplication 어노테이션에는 @Configuration 어노테이션이 직접적으로 포함되어 있지는 않습니다. 다만, @SpringBootConfiguration 어노테이션이 포함되어 있고, 해당 어노테이션에 @Configuration이 포함되어 있습니다. @Configuration이 붙은 자바 클래스는 자바 기반 설정 파일 임을 의미합니다. 따라서, @Configuration을 쓰면 해당 자바 클래스가 설정 파일임으 스프링 프레임워크에 알려줍니다. Spring 3.x 버전까지는 자바 기반의 설정 파일이 아닌 XML 기반 설정에 오랜 시간을 투자해야 했습니다. 다행히, Spring 4.x 버전이 출시되면서, 자바 기반 설정이 가능해졌습니다.
SpringApplication.run() 메소드 SpringBoot 프로젝트의 장점 중 하나가 Tomcat과 같은 WAS(Web Application Server)에 배포하지 않고도 실행할 수 있는 JAR 파일로 웹 어플리케이션을 개발 할 수 있다는 점이었습니다. main 메소드는 SpringBoot의 SpringApplication.run() 메소드를 사용하여 SpringBoot 어플리케이션을 실행 시킵니다. 위에서 sample 패키지를 구성할 때에 XML 파일을 따로 만들지 않았습니다. 심지어, 웹 어플리케이션에 꼭 있어야하는 web.xml도 사용하지 않았습니다. 이렇게, SpringBoot로 생성된 어플리케이션은 순수 자바만을 이용해서 개발할 수 있도록 해줍니다.
build.gradle
build.gradle은 Gradle로 생성된 프로젝트의 빌드를 관리하는 파일입니다. build.gradle은 다음과 같이 구성되어 있습니다.
/* build.gradle */ plugins { id ‘org.springframework.boot’ version ‘2.4.1’ id ‘io.spring.dependency-management’ version ‘1.0.10.RELEASE’ id ‘java’ } group = ‘com.example’ version = ‘0.0.1-SNAPSHOT’ sourceCompatibility = ’11’ repositories { mavenCentral() } dependencies { implementation ‘org.springframework.boot:spring-boot-starter-web’ developmentOnly ‘org.springframework.boot:spring-boot-devtools’ testImplementation ‘org.springframework.boot:spring-boot-starter-test’ } test { useJUnitPlatform() }
plugins 프로젝트를 빌드하기 위한 작업(예: 컴파일, jar 파일 생성)을 해주는 플러그인 들을 적는 부분입니다. 각 플러그인들은 필요한 과정들을 task로 가지고 있어 필요한 과정을 내부에서 진행합니다.
repositories SpringBoot 프로젝트에서 사용하는 라이브러리를 받아오는 저장소 를 설정합니다. 기본적으로는 위와 같이 기본 저장소인 Maven Repository는 mavenCentral()로 설정하면 됩니다. 외부 저장소를 넣어 사용할 수도 있습니다. 이 때에는 maven { url “http://repo.spring.io/snapshot” } 과 같이 외부 저장소 주소를 설정하면 됩니다. 이렇게 설정하면, 기본 저장소에 없는 라이브러리도 사용할 수 있습니다.
dependencies 프로젝트에서 필요한 라이브러리 의존성을 설정 하는 부분입니다. SpringBoot starter로 프로젝트를 생성할 때 주입한 의존성이 해당 내용에 나타납니다. 따라서, 처음에 선택한 SpringBoot Web(‘org-springframework.boot:spring-boot-starter-web’)와 SpringBoot DevTools(‘org.springframework.boot:spring-boot-devtools’)에 대한 의존성이 나타나 있습니다. 프로젝트를 진행하며 필요한 라이브러리들을 추가해주면, Gradle이 알아서 필요한 라이브러리들을 다운로드 합니다.
728×90
반응형
키워드에 대한 정보 스프링 부트 프로젝트 예제
다음은 Bing에서 스프링 부트 프로젝트 예제 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 스프링부트(springboot)로 만드는 Restful Api [센치한개발자]
- springboot
- spring
- restful
- 스프링부트
스프링부트(springboot)로 #만드는 #Restful #Api #[센치한개발자]
YouTube에서 스프링 부트 프로젝트 예제 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 스프링부트(springboot)로 만드는 Restful Api [센치한개발자] | 스프링 부트 프로젝트 예제, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.