일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- dynamic programming
- 브루트포스
- Spring
- programmers
- 구현
- 백준
- 이분탐색
- broadcast
- 너비우선탐색
- BFS
- DFS
- switch
- DP
- greedy
- 해시
- 스프링
- 네트워크
- 그리디
- Algorithm
- 해시맵
- Backtracking
- 동적계획법
- 깊이우선탐색
- 프로그래머스
- DynamicProgramming
- 백트래킹
- boj
- Network
- 알고리즘
- HashMap
- Today
- Total
옌의 로그
[Spring] 스프링 입문 | 1. 프로젝트 환경설정 본문
(본 게시글은 인프런 스프링 입문 강의에 의해 작성되었습니다.)
프로젝트 생성
사전 준비
- Java 11 설치 (참고 : https://llighter.github.io/install-java-on-mac/)
더보기brew update
brew tap adoptopenjdk/openjdk
brew install --cask adoptopenjdk11 - IDE : IntelliJ 설치 (https://www.jetbrains.com/ko-kr/idea/download/#section=mac)
스프링 부트 스타터
스프링 부트 스타터는 Maven이나 Gradle과 같은 빌드 도구의 종속성 관리를 자동화하여 필요한 라이브러리를 추가하고 설정하는 작업을 대신 수행해준다
- Project ) Gradle - Groovy
- 과거엔 Maven을 주로 사용했는데 최근엔 Gradle을 많이 사용
- Gradle이 인기있는 이유
- 유연성&편의성 : groovy나 kotlin같은 동적 언어를 사용하여 빌드 스크립트를 작성할 수 있다
- 성능 : gradle은 효율적인 캐시 매커니즘과 병렬처리 기능을 갖추고 있어, 반복적인 빌드 작업을 최적화하고 빌드 시간을 단축한다
- 다양한 플러그인 생태계 : gradle은 다양한 플러그인을 지원하며, 이를 통해 개발자들은 다양한 작업(코드 정적 분석, 테스트 커버리지 측정, 배포 등)을 자동화 할 수 있다
- 지속적인 통합과 배포 : gradle은 CICD를 지원하기 위한 기능을 내장하고 있다
- 커뮤니티 지원과 확장성 : 활발한 개발자 커뮤니티와 문서화된 리소스가 있다.
- Language ) Java
- Spring Boot ) 2.7.12 (미정식 버전을 제외한 최신 버전 사용)
- Project Metadata : 애플리케이션의 설정 파일 이름을 자동으로 생성하고, 애플리케이션의 속성을 구성하는데 활용
- Group : 프로젝트가 속하는 그룹을 식별. 주로 업무 조직이나 회사의 도메인 이름을 역순으로 사용
- Artifact : 프로젝트의 고유한 이름. 주로 프로젝트의 명칭이나 애플리케이션의 이름을 사용
- Packaging ) Jar
- Java ) 11
- Dependencies : 어떤 라이브러리를 쓸지 선택
- Spring Web : 스프링 프레임워크에서 제공하는 웹 애플리케이션 개발을 위한 라이브러리
- 스프링 MVC(Model-View-Controller)
- RESTful 웹 서비스 지원
- 웹 보안 : spring-security-web 라이브러리를 통해 인증, 권한부여, 세션관리, CSRF(Cross-Site Request Forgery) 방어 등의 기능 구현
- 파일 업로드 : MultipartResolver 인터페이스 제공
- 템플릿 엔진 통합 : Thymeleaf, FreeMarker, Mustache와 같은 템플릿 엔진을 사용해 동적인 웹페이지 생성 가능
- Thymeleaf : html 템플릿 엔진 (회사마다 사용하는게 많이 다르다)
- Spring Web : 스프링 프레임워크에서 제공하는 웹 애플리케이션 개발을 위한 라이브러리
Gradle 전체 설정
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.12'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'yenie'
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'
}
tasks.named('test') {
useJUnitPlatform()
}
- mavenCentral : Maven 중앙 저장소 (Maven Central Repository)를 가리키며, 오픈 소스 Java 라이브러리 및 프레임워크의 다양한 종속성을 제공한다
- dependencies에 선언된 라이브러리들을 maven central repository에서 다운받는다
IntelliJ Gradle 대신에 자바 직접 실행
최근 IntelliJ 버전은 Gradle을 통해 실행하는 것이 기본 설정인데, 이렇게 되면 실행 속도가 느리다. 그러므로 자바로 변경해서 실행속도를 빠르게 하도록 한다
Settings > Build, Execution, Deployment > Build Tools > Gradle
- Build and run using : Gradle -> IntelliJ IDEA
- Run tests using : Gradle -> IntelliJ IDEA
라이브러리 살펴보기
Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다
- 스프링 부트 라이브러리
- spring-boot-starter-web
- spring-boot-starter-tomcat : 톰캣 (웹서버)
- spring-webmvc : 스프링 웹 MVC
- spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진 (View)
- spring-boot-starter(공통) : 스프링부트 + 스프링코어 + 로깅
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback
- slf4j의 구현체 중 하나로, 실제 로깅 시스템
- 다양한 로그 출력 형식 (콘솔, 파일, 원격 서버)을 지원하며, 로깅 이벤트를 효율적으로 처리하기 위한 구성 옵션을 제공
- slf4j (simple logging facade for Java)
- 로깅 시스템에 대한 추상화 계층을 제공하는 라이브러리
- 애플리케이션 코드에서 로깅 작업을 수행할 때 사용하는 API 제공
- logback
- spring-boot
- spring-boot-starter-web
- 테스트 라이브러리
- spring-boot-starter-test
- junit : 테스트 프레임워크
- mockito : 목 라이브러리
- assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
- spring-test : 스프링 통합 테스트 지원
- spring-boot-starter-test
View 환경설정
Welcome Page 만들기
resources/static/index.html
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
* static 폴더 아래에 index.html 파일을 생성하면 스프링 부트가 알아서 Welcome Page로 기능하게끔 한다
* https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/
thymeleaf 템플릿 엔진 활용하기
* controller 패키지 생성
* controller 패키지 안에 HelloController.java 생성
* templates 하위에 hello.html 생성
java/yenie.hellospring/controller/HelloController.java
package yenie.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello") // web에서 /hello가 들어오면 해당 메서드로 매핑해준다
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello"; // template/ 하위에 있는 hello.html을 찾아서 렌더링 하라는 의미
}
}
resources/templates/hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
- thymeleaf 엔진으로 인해 ${data} 부분에 HelloController로부터 받은 모델의 값이 렌더링 되서 페이지에 표시된다
동작 환경 그림
- 컨트롤러에서 리턴 값으로 문자(예제에선 "hello")를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다
- 스프링 부트 템플릿엔진 기본 viewName aovld
- resources:templates/ + {ViewName} + .html
>> hello.html
빌드 및 실행
- 프로젝트 폴더로 이동
- 빌드
./gradlew build - 빌드 폴더로 이동
cd build/libs - 실행
java -jar 파일명
* localhost:8080 확인시 문제없이 실행됨을 확인할 수 있다!
* IntelliJ에서 실행하고 있던 게 있다면, 종료 후 해야한다. 동시에 같은 포트를 할당할 수 없기 때문
'스터디 > 스프링' 카테고리의 다른 글
[Spring] 스프링 핵심 원리 기본편 | 1. 객체 지향 설계와 스프링 (0) | 2023.08.24 |
---|---|
[Spring] 스프링 입문 | 5. 회원관리 예제 - 웹 MVC 개발 (0) | 2023.08.20 |
[Spring] 스프링 입문 | 4. 스프링 빈과 의존관계 (2) | 2023.07.06 |
[Spring] 스프링 입문 | 3. 회원관리 예제 - 백엔드 개발 (0) | 2023.07.06 |
[Spring] 스프링 입문 | 2. 스프링 웹 개발 기초 (1) | 2023.06.15 |