Skip to content

Commit

Permalink
Refactor/#123 성능 최적화 - .stream() 제거 (#124)
Browse files Browse the repository at this point in the history
* chore: 사용하지 않는 클래스 Deprecated 처리

- 최적화를 위해 사용하지 않는 클래스에 대해 Deprecated 처리를 진행했습니다.
- 이에 따른 로직 수정을 진행했습니다.

* refactor: 저장 로직 변경

- .stream()을 사용하지 않는 방식으로 리팩토링

* refactor: List를 생성로직 추가

- List를 생성해서 repository로 전달
- BlockingQueue이기 때문에 접근 횟수를 줄임

* refactor: Log data는 비어있을 수 있다

* refactor: Controller 빈 배열 검사 추가

* test: 미사용 테스트 제거

* style: LogController

- 린트 수정

* fix: 형식에 맞는 값을 제거하고 배열 저장

---------

Co-authored-by: luizy <[email protected]>
  • Loading branch information
tidavid1 and LuizyHub authored Aug 27, 2024
1 parent f2f0922 commit d12b400
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package info.logbat.domain.log.application;

import info.logbat.domain.log.domain.Log;
import info.logbat.domain.log.presentation.payload.request.CreateLogRequest;
import info.logbat.domain.log.repository.LogRepository;
import info.logbat.domain.project.application.AppService;

import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@RequiredArgsConstructor
public class LogService {
Expand All @@ -16,9 +21,16 @@ public class LogService {

public void saveLogs(String appKey, List<CreateLogRequest> requests) {
Long appId = appService.getAppIdByToken(appKey);
logRepository.saveAll(requests.stream()
.map(request -> request.toEntity(appId))
.toList());
List<Log> logs = new ArrayList<>(requests.size());
requests.forEach(request -> {
try {
logs.add(request.toEntity(appId));
}
catch (Exception e) {
log.error("Failed to convert request to entity: {}", request, e);
}
});
logRepository.saveAll(logs);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ private LogData(String data) {
}

private void validateData(String data) {
if (data == null || data.isBlank()) {
throw new IllegalArgumentException("log data는 null이거나 빈 문자열일 수 없습니다.");
if (data == null) {
throw new IllegalArgumentException("log data는 null일 수 없습니다.");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import info.logbat.dev.aop.CountTest;
import info.logbat.domain.log.application.LogService;
import info.logbat.domain.log.presentation.payload.request.CreateLogRequest;
import info.logbat.domain.log.presentation.validation.ValidLogRequests;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
Expand All @@ -27,8 +27,7 @@ public class LogController {
@ResponseStatus(HttpStatus.CREATED)
public void saveLogs(
@RequestHeader("App-Key") @NotBlank(message = "appKey가 비어있습니다.") String appKey,
@RequestBody @ValidLogRequests List<CreateLogRequest> requests) {

@RequestBody @NotEmpty List<CreateLogRequest> requests) {
logService.saveLogs(appKey, requests);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@

/**
* 로그 요청 목록의 유효성을 검사하는 밸리데이터 클래스입니다. 빈 요청, 개별 요청의 유효성, 전체 요청의 유효성을 검사합니다.
*
* @deprecated 사용되지 않는 클래스입니다.
*/
@Component
@RequiredArgsConstructor
@Deprecated(forRemoval = true)
public class LogRequestsValidator implements
ConstraintValidator<ValidLogRequests, List<CreateLogRequest>> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,15 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 로그 요청 목록의 유효성을 검사하는 어노테이션입니다.
*
* @deprecated 사용되지 않는 어노테이션입니다.
*/
@Constraint(validatedBy = LogRequestsValidator.class)
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Deprecated(forRemoval = true)
public @interface ValidLogRequests {

String message() default "유효하지 않은 로그 요청입니다.";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import java.util.List;
import java.util.UUID;
import java.util.stream.Stream;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -51,6 +53,7 @@ void willReturn400IfEmptyRequest() throws Exception {

@Test
@DisplayName("모든 요청에 예외가 발생하면 400 에러를 반환한다.")
@Disabled("Controller에서 더 이상 검증하지 않습니다.")
void willReturn400IfAllRequestsAreInvalid() throws Exception {
// Arrange
List<CreateLogRequest> expectedWrongRequest = List.of(
Expand Down Expand Up @@ -132,6 +135,7 @@ void willReturn400IfAppKeyIsMissing() throws Exception {
.andExpect(status().isBadRequest());
}

@Disabled("Controller에서 더 이상 검증하지 않습니다.")
@ParameterizedTest
@DisplayName("잘못된 입력으로 로그 생성 시 400 에러를 반환한다.")
@MethodSource("invalidLogCreationInputs")
Expand Down

0 comments on commit d12b400

Please sign in to comment.