- 빌드(build)란?
- 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물 이다.
- 이를 좀더 쉽게 풀어 말하자면 우리가 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties)을 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.
- 빌드 도구(Build tool)
- 빌드 도구란 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램.
- 빠른기간동안 계속해서 늘어나는 라이브러리 추가, 프로젝트를 진행하며 라이브러리의 버전 동기화의 어려움을 해소하고자 등장.
- 초기의 java 빌드도구로 Ant를 많이 사용하였으나 최근 많은 빌드도구들이 생겨나 Maven이 많이 쓰였고, 현재는 Gradle이 많이 쓰인다.
- Maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다.
Property Defaults
Spring에서 제공하는 thymeleaf는 기본적으로 캐싱 기능을 사용합니다. 하지만 개발과정에서 캐싱이 되어있다면, 우리가 thymeleaf 파일을 수정하더라도, 반영되지 않을 거에요. Application cache 설정값을 false로 수정해야 하죠.
이러한 작업을 Spring Boot DevTools에서 제공합니다. 개발 시점과 배포 시점에 다른 설정을 기본적으로 개발 단계에 맞춰 설정해줍니다. 예를 들어 템플릿 엔진의 캐싱 기능을 개발 단계에서 자동으로 꺼주는 역할을 하죠. 따라서 개발자는 설정 파일을 건드리지 않아도 된답니다.Automatic Restart
Spring Boot Application을 개발하다 보면 애플리케이션을 재시작해야 하는 경우가 많더라구요. 심지어 클래스의 필드 하나를 고쳐도 Ctrl + R 단축키를 누르는 수고스러움을 감수해야 하죠. Spring Boot DevTools는 이 기능을 자동으로 제공합니다. 파일 수정 후 저장을 하면, Classpath에 존재하는 파일의 변경을 감지하고, 자동으로 서버를 restart 해줍니다. 설정을 통해 원하는 디렉터리만을 트리거로 설정할 수도 있어요!
Spring Boot 에서는 jdbc연동을 위한 starter를 제공하는데, jdbc starter는 아래와 같이 추가할 수 있다.
먼저 Java의 javax.sql.DataSource 인터페이스는 Database Connection을 위한 standard method를 제공한다. DataSource 인터페이스를 사용하기 위한 구현체를 선택해야 하는데, spring-boot-starter-jdbc 또는 spring-boot-starter-data-jpa 를 추가하면 Spring Boot에서는 DataSource 관리를 위한 구현체로써 tomcat-jdbc을 default로 제공한다.Spring Boot에서의 DataSource 설정
Spring Boot 애플리케이션에서 Java Config 를 통해 DataSource를 설정하는 방법을 알아보도록 하겠다.
DataSource 의 설정은 application.properties 파일내에서 spring.datasource.* 와 같은 패턴으로 설정이 가능하다.
웹 서비스를 만들 때에는 서버의 데이터와 정적자원(html, css, image)을 조합해야 하는데, 서버에서 데이터를 보내 웹 서비스를 만드는 방법에는 크게 2가지가 있다.
- SPA(Single Page Application)
최초 한번 전체페이지를 다 불러오고 응답데이터만 페이지 특정부분 렌더링.
- SSR(Server Side Rendering)
전통적인 웹 애플리케이션 방식. 요청시마다 서버에서 처리한 후 새로고침으로 페이지에 대한 응답.보통 자바에서 웹 개발시 JSP(Java Server Page)를 이용하여 진행했다. JSP를 사용하면 <% %>형태의 스크립트릿을 사용하여 개발하였다. 그러나 이 방식은 스크립트릿과 Html이 혼재된 상태가 되고 html태그의 반복적인 사용으로 인해 유지보수하기 어려운 상황이 많았다.
이러한 상태를 해결할 수 있는 것이 바로
템플릿 엔진 이다.
템플릿 엔진이란 html(Markup)과 데이터를 결한한 결과물을 만들어 주는 도구다.
타임리프(Thymeleaf)는 이 템플릿 엔진중 하나다. 스프링 부트에서는 JSP가 아닌 타임리프를 사용할 것을 권장한다.
보통 Spring으로 개발을 하게되면 view단을 JSP를 많이 사용되는데
그 외에 thymeleaf, freemarker, mustache, velocity 등 다양한 템플릿을 가져다 쓴다.
Thymeleaf는 JSP와는 달리 서버에서 컴파일 되지않고 바로 웹브라우저에서 해석이 되는데 이는 브라우저가
해석을 할 수 있는 마크업 언어로 이뤄져있기 때문이다.
- 템플릿 엔진이란?
템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 결합하여 원하는 결과 문서를 출력하는 소프트웨어(또는 컴포넌트)를 말한다. 주로 View를 만들 때 사용한다.
동적 컨텐츠를 생성해서 제공해야할 때 템플릿 엔진을 유용하게 사용할 수 있다.
- Thymeleaf 문법
표현식
변수 : ${…}
선택 변수 : *{…}
메시지 : #{…}
Link URL : @{…}## 타임리프에서 a태그를 작성 ## th:href="@{}" <!-- 특정 url로 이동 --> <a th:href="@{https://developer-rooney.tistory.com}">글 상세보기</a> <!-- 현재 서버 내에서 이동 --> <a th:href="@{/board/list}">게시글 리스트</a> <!-- 파라미터를 넘길 시 --> <a th:href="@{/board/view(id = ${board.id})}">글 상세보기</a> <!-- 파라미터를 여러 개 넘길 시 --> <a th:href="@{/board/view(id = ${board.id}, writer = ${board.writer}})}">글 상세보기</a> <!-- PathVariable 사용 시 --> <a th:href="@{/board/view/{id}(id = ${board.id})}">글 상세보기</a>
- if / else 문법
- assignment
- switch, case
- board list
Apache Commons Lang 3 라이브러리 는 Java API의 기능 확장을 목표로하는 인기 있고 모든 기능을 갖춘 유틸리티 클래스 패키지입니다 .
라이브러리의 레퍼토리는 문자열, 배열 및 숫자 조작, 반영 및 동시성에서 쌍 및 트리플 (일반적으로 튜플 이라고 함)과 같은 여러 순서가 지정된 데이터 구조의 구현에 이르기까지 매우 풍부 합니다.
MyBatis-Spring-Boot-Starter를 사용하면 스프링부트 위에 MyBatis 애플리케이션을 빠르게 빌드 할 수 있습니다 .
- 마이바티스는 개발자가 지정한 SQL , 저장 프로시저, 그리고 몇 가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크입니다. 마이바이트는 JDBC 로 처리하는 상당 부분의 코드와 파라미터 설정, 결과 매핑을 대신해줍니다.
- 매퍼(Mapper)
Mybatis 매핑(어노테이션 혹은 xml 파일)에 기재된 SQL을 호출하기 위한 인터페이스이다.
매퍼는 반드시 구현체 클래스가 아닌 인터페이스로 정의되어야 한다.
한번만 설정하면, 다른 스프링 빈에 주입하는 같은 방법으로 비즈니스/서비스 객체에 매퍼를 직접 주입할 수 있다.- MyBatis-Spring-Boot-Starter 효과
- DataSource 를 자동 감지합니다.
- SqlSessionFactory 를 전달 하는 인스턴스를 자동 생성하고 등록합니다
- DataSource.SqlSessionFactoryBean 의 인스턴스를 만들고 등록합니다.
- @Mapper주석이 표시된 매퍼를 자동 스캔하고 연결합니다.
- SqlSessionTemplateSpring 컨텍스트에 등록하여 Bean에 주입 할 수 있도록합니다.
Spring Boot Devtools 출처 링크
spring-boot-starter-jdbc 출처 링크
Maven 출처 링크
MyBatis-Spring-boot-Starter 출처 링크