* 이 포스트는 인프런에 있는 김영한 님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 들으면서 내용을 정리한 글입니다. *

 

[메인 컨텐츠]

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

 

# 2022-03-03 #

 

#목차#

1. gradle에서 외부 라이브러리를 당겨오는 원리

2. gradle에서 당겨 오는 라이브러리의 종류

+ 몰랐던 개념들 / 더 알아볼 개념들


1. gradle에서 외부 라이브러리를 당겨오는 원리

 

gradle은 빌드 관리 도구로, 스프링에서 필요한 라이브러리를 당겨 온다.

그런데 스프링의 라이브러리들은 서로 의존관계가 있다. gradle은 외부 라이브러리를 당겨올 때 내가 지정한 라이브러리 뿐만 아니라, 그 라이브러리가 의존하는 다른 라이브러리까지도 모두 당겨온다. 그래야 그 라이브러리를 사용할 수 있다. 결과적으로 당겨오다 보면 spring core 라이브러리까지 모두 당겨오게 된다. 즉 처음에 선택한 라이브러리 당겨오기->그 라이브러리가 의존하는 다른 라이브러리 당겨오기-> ... 더 이상 의존하는 라이브러리가 없을 때까지 이런 방식으로 필요한 모든 라이브러리를 당겨온다. 그렇기 때문에 내가 필요하다고 지정한 라이브러리에 비해서 실제로 당겨온 라이브러리가 훨씬 많다. 

 

그래서 어떤 라이브러리를 당겨 왔는지를 보려면 Intellij 화면 왼쪽의 프로젝트 탭에서 External Libraries를 보면 된다. 또는 화면 우측 상단에 마우스를 대면 Gradle이라는 버튼/탭이 나오는데, 그 탭을 누르면 스프링이 의존관계에 기반해서 어떤 라이브러리를 당겨 왔는지를 순차적으로 볼 수 있다. 


2. gradle에서 당겨 오는 라이브러리의 종류

 

이 프로젝트에서는 어떤 라이브러리를 당겨 왔을까?

너무 많아서 간단하게 3가지만 다뤘다. 

 

1) 내장형 웹 서버 Tomcat

 

톰캣(tomcat)은 웹 서버이다. 스프링같은 프레임워크가 발달하기 전에는 톰캣을 따로 설치하고, 그 안에 자바 코드를 밀어넣는 방식으로 웹 서비스를 만들었다고 한다. 그러나 스프링에서는 내장형 웹 서버로 톰캣을 사용할 수 있는 라이브러리를 만들었다. 따라서 이 라이브러리를 당겨오기만 하면(설치하기만 하면) 톰캣을 따로 설치하는 과정이 없이도 웹 서버를 실행할 수 있게 바뀌었다고 한다. 

 

스프링 3강에서 웹 서버를 실행할 때, 톰캣 서버는 HelloSpringApplication.java 의 메인 메소드를 실행하면 바로 실행되었다. 즉 스프링에서 당겨오는 라이브러리와 상관 없이 내장형 톰캣 서버 라이브러리(정확한 명칭은 모른다)는 항상 설치된다는 말이다.

= 이 내장형 톰캣 서버 라이브러리는 기본적으로 당겨오는 라이브러리로, spring boot 라이브러리가 의존하고 있는 라이브러리이다. 

 

+ 내장형 웹 서버의 개념이 생소하고 웹 서버의 개념도 생소하다... 개념을 좀 더 알아보도록 하자. 

 

 

2) 로깅(Logging) 라이브러리

 

[참고한 포스트]

로깅에 대하여 (tistory.com)

SLF4J 이용하여 로그 남기는 방법 (with Logback) (tistory.com)

 

로깅이란 말 그대로 로그를 남기는 것이다. 로그는 웹 서버에서 남기는 일종의 기록이다. 개발자들은 System.out.println()을 쓰는 대신 로그를 남긴다고 한다. 그 이유는 로그의 레벨(WARN, INFO, FATAL 등등등)에 따라서 로그를 모아 보기도 쉽고, 외부 파일에 저장하기도 쉽기 때문이다. 반면 println() 메소드는 계속 사용한다면 프로그램 실행 속도를 저하시킨다는 문제도 있기 때문에 로깅 라이브러리가 사용된다. 

 

로그 레벨은 TRACE-DEBUG-INFO-WARN-ERROR 으로 5개의 레벨이 있다. 오른쪽으로 갈수록 심각성이 크다. 로깅 라이브러리를 사용하면 원하는 레벨의 로그만 모아서 볼 수 있으며, 로그의 근원지에 따라서 다른 기준치의 로그 레벨을 사용할 수도 있다. 

ex) A 클래스에서 발생하는 로그는 INFO 레벨 이상(INFO 및 INFO보다 심각성이 높은 레벨인 WARN, ERROR)만 출력하고, B 클래스에서 발생하는 로그는 ERROR 레벨만 출력하도록 구체적인 로깅 설정을 할 수 있다. 

 

 

아무튼 강의에서는 크게 2가지의 로깅 라이브러리를 언급했다. 물론 이거 말고도 여러 라이브러리가 있다. 

 

(1) slf4j

: 로그를 남길 때 어떤 구현체로 남길지를 선언한 인터페이스라고 한다. 즉 로그를 직접 남기는 라이브러리는 아니지만, 어떤 구현체를 사용해서 로그를 남길 때 어떤 방법으로 남길지를 선언한 라이브러리다. 로깅 인터페이스를 사용하면 나중에 더 좋은 로깅 구현체가 생겨서 구현체 라이브러리를 교체하더라도, 따로 코드를 변경하지 않아도 된다는 장점이 있다. 

 

(2) logback

: 로그를 남기는 라이브러리이며, slf4j와 달리 인터페이스가 아니라 구현체이다. 또한 

 

또한 여러 로깅 라이브러리 중에서 스프링이 기본적으로 사용하는 로깅 라이브러리가 정해져 있다. Apache의 commons-logging 라이브러리인데, 이 경우 다른 로깅 라이브러리를 당겨와도 기본 라이브러리가 있어서 사용되지 않을 수 있다. 이런 경우는 logback 라이브러리를 기본으로 사용하면서도 commons-logging 라이브러리와 똑같은 구조를 가진 jcl-over-slf4j 라이브러리를 당겨오면 된다고 한다. 로깅 라이브러리를 사용할 때도 고려할 점이 많은 것 같다.

 

 

3) 테스트 라이브러리

 

앞서 3강에서는 프로젝트 기본 구조에서 main 디렉토리 말고 test 디렉토리가 따로 생성되어 있다고 했다. 이만큼 테스트의 중요도가 크다. 따라서 gradle에서도 기본 설정으로 테스트 라이브러리를 당겨온다. 정확한 테스트 과정은 모르지만, 대표적인 몇 개의 테스트 라이브러리를 살펴보자. 

 

(1) jUnit

가장 많이 사용되는 테스트 라이브러리이다. 

 

(2) mockito, assertj

테스트를 간편하게 실행할 수 있도록 도와주는 라이브러리이다. 

 

(3) spring-test

테스트 라이브러리들을 스프링 환경에서 바로 실행할 수 있도록 스프링 환경과 연결해 주는 라이브러리이다. 


+ 몰랐던 개념들 / 다음에 더 알아볼 개념들

1. 웹 서버의 개념, 내장형 웹 서버의 개념, tomcat은 구체적으로 무엇인지

2. 로깅의 실제 활용 방법, 로깅 인터페이스와 로깅 구현체 라이브러리는 구체적으로 어떻게 구성되었는지

3. 테스트 라이브러리에서는 어떤 기능을 제공하며, 테스트는 어떤 순서대로 실행되는지

 

'server-side > spring' 카테고리의 다른 글

spring 개발일지 15-16강  (0) 2022.03.05
spring 개발일지 10-12강 + 개발 고민주제 틈틈이 정리  (0) 2022.03.04
spring 개발일지 5-6강  (0) 2022.03.03
spring 개발일지 1-3강  (0) 2022.03.02
spring 개발일지 #0  (0) 2022.03.01

+ Recent posts