스프링 입문 - 섹션1. 프로젝트 환경설정

태온·2021년 7월 20일
0
post-thumbnail

1. 프로젝트 환경설정

1. 프로젝트 생성

사전 준비

  • Java 11
  • IDE : IntelliJ or Eclipse 설치 (이 강의는 intelliJ를 사용합니다)

스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성
https://start.spring.io/

요즘은 Maven보단 Gradle을 많이 사용하기 때문에 Gradle로 바꿔주고 Group과 Artifact는 원하시는 이름으로 정하시면 됩니다. 제일 중요한 것은 Dependencies 에서 Spring Web과 Thymeleaf을 추가해 줍니다. 그리고 Generate! 생성해줍니다.

그리고 인텔리제이에서 hello-spring 폴더를 찾아 열어줍니다.

프로젝트 구조

  • .idea : 인텔리제이가 사용하는 설정 파일

  • gradle : gradle 관련 설정 파일이 들어가는 폴더

  • src (요즘에는 기본적으로 main 과test 폴더가 나눠져 있음.)

    • main
      • java : 자바 파일들이 들어가는 폴더(ex. class 등)
      • resources : 자바 파일 이외의 모든 파일이 들어가는 폴더(ex. html 등)
        • static : 정적 파일이 들어가는 폴더
        • templates : 템플릿 엔진이 사용할 파일이 들어가는 폴더
    • test : 테스트 코드와 관련된 파일들이 들어가는 폴더
      (요즘 개발 트렌드에서는 테스트 코드 중요!)
      • java
  • 🐘 build.gradle : 버전 설정과 라이브러리를 다운받는데 사용되는 폴더

아까 제가 스타터 사이트에서 추가한 dependecies들을 보실 수 있습니다.(thymeleaf, web)

testImplementation은 기본적으로 테스트 라이브러리가 들어갑니다.

이 라이브러리들을 다운받아오는 곳이 공개된 사이트인 mavenCentral() 입니다. 필요하면 다른 사이트URL도 추가하실 수 있습니다.

  • .gitignore : 깃허브에 올라가면 안되는 요소(ex - build된 결과물들)을 지정한 파일(자동으로 만들어줌)

이제 스프링을 잘 작동하는지 실행해봅시다.

src → main → java → hello.hellospring → HelloSpringApplication 을 실행시켜줍니다.

이 클래스를 실행시켜주게 되면 아래와 같이 작동합니다.

여기서 중요한 것은 Tomcat 포트번호가 8080인 것입니다.

이제 웹사이트에서 [localhost:8080](http://localhost:8080) 을 주소창에 쳐보면 다음과 같이 화면이 띄워집니다.

읭? 에러인데요?? 지금 아무것도 하지 않고 작동만 시켰기 때문에 당황하지 않으셔도 됩니다!

만약 스프링을 실행 중지를 하게 되면 사이트에 연결할 수 없다고 뜹니다.

메인 메서드를 간단하게 설명해보자면 어노테이션(@) SpringBootApplication이 실행이 되면서 스프링부트 안에는 웹 서버인 톰캣이 내장이 되어있습니다. 이 톰캣이라는 웹서버를 자체적으로 띄우면서 스프링 부트가 같이 띄워지게 됩니다.

  • 참고
    스프링을 실행할 때 gradle을 통해 실행이 될 때가 있어 속도가 느릴 때가 있습니다. 그러므로 File → Settings에서 gradle을 검색 후 IntelliJ로 바꿔줍니다. 이렇게 설정해주면 gradle을 통해 실행하지 않고 IntelliJ 자체에서 실행하기 때문에 속도가 개선이 됩니다.

2. 라이브러리 살펴보기 🧐

스프링 부트 라이브러리에는 다음과 같은 구조로 이뤄져있다.

  • 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

테스트 라이브러리는 다음과 같은 구조로 이뤄져있다.

  • junit : 테스트 프레임워크
  • mockito : 목 라이브러리
  • assertj : 테스트 코드를 좀더 편하게 작성하도록 도와주는 라이브러리
  • spring-test : 스프링 통합 테스트 지원

spring-boot-starter-tomcat

Spring-boot-starter-web 라이브러리 안에는 톰캣 라이브러리가 존재하는데, 이 라이브러리는 별도의 톰캣 웹서버를 설치, 배포, 실행하는 복잡한 과정을 줄여준다. 따라서 자바 코드를 실행하기만 해도 톰캣 서버가 실행된다. 이것을 embedded라고 한다.

spring-boot-starter-core

spring-boot-starter 에는 스프링 부트와 관련된 라이브러리가 전부들어가있으며 스프링 코어도 가져오고 있다. 가장 밑바닥에 있는 스프링 코어까지 모두 가져오고있음을 알 수 있다. 이것 또한 gradle 창에서 검색하면 의존관계를 확인할 수가 있다.

spring-boot-starter-logging

서버를 실행할 때마다 실행되는 모든 결과물들을 log로 남겨야 심각한 에러만 따로 분리할 수가 있으므로 log 라이브러리는 중요하며, 실무에서도 많이 사용된다. 그리고 해당 라이브러리 안에는 logback과 slf4j이 있는데, slf4j은 인터페이스고 logback라는 이 인터페이스의 구현체이다. 대체로 이 조합이 많이 사용되므로 springboot에서도 이것을 표준으로 정하여 미리 의존 라이브러리로 다운받아진 것이다.

spring-boot-starter-test

테스트와 관련된 라이브러리도 존재하는데, 그 중에서 junit이라는 라이브러리가 실무에서 많이 된다. 실무에서는 버전 4가 오래 유지되다가 최근에 5로 넘어가는 추세이다. assertj는 테스트를 편리하게 해주는 라이브러리이며, spring-test라는 라이브러리는 spring과 통합해서 테스트할수있도록 도와주는 라이브러리이다.


3. View 환경설정

스프링부트 2.5.2버전 참고 문서

웹 어플리케이션에서 /hello로 요청이 들어올경우 이 메서드를 실행합니다. mvc에서 Model에 해당하는 model 객체에 addAttribute로 hello라는 문자열을 넘기고 hello라는 문자열을 리턴합니다.

controller에서 데이터를 받아 화면에 띄울 html을 만들어줘야 합니다. 템플릿 엔진(thymeleaf)를 이용하여 위와 같이 만들어 줍니다. ${data}에는 앞서 controller에서 설정해준 data가 들어가게됩니다.

스프링부트를 실행시켜주면

위와 같이 동작하는 원리를 알아보겠습니다.

웹브라우저에서 localhost:8080/hello로 요청을 하게 되면 스프링부트가 실행되며 내장되어있는 톰캣 서버는 요청받은 /hello를 가지고 helloController로 들어갑니다. 스프링은 Get 방식으로 해당 url과 매칭된 메서드가 실행되며 이 메서드에서 필요한 Model객체를 만들어 넣어줍니다. data가 hello!!라는 모델을 만들어 주었고 이것을 hello로 리턴을 해줍니다. 그럼 이 모델을 hello로 리턴을 해주게 되면 ViewResolver가 resources폴더 아래에 있는 templates/hello.html을 찾아 변환 후 렌더링을 해줍니다.

그러므로, data: hello!! 가 hello.html에 있는 ${data}로 들어가져 결과적으로 안녕하세요. hello!!가 화면에 띄워집니다. (data를 원하시는대로 바꾸면 바꾼대로 띄워집니다.)

  • Controller에서 리턴 값으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리합니다.
    • 스프링 부트 템플릿엔진 기본 viewName 매핑
    • resources:templates/+{viewName}+ .html

여기서는 hello.html를 매핑.

  • 참고
    spring-boot-devtools 라이브러리를 추가하면, .html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다.
    인텔리 J 컴파일 방법 : 메뉴 build → Recompile

4. 빌드

윈도우 cmd로는 맥과 같은 명령어가 안되므로 다른 터미널로 바꿔줘야합니다. 윈도우 cmd를 powershell로 바꿔줘야합니다. 아래와 같이 하시면 됩니다.
환경변수 필수!! ← 환경변수 하는 방법 링크 참고

빌드하고 실행할 수 있는 파일을 만들어보자. 일단 intelliJ에서 실행했던 것들을 모두 꺼야만 빌드시 오류가 없습니다. 콘솔창에서 프로젝트 파일 경로에 가서 다음과 같이 실행하면 빌드 파일이 build라는 폴더 밑에 생깁니다.

 ./gradlew build

여기서 이 build의 libs 라는 폴더에 들어가보면 .jar 파일이 생성됩니다. 이것이 자바로 실행할 수 있는 빌드 파일입니다.

- 빌드 파일 실행하고 삭제하기

java -jar hello-spring-0.0.1-SNAPSHOT.jar

위의 명령어로 jar파일을 실행하게 되면 실제 서버에도 스프링이 동작합니다. 과거에는 톰캣을 설치하고 war파일을 만들어 집어넣는 등의 복잡한 과정이 필요했지만 지금은 jar파일을 만들어서 그냥 실행만 하면 된다.

- 빌드 파일 삭제

./gradlew clean
// 혹은
./gradlew clean build

위의 명령어를 실행하면 jar 파일을 포함한 build 폴더가 모두 삭제됩니다.


📘 참고

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

[김영한의 스프링 입문] 1. 프로젝트 환경 설정

profile
코딩도시락(배워서 남 주자)

0개의 댓글