리눅스/Window10 Arch Linux

Window 10 Intellij Maven으로 생성한 SpringBoot 프로젝트 개발 스펙, MyBatis 2차 캐시 적용

차세대 IT 리더 비공자 2024. 8. 25. 00:18

 

목록

1. 들어가기에 앞서 개발 스펙

2. DRESS_CODE 프로젝트 pom.xml 파일

3. DRESS_CODE 프로젝트 application.properties

4. DRESS_CODE 프로젝트 MyBatis 2차 캐시

 

 

 

들어가기에 앞서 개발 스펙

Maven SpringBoot3 JSP 개발 스펙
SpringBoot 3.3.2
Build Maven
JDK OpenJDK-17
DB Oracle-xe-11g
JDBC ojdbc11.jar
Tomcat 10.1.28
MyBatis MyBatis Core : 3.5.16
MyBatis SpringBoot Starter : 3.0.3
JSP Jasper

 

 

DRESS_CODE 프로젝트 pom.xml 파일

의존성  설명
spring-boot-starter-web 설명
SpringBoot 웹 애플리케이션을 개발하는 데 필요한 기본적인 의존성들을
포함하고 있는 스타터(Starter) 패키지 입니다.

주요 기능

Jackson : JSON 데이터를 쉽게 처리할 수 있도록 도와줍니다.
Embedded Tomcat : 기본적으로 내장된 Tomcat 서버를 제공합니다.

사용 예시
웹 애플리케이션 개발 시 HTTP 요청과 응답을 처리하는 데 필요한 라이브러리들이
포함되어 있어, 빠르게 웹 프로젝트를 시작할 수 있습니다.
spring-boot-devtools 설명
개발 중에 유용한 여러 가지 도구들을 제공하는 의존성입니다.
애플리케이션을 개발할 때 생산성을 높이기 위해 사용

주요 기능

자동 재시작 : 코드 변경 시 애플리케이션이 자동으로 재시작 해줍니다.
LiveReload : 브라우저를 자동으로 새로 고쳐줍니다.
캐시 비활성화 : 개발 환경에서의 캐시를 비활성화해 개발자들이 실시간으로
                             코드를 반영하여 테스트할 수 있도록 도와줍니다.

사용 예시
개발할 때 애플리케이션을 수동으로 재시작할 필요 없이, 코드 변경 후
바로 적용되는 것을 확인할 수 있어 편리합니다.
spring-boot-starter-tomcat 설명
Spring Boot에서 기본적으로 제공하는 내장 Tomcat 서버를 사용하기 위한 의존성 입니다.

주요 기능

내장된 Tomcat을 사용하여 별도의 설정 없이도 쉽게 서블릿 컨테이너를
사용할 수 있습니다.

사용 예시
SpringBoot 애플리케이션을 독립 실행형 애플리케이션으로 실행할 때, 외부 웹 서버를
설치할 필요 없이 내장된 Tomcat 서버를 통해 애플리케이션을 구동합니다.
spring-boot-starter-test 설명
테스트를 위한 기본적인 의존성들이 포함된 스타터 패키지 입니다.

주요 기능

JUnit 5 : 단위 테스트를 작성할 때 사용됩니다.
Mockito : 목 객체(mock objects)를 생성하여 단위 테스트에서
                   의존성 주입을 쉽게 할 수 있습니다.

사용 예시
애플리케이션의 기능을 검증하기 위한 테스트 케이스를 작성할 때
다양한 테스트 도구를 활용할 수 있습니다.
tomcat-embed-jasper 설명 
JSP( Java Server Pages ) 파일을 처리하기 위해 내장된 Tomcat 서버에서
Jasper를 사용하게 해주는 의존성 입니다.

주요 기능
JSP 파일을 컴파일하고 실행하기 위해 필요한 Jasper 엔진을 제공

사용 예시
Spring Boot 애플리케이션에서 JSP를 뷰 템플릿으로 사용할 때 필요
이를 통해 JSP파일이 HTML로 변환되고, 브라우저에 전달됩니다.
mybatis 설명
MyBatis는 Java 객체와 SQL 데이터베이스 간의 매핑을 단순화해주는
퍼시스턴스 프레임워크 입니다.

주요 기능
SQL 쿼리문, 저장 프로시저, 그리고 고유한 매핑을 통해
객체와 관계형 데이터베이스(테이블)를 연결 합니다.

사용 예시
복잡한 SQL 쿼리를 객체로 매핑하여 사용하거나, 매퍼 XML파일을 통해
SQL 쿼리를 정의하고, 이를 자바 코드에서 사용할 때 유용합니다.
mybatis-spring-boot-starter 설명
MyBatis를 SpringBoot 애플리케이션에 쉽게 통합할 수 있도록
도와주는 스타터 의존성 입니다.

주요 기능
MyBatis와 SpringBoot 간의 원활한 통합을 제공합니다. Spring의 트랜잭션 관리,
DI(의존성 주입) 기능을 사용할 수 있습니다.

사용 예시
MyBatis를 사용하여 데이터베이스와 상호작용할 때, SpringBoot 환경에서
쉽게 설정하고 사용할 수 있도록 도와줍니다.
ojdbc 설명
Oracle 데이터베이스에 접근하기 위한 Oracle JDBC 드라이버입니다.

주요 기능
JDBC API를 통해 Java 애플리케이션이 Oracle 데이터베이스와
통신할 수 있도록 합니다.

사용 예시
Oracle 데이터베이스에 연결하고 쿼리를 실행하거나 데이터를 가져오기 위해
필요한 드라이버입니다.
lombok 설명
자바 코드에서 반복적인 코드를 줄이기 위해 사용하는 라이브러리


주요 기능
어노테이션을 사용하여 getter/setter, toString, equals. hashCode, 생산자 등을
자동으로 생성합니다.

사용 예시
클래스에 @Getter, @Setter, @Builder, @NoArgsConstructor,
@AllArgsConstructor 등의 어노테이션을 사용하여 자동으로 필요한
메서드를 생성할 수 있습니다.
spring-boot-maven-plugin 설명
SpringBoot 애플리케이션을 Maven을 통해 빌드하고 실행하는 데
필요한 플러그인 입니다.

주요 기능
spring-boot:run
Maven 명령어를 사용하여 애플리케이션을 실행

spring-boot:repackage
독립 실행형 JAR 파일을 생성합니다. 이 JAR 파일에는 필요한
모든 라이브러리와 클래스 파일이 포함됩니다.

사용 예시

애플리케이션을 개발 중에 빠르게 실행하거나, 배포 가능한 형태로
패키징할 때 사용합니다.

 

 

 

 

DRESS_CODE 프로젝트 application.properties

명령어 설명
spring.application.name 설명
애플리케이션의 이름을 정의합니다. 이 설정은 SpringBoot
애플리케이션에서 이름을 표시하거나 식별할 때 사용

server.port 설명
애플리케이션이 수신 대기(listen)할 포트 번호를 지정합니다.

구체적인 예시
기본적으로 SpringBoot 애플리케이션은 8080 포트에서 실행( Tomcat )
만약 server.port=8081로 설정하면 애플리케이션은 8081 포트에서 실행
이 설정은 동일한 서버에서 여러 애플리케이션을 실행하거나,
기본 포트가 다른 애플리케이션에 의해 이미 사용 중일 때 유용합니다.


spring.devtools.
livereload.enabled

spring.devtools.
restart.enabled
설명
LiveReload 서버를 활성화하여 파일 변경 시 브라우저가 자동으로
새로고침 되도록 설정합니다.

구체적인 예시
spring.devtools.livereload.enabled=true로 설정하면, HTML, CSS, JS파일 등을
수정한 후, 저장할 때 브라우저가 자동으로 새로 고쳐지면서 변경 사항을 즉시
확인할 수 있습니다. 이를 통해 개발 중에 빠른 피드백을 받을 수 있습니다.


spring.mvc.view.prefix 설명
뷰 템플릿 파일의 경로 앞에 붙는 기본 경로(prefix)를 지정합니다.

구체적인 예시
spring.mvc.view.prefix=/WEB-INF/views/로 설정하면, home이라는 
뷰 이름이 주어졌을 때 localhost:8080/WEB-INF/views/home.jsp 경로가
localhost:8080/home.jsp으로 불러올수 있도록 설정 합니다.
spring.mvc.view.suffix 설명
뷰 템플릿 파일의 이름 뒤에 붙는 확장자(suffix)를 지정합니다.

구체적인 예시
spring.mvc.view.suffix=.jsp로 설정하면, 뷰 이름이 home일 때
localhost:8080/home.jsp에서 -> localhost:8080/home으로 불러 올 수 있습니다.
preffix와 suffix는 같이 사용되며, 이 설정들은
JSP, Thymeleaf, Freemarker 등의 템플릿 엔진을 사용할 때 활용


spring.web.resources.
static.locations
설명
정적 리소스( 예: HTML, CSS, JS 파일 등)가 위치하는 디렉토리를 설정합니다.

구체적인 예시
spring.web.resources.static-locations=classpath:/static/로 설정하면
src/main/resources/static 폴더 내의 모든 파일이 정적 리소스로 제공
사용자는 /static 경로를 사용하여 파일에 접근할 수 있습니다.

mybatis.mapper.location 설명
MyBatis 매퍼(XML 파일)의 위치를 지정합니다.

구체적인 예시
mybatis.mapper-locations=classpath:/mapper/**/*.xml로 설정하면
src/main/resources/mappers 폴더 내의 모든 XML 파일이 MyBatis 매퍼 파일로
인식됩니다. 이설정을 통해 SQL 매핑을 정의한 XML파일들을
자동으로 로드할 수 있습니다.

mybatis.configuration.
map-underscore-to-camel-case
설명
데이터베이스의 언더스코어("_") 형식의 컬럼 이름을
자바 객체의 카멜 케이스(CamelCase)형식으로 자동 변환할지 여부를 설정합니다.

구체적인 예시
mybatis.configuration.map-underscore-to-camel-case=true로 설정하면
데이터베이스의 user_name 컬럼이 자바 객체에서는 userName으로 자동 매핑
이 기능은 데이터베이스와 자바 객체 간의 일관성을 유지하는 데 유용합니다.


mybatis.configuration.log.impl 설명
MyBatis에서 사용할 로그 구현체를 지정합니다.

구체적인 예시
mybatis.configuration.log-impl=LOG4J2로 설정하면 MyBatis에서 발생하는
SQL로그를 Log4j2를 통해 출력합니다. 이를 통해 SQL 쿼리와 파라미터 등을
로그로 확인할 수 있습니다.


mybatis.type-aliases-package 설명
MyBatis의 타입 별칭(Type Alias)을 정의한 자바 클래스들이
위치한 패키지를 지정합니다.

구체적인 예시
mybatis.type-aliases-package=com.exampl.model.dto로 설정하면
이 패키지 내의 클래스 이름이 MyBatis에서 타입 별칭으로 사용됩니다. 예를들어
UserDTO 클래스가 있다면 매퍼에서 com.example.dto.UserDTO 대신
UserDTO로 간단하게 사용할 수 있습니다.


spring.datasource.
driver-class-name
설명
데이터베이스 연결에 사용할 JDBC 드라이버의 클래스 이름을 명시합니다.

구체적인 예시
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver로 설정하면
SpringBoot 애플리케이션이 Oracle 데이터베이스에 연결하기 위해
Oracle의 JDBC 드라이버를 사용하게 됩니다.


spring.datasource.
url
설명
데이터베이스 연결에 사용할 JDBC 드라이버의 클래스 이름을 명시합니다.

구체적인 예시
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe로 설정하면
로컬 호스트의 1521 포트에서 실행 중인 Oracle xe 데이터베이스에 연결합니다.
이 설정은 데이터베이스와 연결을 구성하는데 필수적입니다.


spring.datasource.
username
설명
데이터베이스에 연결할 때 사용할 사용자 이름을 지정합니다.

구체적인 예시
spring.datasource.username=developer로 설정하면
developer라는 계정으로 데이터베이스에 연결합니다. 이 계정은 데이터베이스의
권한에 따라 접근 가능한 데이터와 명령이 결정됩니다.


spring.datasource.
password
설명
데이터베이스에 연결에 사용할 비밀번호를 지정합니다.

구체적인 예시
spring.datasource.password=rnb123로 설정하면,
데이터베이스에 연결할 때, rnb123이라는 비밀번호를 사용합니다.
이는 보안상 중요한 정보이므로 외부에 노출되지 않도록 주의해야 합니다.

spring.datasource.
type
설명
사용할 DataSource의 구현체를 명시 합니다.

구체적인 예시
spring.datasource.type=com.zaxxer.hikari.HikariDataSource로 설정하면
HikariCP를 커넥션 풀로 사용합니다. 이는 고성능 데이터베이스 커넥션 풀로 널리
사용되며, SpringBoot에서 기본적으로 제공됩니다.


spring.datasource.hikari.
maximum-pool-size
설명
HikariCP 커넥션 풀에서 유지할 최대 커넥션 수를 설정합니다.

구체적인 예시
spring.datasource.hikari.maximum-pool-size=10으로 설정하면
HikariCP가 최대 10개의 커넥션을 풀에 유지합니다. 이 숫자가 너무 낮으면
동시 접속이 많은 상황에서 커넥션이 부족할 수 있으며, 너무 높으면
메모리와 리소스를 낭비할 수 있습니다.

커넥션 풀 사이즈 1 : 하나의 데이터베이스에 연결을 의미


spring.datasource.hikari.
idle
설명
HikariCP 커넥션 풀에서 유지할 최소 유휴 커넥션 수를 설정

구체적인 예시
spring.datasource.hikari.minumum-dile=5로 설정하면,
최소 5개의 유휴 커넥션이 유지됩니다.




spring.datasource.hikari.
idle-timeout
설명
커넥션이 유휴 상태로 유지될 최대 시간을 밀리초 단위로 설정
이 시간이 지나면 커넥션이 풀에서 제거됩니다.

구체적인 예시
spring.datasource.hikari.idle-timeout=300000로 설정하면
커넥션이 5분(300,000ms)동안 유휴 상태일 경우 풀에서 제거됩니다.


spring.datasource.hikari.
max-lifetime
설명
커넥션의 최대 수명을 설정합니다. 이 시간이 지나면 커넥션은
강제로 종료되고, 새로 생성 됩니다.

구체적인 예시
spring.datasource.hikari.max-lifetime= 1800000로 설정하면,
커넥션이 30분 ( 1,800,000ms)이상 사용된 경우 자동으로 새로 고쳐집니다.


mybatis.configuration.
cache-enabled

설명
MyBatis의 2차 캐시 사용 여부를 설정합니다.

구체적인 예시
mybatis.configuration.cache-enabled=true로 설정하면,
MyBatis가 SQL 결과를 2차 캐시에 저장하여 재사용 합니다.
캐시 사용을 통해 데이터베이스 조회 수를 줄일 수 있습니다.


 

 

 

 

DRESS_CODE 프로젝트 MyBatis 2차 캐시

 

고급 설정이 포함된 <cache>태그 사용 예시

<cache eviction="LRU"		/* 캐시 비우기 전략 : LRU ( Least Recently Used ) */
       flushInterval="30000"	/* 캐시 갱신 주기 : 30000 밀리초(30초)마다 갱신 */
       size="512"		/* 캐시 최대 크기 : 최대 512개의 객체 저장 */
       readOnly="true"/>	/* 캐시의 읽기 전용 설정 : 읽기 전용이면 쓰기 시 데이터 변경 없음 */

 

옵션 설명
eviction 캐시에서 데이터를 제거하는 정책을 설정합니다. 예를 들어,
"LRU"는 가장 오랫동안 사용되지 않은 항목을 제거하는 방식입니다.
flushInterval 캐시가 자동으로 갱신되는 주기를 밀리초 단위로 설정합니다.
이 설정이 없으면 캐시는 수동으로 갱신될 떄까지 유지됩니다.
size 캐시가 저장할 수 있는 객체의 최대 수를 지정합니다.
이 크기를 초과하면 설정된 eviction 정책에 따라 캐시가 비워집니다.
readOnly 캐시를 읽기 전용으로 설정합니다. 읽기 전용 캐시는 쓰기 시 데이터가
변경되지 않으므로 성능이 더 우수할 수 있지만, 데이터를 수정해야 하는 경우에는
사용하지 않아야 합니다.

 

SQL 매퍼에 대한 캐시 무효화 예시

특정 쿼리가 실행될 때마다 캐시를 무효화해야 할 경우가 있습니다.

이런 경우 <cache> 태그를 설정하면서 다음과 같이 <select>, <insert>, <update>, <delete>

태그에 캠시 무효화 관련 옵션을 지정할 수 있습니다.

flushCache=true 설명

이 옵션은 해당 쿼리가 실행된 후에 캠시를 무효화하여 캐시된 데이터를 제거합니다.이를 통해 데이터의 일관성을 유지할 수 있습니다.

 

 

flushCache 고급 내용

이렇게 SELECT 조회를 할 경우, 파라미터가 다를 경우, 캐시에 저장된 내용이 아닌

변경된 파라미터의 정보를 가져올 수 있다. 그렇기 때문에 flushCache를 사용하지 않아도 된다.

 

 

파라미터가 다른 경우의 결과

30초 이전 파라미터가 다를 경우 ( 새로운 결과를 가져온다. )

30초가 지나지 않았지만, 파라미터의 값이 변경이 되면서

첫 번째 세션에 저장된 결과 iteaderBigongja_1의 결과가 아닌

두 번째 세션에 저장된 결과 iteaderBigongja_2의 결과를 보여준다.

 

 

조건 값에 파라미터가 없는 경우

조건값이 없는 SELECT절은 변동된 데이터의 키 값이 없기 때문에

30초간은 같은 데이터를 보여줄 수 있다. 그렇기 때문에 이러한 조회 쿼리에는

flushCache=true캐시를 사용하지 않는다는 명시를 해주어야 한다.