gradle 가지고 라이브러리 의존관계를 세팅하고 있다.

 

의존성 전이

과거에는 모든 라이브러리를 직접 다 찾아서 끌어와야 했는데, 이제는 필요한 라이브러리를 선택하면 해당 라이브러리를 사용하는데 필요한 의존관계를 다 긁어 온다.

이것을 의존성 전이라고 한다.

 

스프링 부트에서 확인하고 싶은 라이브러리가 있을 때

어떤식으로 관련된 라이브러리를 사용하고 있는지 확인하고 싶다면?

 

확인하는 방법 1 (cmd에서 확인)

-> d:\mineproject\jpashop>dir

프로젝트폴더가 어디에 있는지 확인
폴더 및 파일을 확인 그리고 dependency가 있는 gradlew디렉터리확인

-> d:\mineproject\jpashop>gradlew dependencies

다음과 같이 dependency tree들이 보인다.

확인하는 방법 2 (IntelliJ에서 확인)

spring-boot-starter

spring-boot-starter-web2.1.13.RELEASE 라이브러리가 있고

spring-boot-starter-tomcat

apache.tomcat.embed:tomcat-embed

spring-webmvc

위의 라이브러리들을 의존하고 있음을 확인할 수 있다.

tomcatwebmvc들을 사용할 수 있는 것이 이러한 의존성 때문에 가능하다.

 

thymeleaf

마찬가지로 thymeleaf와 관련된 라이브러리들이 세팅되어 있고

3버전의 thymeleaf를 사용함을 확인할 수 있다.

 

 

제일 중요한 라이브러리 spring-boot-starter-data-jpa

관련된 라이브러리 중에서 중요한 것은 spring-boot-starter-jdbcHikariCP(커넥션 툴)이라고 한다.

spring-boot 2.대 버전부터는 기본 라이브러리(커넥션 툴)이다.

운영시에도 사용하는 커넥션 툴인데 유용하다.

그리고 data:spring-data-jpa 라이브러리가 설치 되어 있음을 볼 수 있다.

*강의에는 spring-boot-starter-data-jpa:2.1.7 버전, hibernate 5.3.10.이지만,

내가 설치된 라이브러리는 각각 2.1.13, 3.2.0 버전이다.

강의를 들을 당시에는 버전선택이 2.1.132.1.7버전에 제일 가까운 버전이었다.

 

 

spring-boot-starter -> spring-boot-starter-logging

slf4j ->단순한 로그를 찍는 인터페이스 모음

slf4jlogback이라는 구현체를 꽂아서 사용한다.

라이브러리 설정만 조금 바꾸어주면 실제 구현된 로그를 바꿀 수가 있다

slf4j를 쓰는 것이 요즘 대세라고 한다.

 

 

spring-corespring-context

spring-core spring-context 라이브러리는 한묶음으로 거의 같이 사용한다.

spring-boot-starter시리즈를 사용하면 core,context는 패키지로 라이브러리를 사용한다고 한다.

 

 

test 라이브러리

junit-> 기본 라이브러리

mockito->mock객체 만드는 라이브러리

assertj-> 테스트를 편하게 할 수 있도록 도와주는 라이브러리

spring-test ->기본라이브러리

H2 database -> h2버전과 접근하는 클라이언트 버전과 맞지 않으면 충돌이 일어남

 

 

종합해서 라이브러리 요약정리하자면 다음과 같다.

 

테스트 라이브러리

spring-boot-starter-test

junit: 테스트 프레임워크

mockito: 목 라이브러리

assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리

spring-test: 스프링 통합 테스트 지원

 

핵심 라이브러리

스프링 MVC

스프링 ORM

JPA, 하이버네이트

스프링 데이터 JPA

 

기타라이브러리

H2 데이터베이스 클라이언트

커넥션 풀: 부트 기본은 HikariCP

WEB(thymeleaf)

로깅 SLF4J & LogBack

테스트

 

참고: 스프링 데이터 JPA는 스프링과 JPA를 먼저 이해하고 사용해야 하는 응용기술이다.

프로젝트 환경설정

1. 프로젝트 생성(https://start.spring.io/ 로 들어간다.)

프로젝트 생성

-프로젝트를 만들고 라이브러리를 살펴본다.

-html 화면렌더링하기 위해 뷰와 관련된 환경설정

-H2 DATABASE를 설정하고

-JPA랑 데이터베이스 설정하고

실제로 돌아가는지 확인할 예정

 

프로젝트

-Gradle

*Maven에서 Gradle로 많이 넘어 가는 추세이다.

*2.2버전 이상으로 설정 할 경우에는 조금 환경이 달라질 수 있다.

 

Spring Boot 버전

-안정화된 2.1.7버전으로

 

Dependencies - 라이브러리 추가

Spring web starter

-Build web Restful App, Spring MVC, Apache Tomcat as default embedded container

 

Thymeleaf

-modern server side jave template engine

*서버사이드

*JSP는 요즘 사용하지 않는다. 성능이나 여러 가지 이슈들이 있기 때문.

스프링부트 내장톰캣에서도 권장하지 않는다.

 

Spring Data JPA (유틸리티 성 라이브러리)

-스프링 데이터 jpa 대해서 설명을 하지 않을 예정

-스프링 jpa로 어떻게 잘 어플리케이션 만드는 법을 아는 것이 중요

그래서 jpa에 대해서 개인적으로 깊이 알고 공부하는 것이 좋고, 이번에는 도움용으로 사용하는 것이 좋음

 

H2 DATABASE

-개발하거나 테스트할 때 유용하다.

-H2 데이터베이스 설치는 간단하다. MYSQL을 어렵다.

-메모리를 내장상태에서 실행할 수도 있다. 간단하게 교육용 장점이 있따.

 

Lombok

-지루하게 반복하는코드(boilerplate code)를 줄여준다라는 의미

 

 

2. Intelli J 설치

https://www.jetbrains.com/ko-kr/idea/

 

IntelliJ IDEA: JetBrains가 만든 전문 개발자용 Java IDE

Enterprise Java, Scala, Kotlin 등을 지원하며 강력한 기능을 제공하고 인체 공학적으로 설계된 Java IDE

www.jetbrains.com

3. build.gradle import

4. build.gradle 알아보기

plugins{ }

안에 내용은 다음과 같다.

-springboot 2.1.13버전 설치 표기

*plugin이 라이브러리 까지 관리를 해주기 때문에 2.1.14로 변경할 경우

 다른 라이브러리 버전까지 전부 업그레이드 된다.

-springboot에 필요한 dependency 필요한 라이브러리 추가 되었다는 내용

-java언어 설치 표기

 

sourceCompatibility ='1.8'

-자바 버전

 

configurations {	
               compileOnly {	 
                extendsFrom annotationProcessor	
               }

-Lombok으로 인해 생성된 코드들. annotation processor가 핵심!

 

repositories {	
             mavenCentral()
}

-repositories mavenCentral에서 라이브러리를 다운로드 받겠다라는 의미

 

dependencies {	
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'	
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'	
implementation 'org.springframework.boot:spring-boot-starter-web'	
compileOnly 'org.projectlombok:lombok'	
runtimeOnly 'com.h2database:h2'	
annotationProcessor 'org.projectlombok:lombok'	
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

-내가 프로젝트 생성시 선택한 dependencies 라이브러리들이 나와 있다.

 

5. 환경세팅  확인_1

JpashopApplication에서 generation codemain method가 있으니 실행시켜보자.

-Tomcat started on port(s): 8080(http) with context.. 가 보인다.

 

제대로 시작이 되었는지 실행해보자. 지금까지 아무것도 만들지 않았으니 흰색페이지에

글자 몇개만 나와야 정상이다. 실행시켜 보니 정상세팅이 되었음을 확인!

6. 환경세팅  확인_2

테스트케이스 실행

External libraries에 라이브러리가 왜이렇게 많은가

-예를 들어 JPA 라이브러리가 있다면

 JPA와 의존된 라이브러리들을 다운로드 받는 행위가 다른 라이브러리에서도 일어나기 때문에 많아지게 된 것이다.

 

*예전에는 웹어플리케이션 개발을 위해 세팅만 1주일이 걸렸다고 한다.

지금까지 실행하는 것들을 쉬지 않고 이행했다면 몇분도 걸리지 않았을 것 같다..

 

7. Lombok세팅확인 (#마주한에러해결)

-Lombok 사용하면 작성해야 할 코드양을 줄여준다.

 

객체를 만들때 변수선언, 기본생성자 Getter, Setter까지 메소드를 작성해줘야 하지만,

Lombok 플러그인은 생성을 한번에 해결가능하다. 사용할 변수 선언만 해주고

클래스명 위에 @Data라는 annotation을 선언해주면 끝이다.

 

*Lombok을 사용하기 위해서 plugin을 설치해야 한다.

 

Lombok 세팅확인 : 세팅확인순서

File->Setting->Plugins->lombok검색->install->restart IDE->

*Lombok설치후 꼭 해주어야 할 것

File->Setting->Plugins->Compiler->annotation processor에서 enable 클릭

 

Lombok 실제 동작 확인

다시한번 Lombok설정이 잘 작동되는지 코드를 실행(RUN)으로 확인

#마주한에러해결1

다음과 같은 에러 발생

Caused by: java.net.BindException: Address already in use: bind

확인해보니 톰캣 서버의 포트가 열려 있는 상태에서 코드실행하면 발생하는 에러라고 한다.

 

CMD창에서

netstat -ano 또는 netstat -a -n -o로 활성연결된 톰캣의 8080포트확인

taskkill /f /pid 2536 (8080포트로 활성화된 프로세스를 종료함)

이후 다시 실행해도 코드실행완료되지 않아 무슨 문제인지 보았더니

그리고 SpringApplication.run(JpashopApplication.class, args)을 삭제하지 않은 것이었다.

지웠더니 코드실행 및 출력이 에러 없이 완료 되었다.

 

 

다시 재실행 하니 data = hello가 보인다.

 

환경설정 추가

최근 IntelliJ 버전은 Gradle로 실행을 하는 것이 기본 설정이다.

이러한 기본설정은 실행속도가 느리기 때문에 다음과 같이 변경하기로 한다.

Setting-> Build, Execution, Deployment-> Build Tools -> Gradle

Gradle Build and run using: Gradle -> IntelliJ IDEA

Run tests using: Gradle -> IntelliJ IDEA

 

프로젝트생성까지 완료!!

스프링부트란

-복잡하고 어려운 스프링기술을 간결하고 쉽게 사용할 수 있도록 도와주는 기술

 

JPA

-강력한 ORM 기술

-자바진영에서는 두가지 기술의 조합으로 높은 생산성과 맵 어플리케이션을 개발하는 추세

 

목표

-프로젝트를 처음부터 끝까지 코딩으로 완성하는 것이 목표

 

목록

프로젝트 환경설정

-스프링부트

-Gradle

-JPA

-톰캣

-Thymeleaf(타임리프)

-HIBERNATE

 

요구사항 분석

-쇼핑몰 구축을 위한 요구사항 분석

 

도메인설계

-요구사항기반으로

 

엔티티설계

 

테이블설계

 

JPA로 엔티티와 테이블을 ORM으로 맵핑

 

애플리케이션 아키텍쳐 구성

 

핵심비즈니스 로직개발

-테스트케이스로 이것을 검증한다.

 

=>이것들을 하게 되면 도메인 주도 설계를 이해 할 수 있다.

=>이것을 기반으로 웹계층개발을 올린다.

=>컨트롤러 타임리프로 올려서 HTML이 렌더링 되게 만든다.

+ Recent posts