kmbin92_2025081101 #1
							
								
								
									
										30
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								build.gradle
									
									
									
									
									
								
							@@ -23,6 +23,12 @@ repositories {
 | 
				
			|||||||
	mavenCentral()
 | 
						mavenCentral()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					buildscript {
 | 
				
			||||||
 | 
						ext {
 | 
				
			||||||
 | 
							queryDslVersion = "5.0.0"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
	// 개발용 의존성 추가
 | 
						// 개발용 의존성 추가
 | 
				
			||||||
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
 | 
					    developmentOnly 'org.springframework.boot:spring-boot-devtools'
 | 
				
			||||||
@@ -34,9 +40,31 @@ dependencies {
 | 
				
			|||||||
	annotationProcessor 'org.projectlombok:lombok'
 | 
						annotationProcessor 'org.projectlombok:lombok'
 | 
				
			||||||
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
 | 
						testImplementation 'org.springframework.boot:spring-boot-starter-test'
 | 
				
			||||||
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
 | 
						testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
 | 
				
			||||||
	 
 | 
					
 | 
				
			||||||
 | 
						// querydsl
 | 
				
			||||||
 | 
						implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
 | 
				
			||||||
 | 
						annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
 | 
				
			||||||
 | 
						annotationProcessor "jakarta.annotation:jakarta.annotation-api"
 | 
				
			||||||
 | 
						annotationProcessor "jakarta.persistence:jakarta.persistence-api"
 | 
				
			||||||
 | 
						// p6spy
 | 
				
			||||||
 | 
						implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tasks.named('test') {
 | 
					tasks.named('test') {
 | 
				
			||||||
	useJUnitPlatform()
 | 
						useJUnitPlatform()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// querydsl
 | 
				
			||||||
 | 
					def querydslDir = "$buildDir/generated/querydsl"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sourceSets {
 | 
				
			||||||
 | 
						main.java.srcDirs += [ querydslDir ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tasks.withType(JavaCompile) {
 | 
				
			||||||
 | 
						options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean.doLast {
 | 
				
			||||||
 | 
						file(querydslDir).deleteDir()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					package com.qsl.qsl_tutorial.base;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j;
 | 
				
			||||||
 | 
					import org.aspectj.lang.ProceedingJoinPoint;
 | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.Around;
 | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.Aspect;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Aspect
 | 
				
			||||||
 | 
					@Component
 | 
				
			||||||
 | 
					@Slf4j
 | 
				
			||||||
 | 
					public class RepositoryLoggingAspect {
 | 
				
			||||||
 | 
					    @Around("execution(* org.springframework.data.repository.Repository+.*(..))")
 | 
				
			||||||
 | 
					    public Object logQueryCall(ProceedingJoinPoint pjp) throws Throwable {
 | 
				
			||||||
 | 
					        long t0 = System.currentTimeMillis();
 | 
				
			||||||
 | 
					        String type = pjp.getSignature().getDeclaringTypeName();
 | 
				
			||||||
 | 
					        String method = pjp.getSignature().getName();
 | 
				
			||||||
 | 
					        Object[] args = pjp.getArgs();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        log.info("[QUERY CALL] {}.{}(args={})", type, method, java.util.Arrays.toString(args));
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            Object result = pjp.proceed();
 | 
				
			||||||
 | 
					            log.info("[QUERY DONE] {}.{}() in {}ms", type, method, (System.currentTimeMillis() - t0));
 | 
				
			||||||
 | 
					            return result;
 | 
				
			||||||
 | 
					        } catch (Throwable ex) {
 | 
				
			||||||
 | 
					            log.warn("[QUERY FAIL] {}.{}() -> {}", type, method, ex.toString());
 | 
				
			||||||
 | 
					            throw ex;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					package com.qsl.qsl_tutorial.base;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.querydsl.jpa.impl.JPAQueryFactory;
 | 
				
			||||||
 | 
					import jakarta.persistence.EntityManager;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Configuration
 | 
				
			||||||
 | 
					public class AppConfig {
 | 
				
			||||||
 | 
					  @Bean
 | 
				
			||||||
 | 
					  public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
 | 
				
			||||||
 | 
					    return new JPAQueryFactory(entityManager);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -9,9 +9,9 @@ spring.devtools.restart.additional-paths=src/main/java
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# 데이터베이스 연결 정보
 | 
					# 데이터베이스 연결 정보
 | 
				
			||||||
# URL 형식: jdbc:postgresql://[호스트명]:[포트번호]/[데이터베이스명]
 | 
					# URL 형식: jdbc:postgresql://[호스트명]:[포트번호]/[데이터베이스명]
 | 
				
			||||||
spring.datasource.url=jdbc:postgresql://stam.kr:15432/mms
 | 
					spring.datasource.url=jdbc:postgresql://stam.kr:15432/imas
 | 
				
			||||||
spring.datasource.username=mms_user
 | 
					spring.datasource.username=imas_user
 | 
				
			||||||
spring.datasource.password=tam1201
 | 
					spring.datasource.password=stam1201
 | 
				
			||||||
spring.datasource.driver-class-name=org.postgresql.Driver
 | 
					spring.datasource.driver-class-name=org.postgresql.Driver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# JPA/Hibernate 설정
 | 
					# JPA/Hibernate 설정
 | 
				
			||||||
@@ -21,13 +21,26 @@ spring.datasource.driver-class-name=org.postgresql.Driver
 | 
				
			|||||||
# - update: 엔티티 변경 시 스키마 업데이트 (개발용)
 | 
					# - update: 엔티티 변경 시 스키마 업데이트 (개발용)
 | 
				
			||||||
# - validate: 엔티티와 스키마 일치 여부만 검증 (운영용)
 | 
					# - validate: 엔티티와 스키마 일치 여부만 검증 (운영용)
 | 
				
			||||||
# - none: 아무 작업도 하지 않음
 | 
					# - none: 아무 작업도 하지 않음
 | 
				
			||||||
spring.jpa.hibernate.ddl-auto=update
 | 
					spring.jpa.hibernate.ddl-auto=none
 | 
				
			||||||
 | 
					spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
 | 
				
			||||||
 | 
					spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=ddl/schema.sql
 | 
				
			||||||
 | 
					spring.jpa.properties.hibernate.hbm2ddl.schema-generation.script.append=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# SQL 쿼리를 콘솔에 표시
 | 
					# Hibernate log
 | 
				
			||||||
spring.jpa.show-sql=true
 | 
					spring.jpa.show-sql=false
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Hibernate가 SQL을 포맷하여 보여줌
 | 
					 | 
				
			||||||
spring.jpa.properties.hibernate.format_sql=true
 | 
					spring.jpa.properties.hibernate.format_sql=true
 | 
				
			||||||
 | 
					spring.jpa.properties.hibernate.highlight_sql=true
 | 
				
			||||||
 | 
					spring.jpa.properties.hibernate.use_sql_comments=false
 | 
				
			||||||
 | 
					logging.level.org.hibernate.SQL=DEBUG
 | 
				
			||||||
 | 
					logging.level.org.hibernate.orm.jdbc.bind=TRACE
 | 
				
			||||||
 | 
					logging.level.org.springframework.data.jpa=DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# P6Spy
 | 
				
			||||||
 | 
					decorator.datasource.p6spy.enable-logging=true
 | 
				
			||||||
 | 
					decorator.datasource.p6spy.log-format=%(sqlSingleLine)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CONSOLE
 | 
				
			||||||
 | 
					spring.output.ansi.enabled=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# HikariCP 연결 풀 크기 설정 (선택사항)
 | 
					# HikariCP 연결 풀 크기 설정 (선택사항)
 | 
				
			||||||
# spring.datasource.hikari.maximum-pool-size=10
 | 
					# spring.datasource.hikari.maximum-pool-size=10
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user