Spring 기초 개념 잡기

Spring 기초 개념 잡기

JDK당 Spring Framework 버전

JDK 8+ => spring 5.x

JDK 6+ => spring 4.x

JDK 5+ => spring 3.x

Missing tools 오류 발생시

해당 오류가 발생하 때는 보통 JRE가 PC에 설치된 JRE폴더의 VM을 참조해 발생하는 문제이다.

PC의 JDK폴더 내부의 JRE VM을 참조하도록 설정을 변경한다면 문제가 해결된다.

Missing문제 발생

이후 java jdk가 설치된 폴더를 선택 후 apply한다

home.jsp의 실행 과정

가장 먼저 web,xml을 참조하게 된다. (웹 프로젝트의 배치 기술서)

=> 웹 프로젝트의 중요한 정보들을 가지고 있는 환경 설정 파일이라 할 수 있다.

=> 웹 프로젝트의 중요한 정보들을 가지고 있는 환경 설정 파일이라 할 수 있다. Spring 내에 자체적으로 내장된 DispatcherServlet을 디폴트 서블릿으로 지정한다.

=> 이후 모든 서블릿 요청은 DispatcherServlet에서 처리허개 된다.

bean의 내용을 xml로 등록하는 방법

ex)

=> HomeController hc = new HomeController();

bean을 자동으로 검색하도록 만드는 방법

ex)

bean을 설정할 때 자주 쓰이는 annotation

@Controller : 컨트롤러 빈

@Repository : dao(데이터베이스에 관한 작업) 빈

@Service : 서비스(비즈니스에 관한 로직) 빈

@Inject : 의존관계를 넣어준다.

@autowired : 각 상황의 타입에 맞는 IoC컨테이너 안의 빈을 자동으로 넣어준다.

Spring Maven 디렉토리의 구조

src /main/java : 자바 코드들이 들어간다. (Controller, Model, Service)

: 자바 코드들이 들어간다. (Controller, Model, Service) src /main/resources : 자바 코드에서 참조하는 리소스 파일들이 들어간다.

ex) sqlMapConfig.xml, mybatis에서의 mapper 등

: 자바 코드에서 참조하는 리소스 파일들이 들어간다. ex) sqlMapConfig.xml, mybatis에서의 mapper 등 src /test/java : 개발이 어느정도 완료되면 JUnit등을 통한 테스트에 쓰이는 코드들이 들어간다.

: 개발이 어느정도 완료되면 JUnit등을 통한 테스트에 쓰이는 코드들이 들어간다. srs /test/resources : 테스트 코드들이 참조하는 리소스 파일들

: 테스트 코드들이 참조하는 리소스 파일들 src/main /webapp : 웹 서비스에 대한 루트 폴더 (외부에서 접근이 가능하다.)

: 웹 서비스에 대한 루트 폴더 (외부에서 접근이 가능하다.) src/main/webapp /resources : js, css, image 등 웹 리소스 파일들이 들어간다.

: js, css, image 등 웹 리소스 파일들이 들어간다. src/main/webapp/WEB-INF /classes : 컴파일 완료된 클래스들이 들어간다.

: 컴파일 완료된 클래스들이 들어간다. src/main/webapp/WEB-INF /spring : 스프링에 대한 환경설정 파일이 들어간다.

: 스프링에 대한 환경설정 파일이 들어간다. src/main/webapp/WEB-INF/spring /root-context.xml : 서블릿에 관련되지 않은 모든 리소스들에 대한 설정파일

: 서블릿에 관련되지 않은 모든 리소스들에 대한 설정파일 src/main/webapp/WEB-INF/spring /appServlet/servlet-context.xml : 서블릿에 관한 리소스들에 대한 설정파일

: 서블릿에 관한 리소스들에 대한 설정파일 src/main/webapp/WEB-INF /views : html이나 jsp페이지가 들어간다.

: html이나 jsp페이지가 들어간다. src/main /webapp/WEB-INF : 보안을 위해 외부에서는 접근이 불가능하다. 단, 컨트롤러를 경유해서는 접근이 가능하다.

: 보안을 위해 외부에서는 접근이 불가능하다. 단, 컨트롤러를 경유해서는 접근이 가능하다. pom.xml : Maven에서 참조하는 설정 파일이다.

Spring의 주요한 특징

POJO (Plain Old Java Object) 기반의 구성 : 별도의 API가 필요하지 않고 일반 자바 코드만으로 개발이 가능하다.

(Plain Old Java Object) 기반의 구성 : 별도의 API가 필요하지 않고 일반 자바 코드만으로 개발이 가능하다. 의존성 주입(DI)를 통해 객체간의 관계를 구성하게 된다.

AOP(Aspect Oriented Programming) 지원 : 반복되는 코드를 줄이고 개발자가 비즈니스 로직에만 집중이 가능하도록 지원한다.

개발에 편리한 MVC구조로 이루어져 있다.

WAS에 종속적이지 않은 개발 환경을 제공해준다.

IoC (Inversion of Control, 제어의 역전)

객체에 대한 제어권을 의미한다.

기존에는 개발자에게 객체 제어권이 있었다. (new 연산자)

Spring이 등장한 후에는 객체 제어권을 Spring에게 넘겨주게 되었다.

인스턴스의 생명주기를 개발자가 아니라 Spring Framework가 담당하게 된다.

DI (Dependency Injection, 의존관계 주입)

객체간의 의존성을 개발자 대신 Spring Container가 주입시켜주는 기능이다.

객체를 더욱 쉽게 확장하며 재사용이 가능해진다.

강한 결합관계와 느슨한 결합관계의 예

// 생성자가 private으로 바뀌면 PersonDo 클래스도 함께 수정해야 한다. class PersonDo { public PersonDo() { Person p = new Person(); } } public class Person { String userEmail; String password; String name; private Person() { } }

=> 강한 결합관계의 예

// 생성자가 private로 바뀌게 되더라도 메인 클래스에 영향을 주지 못한다. class PersonDo { public PersonDo(Person p) { } } public class Person { String userEmail; String password; String name; private Person() { } }

=> 느슨한 결합관계의 예

Logging Tools

로깅을 위한 도구를 사용하는 이유

System.out.println() 명령어는 IO에 대한 리소스를 많이 사용하게 되어 시스템이 느려질 가능성이 있다.

로그를 콘솔에서 일회성으로 소모하는 대신 파일로 저장하여 분석할 필요성이 있다.

Logging Tool의 종류

commons-logging : Spring 3에서 주로 사용되던 도구.

log4j : 효율적인 메모리 관리 능력으로 인해 많이 사용되어왔다.

logback : log4j에 비해 더 우수한 성능으로 인해 많이 사용되는 추세

: log4j에 비해 더 우수한 성능으로 인해 많이 사용되는 추세 SLF4J : logback을 사용하기 위한 인터페이스

Logback에 대해

자바의 오픈소스 로깅 프레임워크로 스프링 부트에서는 기본 로그 객체로 쓰인다.

Logback의 설정파일은 크게 appender와 logger의 두 부분으로 나뉜다.

appender는 어디에 어떻게 로그를 사용할 것인가에 대한 설정을 하는 부분이다.

appender의 종류

- ConsoleAppender : 콘솔에 로그를 찍도록 한다.

- FileAppender : 파일에 로그를 찍는다.

- RollingFileAppender : 여러개의 파일에 번갈아 로그를 찍는다.

- SMTPAppender : 로그를 메일에 찍어 전송한다.

- DBAppender : 데이터베이스에 로그를 찍는다.

- SocketAppender, SSLSocketAppender 등

- ConsoleAppender : 콘솔에 로그를 찍도록 한다. - FileAppender : 파일에 로그를 찍는다. - RollingFileAppender : 여러개의 파일에 번갈아 로그를 찍는다. - SMTPAppender : 로그를 메일에 찍어 전송한다. - DBAppender : 데이터베이스에 로그를 찍는다. - SocketAppender, SSLSocketAppender 등 logger는 appender들을 참조하며 해당 로거가 사용될 패키지와 로그 레벨을 지정해준다.

로그의 레벨

- Debug : Debug, Info, Warn, Error를 모두 포함한다.

- Info : Info, Warn, Error를 포함한다.

- Warn : Warn과 Error를 포함한다.

- Error : Error만 포함한다.

SLF4J 설정하기

pom.xml에 slf4j-version을 최신 버전으로 설정하기

이를 위해서는 mavenrepository사이트를 활용할 수 있다.

https://mvnrepository.com/

SLF4J의 버전을 최신 버전으로 유지하기

pom.xml에서 로깅에 대한 의존성을 모아놓은 부분에 logback에 대한 코드를 추가해주기

ch.qos.logback logback-classic 1.2.3

src/main/resources경로에 logback.xml파일 작성

%d{HH:mm:ss:SSS} [%thread] %-4level [%logger.%method:%line] - %msg %n /WEB-INF/logback.log logback.%d{yyyy-MM-dd}.log 30 %d{yyyy-MM-dd HH:mm:ss:SSS} %d-4level [%logger.%method:%line] - %msg %n

로그를 수집하고자 하는 클래스에 해당 변수를 선언한다.

// private를 통해 외부에서 로그를 가로채지 못하도록 만들어 보안성을 증가시켜준다. // static final키워드를 넣어줌으로서 로그 내용이 바뀌지 않도록 해준다. private static final Logger logger = LoggerFactory.getLogger(클래스명.class);

로그를 수집할 메소드에서 로그 수집을 위한 명령어를 호출한다.

logger.info("로그 제목", 확인할 값);

참고 1 : https://jeong-pro.tistory.com/154

참고 2 : https://jamong-icetea.tistory.com/177

from http://codingtrainee.tistory.com/172 by ccl(A) rewrite - 2020-03-06 05:20:47

댓글

이 블로그의 인기 게시물

데이터 바인딩 추상화 - propertyEditor

[sts] spring boot groovy 적용 실행 하기

2020 LCK 롤챔스 Spring 경기 재개 및 일정