Web/Spring

스프링 프로젝트 환경설정

느낌표 공장장 2021. 7. 20. 23:56

폴더 & 파일 설명 

  • .Idea :  intelli J가 사용하는 설정 파일
  • src 
    • main 
    • resources : 자바 파일 제외한 파일들 (xml, html, properties, 설정 파일 등)
  • test : 테스트 코드 소스들이 들어감.
  • build.gradle : plugin 에 우리가 spring boot에서 프로젝트 선택 부분에서 선택한 버전, 언어 등이 들어간다.
    • sourceCompatibility : 자바 버전
    • dependencies : dependencies에서 선택했던 것과 test library 들어가 있다.
    • repositories: 현 강의에서는 mavenCentral()이 들어가 있는데(공개된 사이트), dependencies에 있는 라이브러리를 여기에서 다운로드한다. 필요하면 특정 사이트 url을 넣을 수 있다.
  • .gitignore깃에는 필요한 소스코드만 올라가고 나머지 빌드된 결과물 이런 거 올라가면 안 되니, 그런 것들을 설정해준다.

 

* IntelliJ Gradle 대신에 자바 직접 실행하기

preference -> build tools -> gradle에서 build and run using run tests using을 IntelliJ로 바꿔주면 Gradle을 통해서 실행하지 않는다.(Gradle을 통해서 실행하면 좀 느릴 수 있음)


라이브러리 살펴보기

* Gradle은 의존관계가 있는 라이브러리를 함께 다운로드한다.(-> 한 라이브러리를 가져오면, 그 라이브러리와 의존 관계인 라이브러리를 다 한 번에 땡겨온다)

 

* 예전에는 웹서버(WAS)를 직접 서버에 설치해놓고(톰캣 같은 거) 거기에 자바 코드를 집어넣는 식이었다. (웹서버와 개발 라이브러리는 분리되어있었음)
   요즘에는 소스 라이브러리에서 웹 서버를 들고 있다.(내장하고 있음) 실행만 하면 웹서버가 뜬다.

 

< 스프링 부트 라이브러리 >

  • 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
        : 실제 로그를 어떤 구현체로 출력할 거야? 해서 요즘은 logback 많이 선택한다. 성능도 빠르고 여러 가지 지원하는 기능 좋다. 쉽게 말하면 인터페이스
        !
        ➡︎ 요즘은 이 두 가지 섞어서 많이 쓴다. 그래서 위의 spring-boot-starter-logging 땡기면 이 둘 따라옴

< 테스트 라이브러리 >

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

 

* 출력할 때 프린트 말고 로그로 출력해야 한다. 왜냐하면 로그로 남겨야 심각한 에러만 따로 모아볼 수 있고 로그 파일들이 관리가 된다. 그래서 System.out.println(); 거의 안 쓴다.

 


view 환경설정

스프링 부트가 제공하는 Welcome Page 기능

  • static/index.html 을 올려두면 Welcome page 기능을 제공한다.
    (스프링 부트는 스프링 생태계를 감싸서 편리하게 사용할 수 있도록 도와준다. 스프링은 자바 엔터프라이즈 웹 애플리케이션 개발 전반의 기능을 다 제공한다. 따라서 다 기억할 수 없으므로 필요한 것을 찾는 것이 중요하다. ➡︎ 여기서! )

 

* 템플릿 엔진을 쓰면 루프를 넣는 등. html 문서를 바꿀 수 있다.

// controller는 아래 어노테이션 붙여주기
@Controller 
  public class HelloController {
      @GetMapping("hello")
      public String hello(Model model) {
          model.addAttribute("data", "hello!!");
          return "hello"; // templates > hello.html 을 처리
      }
}
  • @GetMapping에서 /hello라고 들어오면 이 메서드를 수행시킨다. (GetMapping의 get은 http의 get 메서드, post 메서드에서 그 get 임)
  • addAttribute에 이름과 값을 넣어주면, resources> templates > hello.html의 ${data}에서 data이름을 받았으니 hello!!라는 값을 반환한다. 

 

컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver )가 화면을 찾아서 처리한다. 

  • 뷰 리졸버는 어떻게 기본적으로 세팅되어있을까?
    • 스프링 부트 템플릿엔진 기본 viewName 매핑
    • resources:templates/ +{ViewName}+ .html

 


빌드하고 실행하기

콘솔에서

  1. ./gradlew build
  2. cd build/libs
  3. java -jar hello-spring-0.0.1-SNAPSHOT.jar
  • 배포할 때는 hello-spring-0.0.1-SNAPSHOT.jar 만 서버에 넣어주고 java -jar ~ 실행하면 서버에서 스프링이 작동한다.
  • 잘 안될 때는 hello-spring 폴더로 이동해 ./gradlew clean build 해준다. 그럼 build 폴더가 완전히 지워졌다가 새로 만들어진다.

 

 

 

 

 


참조

이 게시물은 인프런 > 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술의 강의를 토대로 작성한 게시물입니다.

'Web > Spring' 카테고리의 다른 글

회원 관리 예제 - 백엔드 개발  (0) 2021.07.25
스프링 웹 개발 기초(정적 컨텐츠, MVC와 템플릿 엔진, API)  (0) 2021.07.24
Application Scope  (0) 2021.06.24
Session Scope  (0) 2021.06.24
request scope  (0) 2021.06.24