Skip to content

Commit e95fc64

Browse files
authored
Merge pull request #66 from fullstack-dev-hub/feature/#62-estimate-api-performance-test
[Feature] API 성능 테스트 환경 구성
2 parents d39d1bd + c6916e2 commit e95fc64

File tree

5 files changed

+73
-1
lines changed

5 files changed

+73
-1
lines changed

backend/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ dependencies {
3131
implementation 'org.springframework.boot:spring-boot-starter-security'
3232
implementation 'org.springframework.boot:spring-boot-starter-web'
3333

34+
// AOP
35+
implementation 'org.springframework.boot:spring-boot-starter-aop'
36+
3437
// Email
3538
implementation 'org.springframework.boot:spring-boot-starter-mail'
3639

backend/src/main/java/com/postdm/backend/domain/estimate/entity/Estimate.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.postdm.backend.domain.member.domain.entity.Member;
44
import jakarta.persistence.*;
5+
import lombok.Builder;
56
import lombok.Getter;
67
import lombok.NoArgsConstructor;
78

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

2627
private LocalDateTime createdAt;
2728

29+
@Builder
2830
public Estimate(String content, Member member) {
2931
this.title = generateTitle(content);
3032
this.content = content;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.postdm.backend.global.common.aop;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.aspectj.lang.ProceedingJoinPoint;
5+
import org.aspectj.lang.annotation.Around;
6+
import org.aspectj.lang.annotation.Aspect;
7+
import org.springframework.stereotype.Component;
8+
9+
@Slf4j
10+
@Aspect
11+
@Component
12+
public class PerformanceLogAspect {
13+
@Around("execution(* com.postdm.backend.domain.estimate..*(..))")
14+
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
15+
long start = System.currentTimeMillis();
16+
Object result = joinPoint.proceed();
17+
long end = System.currentTimeMillis();
18+
log.info("[PERF] " + joinPoint.getSignature() + " took " + (end - start) + "ms");
19+
return result;
20+
}
21+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.postdm.backend.global.init;
2+
3+
import com.postdm.backend.domain.estimate.entity.Estimate;
4+
import com.postdm.backend.domain.estimate.entity.EstimateRepository;
5+
import com.postdm.backend.domain.member.domain.entity.Member;
6+
import com.postdm.backend.domain.member.domain.repository.MemberRepository;
7+
import com.postdm.backend.global.common.exception.CustomException;
8+
import com.postdm.backend.global.common.response.ErrorCode;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.boot.CommandLineRunner;
11+
import org.springframework.context.annotation.Profile;
12+
import org.springframework.stereotype.Component;
13+
14+
import lombok.extern.slf4j.Slf4j;
15+
16+
@Slf4j
17+
@Component
18+
@RequiredArgsConstructor
19+
@Profile("dev") // 로컬에서만 실행되도록 제한
20+
public class DummyDataInitializer implements CommandLineRunner {
21+
private final EstimateRepository estimateRepository;
22+
private final MemberRepository memberRepository;
23+
24+
@Override
25+
public void run(String... args) {
26+
if (estimateRepository.count() > 0) {
27+
log.info("[INIT] 이미 견적서 데이터가 존재합니다. 초기화를 건너뜁니다.");
28+
return;
29+
}
30+
31+
log.info("[INIT] 더미 견적서 생성 시작");
32+
33+
Member member = memberRepository.findById(1L)
34+
.orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND));
35+
36+
for (int i = 0; i < 10000; i++) {
37+
Estimate estimate = Estimate.builder()
38+
.content("더미 데이터 자동 생성 " + i)
39+
.member(member)
40+
.build();
41+
estimateRepository.save(estimate);
42+
}
43+
44+
log.info("[INIT] 테스트용 견적서 10000건 삽입 완료");
45+
}
46+
}

backend/src/main/resources/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ spring:
22
application:
33
name: backend
44
profiles:
5-
active: ${SPRING_PROFILES_ACTIVE:dev}
5+
active: ${SPRING_PROFILES_ACTIVE:prod} # 로컬 테스트 시, dev로 변경
66

77
# Swagger 설정
88
springdoc:

0 commit comments

Comments
 (0)