Spring/Spring-Basic

[스프링 입문] Section1. 프로젝트 환경설정

y-seo 2023. 3. 29. 17:00

첫 단추를 잘 끼우자 ..!


프로젝트 생성

  1. 사전 준비물 : Java11, IDE(InteliJ) 설치
  2. 스프링 부트 스타터 → 스프링 프로젝트 생성 : Spring Initializr

  • Maven, Gradle : 필요한 라이브러리를 가져오고 빌드하는 라이프 사이클까지 관리하는 툴, 요즘 추세는 Gradle
  • Group : 기업 도메인명
  • Artifact : 프로젝트
  • Dependencies : 어떤 라이브러리를 가져와 쓸지 선택
  • Thymeleaf : html을 만들어주는 템플릿 엔진

3. Generate하여 IntelliJ에서 build.gradle 파일을 프로젝트로 open

더보기

Error

그 사이에.. Error가 남 ㅋㅋ

A problem occurred configuring root project 어쩌구

Solve

버전 문제 ^^

스프링 부트와 자바의 버전을 맞춰줘야 했다.. ㅎㅎ

4. 프로젝트 구조

  • .idea : IntelliJ가 사용하는 설정 파일
  • src : main, test 폴더 구분
    • main : 실제 패키지와 관련 소스들 
    • test: 테스트 코드와 관련된 소스들
  • resources : 실제 java 파일을 제외한 나머지
  • buil.gradle
    • 버전 설정과 라이브러리 가져오기
    • sourceCompatibility : Java의 버전
    • repositories : 라이브러리를 다운 받아오는 곳
    • dependencies : JUnit 5 라이브러리가 기본으로 포함됨
  • .gitignore : 소스코드 관리, build 된 결과물 등을 제외하도록
  • Compact Middle Package로 경로 단축 가능

5. 실행 후 localhost:8080 접속

  • main 메소드 실행시 SpringApplication.run 실행 시 SpringBootApplication 실행
    • 톰캣이나 웹서버를 내장하고 있기 때문에 스프링 부트가 같이 올라 옴

6. Gradle 설정 변경 for 속도 향상 

 

라이브러리 살펴보기

  • External Libraries 확인
    • Maven과 Gradle은 라이브러리의 의존 관계를 모두 관리 해줌
    • Gradle은 Spring Core까지 다 가지고 옴
  • 의존 관계 확인
    • 라이브러리를 빌드해 웹 서버에 올리는 것으로 단순하게 작업 가능

  • log를 사용해야 심각한 오류를 따로 확인 가능
    • slf4j : 인터페이스
    • logback : 어떤 구현체로 로그를 출력할지

  • 스프링 부트 라이브러리
    • spring-boot-starter-web
      • spring-boot-starter-tomcat: 톰캣 (웹서버)
      • spring-webmvc: 스프링 웹 MVC
    • spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
    • spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
  • 테스트 라이브러리
    • spring-boot-starter-test
      • junit: 테스트 프레임워크 (junit5로 추세가 넘어가는 )
      • mockito: 목 라이브러리
      • assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
      • spring-test: 스프링 통합 테스트 지원

 

View 환경설정

  1. 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>

  • 스프링 부트는 기능이 많기 때문에 필요에 따라 찾는 능력이 중요

2. Thymleaf 템플릿 엔진 사용

3. java/hello/hellospring/controller/HelloController.java 생성

  • 웹 어플리케이션에 /hello 입력 시 메소드 실행
  • key가 data, value가 hello!!
@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

4. resources/templates/hello.html 생성

  • ${data}가 hello!!로 치환
<!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>

  • 동작 환경 그림

  • 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리
    • 스프링 부트 템플릿엔진 기본 viewName 매핑
    • resources:templates/ + {ViewName} + .html

 

빌드하고 실행하기

  1. cmd 창에서 프로젝트 위치로 이동
  2. gradlew 입력
  3. gradlew build 입력
  4. build/libs로 이동
  5. java -jar hello-spring-0.0.1-SNAPSHOT.jar 입력
더보기

Error

명령어를 찾을 수 없다 .. 어쩌구

Solve

1. PowerShell이 아닌 cmd에서 하고 있는지 확인

2. Java JDK 설치가 되어 있는지 확인

3. 고급 시스템 속성의 PATH 설정이 잘 되어 있는지 확인


끝 !