Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'

// AOP
implementation 'org.springframework.boot:spring-boot-starter-aop'

// Email
implementation 'org.springframework.boot:spring-boot-starter-mail'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.postdm.backend.domain.member.domain.entity.Member;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

Expand All @@ -25,6 +26,7 @@ public class Estimate {

private LocalDateTime createdAt;

@Builder
public Estimate(String content, Member member) {
this.title = generateTitle(content);
this.content = content;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.postdm.backend.global.common.aop;

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;

@Slf4j
@Aspect
@Component
public class PerformanceLogAspect {
@Around("execution(* com.postdm.backend.domain.estimate..*(..))")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed();
long end = System.currentTimeMillis();
log.info("[PERF] " + joinPoint.getSignature() + " took " + (end - start) + "ms");
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.postdm.backend.global.init;

import com.postdm.backend.domain.estimate.entity.Estimate;
import com.postdm.backend.domain.estimate.entity.EstimateRepository;
import com.postdm.backend.domain.member.domain.entity.Member;
import com.postdm.backend.domain.member.domain.repository.MemberRepository;
import com.postdm.backend.global.common.exception.CustomException;
import com.postdm.backend.global.common.response.ErrorCode;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
@RequiredArgsConstructor
@Profile("dev") // 로컬에서만 실행되도록 제한
public class DummyDataInitializer implements CommandLineRunner {
private final EstimateRepository estimateRepository;
private final MemberRepository memberRepository;

@Override
public void run(String... args) {
if (estimateRepository.count() > 0) {
log.info("[INIT] 이미 견적서 데이터가 존재합니다. 초기화를 건너뜁니다.");
return;
}

log.info("[INIT] 더미 견적서 생성 시작");

Member member = memberRepository.findById(1L)
.orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND));

for (int i = 0; i < 10000; i++) {
Estimate estimate = Estimate.builder()
.content("더미 데이터 자동 생성 " + i)
.member(member)
.build();
estimateRepository.save(estimate);
}

log.info("[INIT] 테스트용 견적서 10000건 삽입 완료");
}
}
2 changes: 1 addition & 1 deletion backend/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ spring:
application:
name: backend
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}
active: ${SPRING_PROFILES_ACTIVE:prod} # 로컬 테스트 시, dev로 변경

# Swagger 설정
springdoc:
Expand Down