Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.

Commit 5cbb4db

Browse files
committed
🐛 Fix: 메모리 오류 수정
1 parent ea7e929 commit 5cbb4db

4 files changed

Lines changed: 39 additions & 8 deletions

File tree

src/main/java/com/likelion/backendplus4/yakplus/drug/application/service/port/out/DrugDetailRepositoryPort.java

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

33
import java.util.List;
44

5+
import org.springframework.data.domain.Page;
6+
import org.springframework.data.domain.Pageable;
7+
58
import com.likelion.backendplus4.yakplus.drug.domain.model.DrugDetail;
69
import com.likelion.backendplus4.yakplus.drug.infrastructure.persistence.dto.DrugDetailRequest;
710

@@ -38,4 +41,6 @@ public interface DrugDetailRepositoryPort {
3841
* @since 2025-04-21
3942
*/
4043
List<DrugDetail> getAllGovDrugDetail();
44+
45+
Page<DrugDetail> getGovDrugDetailByPage(Pageable pageable);
4146
}

src/main/java/com/likelion/backendplus4/yakplus/drug/application/service/scraper/combiner/DrugCombiner.java

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

33
import java.util.List;
44

5+
import org.springframework.data.domain.Page;
6+
import org.springframework.data.domain.PageRequest;
57
import org.springframework.stereotype.Component;
68

79
import static com.likelion.backendplus4.yakplus.common.util.log.LogUtil.log;
@@ -29,20 +31,33 @@ public class DrugCombiner implements DrugCombineUsecase {
2931
private final DrugDetailRepositoryPort drugDetailRepository;
3032
private final DrugImageRepositoryPort drugImageRepositoryPort;
3133
private final DrugRawDataRepositoryPort drugRawDataRepositoryPort;
32-
33-
@Override
34-
public void mergeTable(){
34+
35+
public void mergeTable() {
3536
log("API 요청 결과 테이블 병합 시작: 상세 정보 + 이미지");
3637

37-
List<DrugDetail> drugDetails = drugDetailRepository.getAllGovDrugDetail();
38-
log(LogLevel.DEBUG, "DrugDetail Raw Data: \n" + drugDetails);
38+
int pageSize = 1_000;
39+
Page<DrugDetail> firstPage = drugDetailRepository.getGovDrugDetailByPage(PageRequest.of(0, pageSize));
40+
int totalPages = firstPage.getTotalPages();
41+
42+
processDrugDetails(firstPage.getContent(), 1);
43+
44+
for (int i = 1; i < totalPages; i++) {
45+
Page<DrugDetail> page = drugDetailRepository.getGovDrugDetailByPage(PageRequest.of(i, pageSize));
46+
processDrugDetails(page.getContent(), i + 1);
47+
}
3948

40-
drugDetails.stream()
41-
.map(detail -> buildMergeRawData(detail, getImageDataByDrugDetail(detail)))
42-
.forEach(drugRawDataRepositoryPort::save);
4349
log("API 요청 결과 테이블 병합 완료");
4450
}
4551

52+
private void processDrugDetails(List<DrugDetail> drugDetails, int pageNumber) {
53+
log("Processing Page = " + pageNumber);
54+
log(LogLevel.DEBUG, "DrugDetail Raw Data (Page " + pageNumber + "): \n" + drugDetails);
55+
56+
List<DrugRawData> rawData = drugDetails.stream()
57+
.map(detail -> buildMergeRawData(detail, getImageDataByDrugDetail(detail))).toList();
58+
drugRawDataRepositoryPort.saveAll(rawData);
59+
}
60+
4661
/**
4762
* 주어진 의약품 상세 정보에 해당하는 이미지 정보를 조회합니다.
4863
*

src/main/java/com/likelion/backendplus4/yakplus/drug/infrastructure/persistence/adapter/out/DrugDetailRepositoryAdapter.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.util.List;
44
import java.util.stream.Collectors;
55

6+
import org.springframework.data.domain.Page;
7+
import org.springframework.data.domain.Pageable;
68
import org.springframework.stereotype.Component;
79

810
import com.likelion.backendplus4.yakplus.drug.application.service.port.out.DrugDetailRepositoryPort;
@@ -38,4 +40,10 @@ public List<DrugDetail> getAllGovDrugDetail(){
3840
.map(DrugDetailMapper::toDomainFromEntity)
3941
.collect(Collectors.toList());
4042
}
43+
44+
@Override
45+
public Page<DrugDetail> getGovDrugDetailByPage(Pageable pageable) {
46+
return drugdetailJpaRepository.findAll(pageable)
47+
.map(DrugDetailMapper::toDomainFromEntity);
48+
}
4149
}

src/main/java/com/likelion/backendplus4/yakplus/drug/infrastructure/persistence/adapter/out/DrugRawDataRepositoryAdapter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.likelion.backendplus4.yakplus.drug.infrastructure.persistence.repository.jpa.GovDrugJpaRepository;
1111
import com.likelion.backendplus4.yakplus.drug.infrastructure.support.mapper.DrugRawDataMapper;
1212

13+
import jakarta.transaction.Transactional;
1314
import lombok.RequiredArgsConstructor;
1415

1516
@Component
@@ -18,12 +19,14 @@ public class DrugRawDataRepositoryAdapter implements DrugRawDataRepositoryPort {
1819

1920
private final GovDrugJpaRepository jpaDrugRepository;
2021

22+
@Transactional
2123
@Override
2224
public void save(DrugRawData drug){
2325
DrugRawDataEntity entity = DrugRawDataMapper.toEntityFromDomain(drug);
2426
jpaDrugRepository.save(entity);
2527
}
2628

29+
@Transactional
2730
@Override
2831
public void saveAll(List<DrugRawData> rawData) {
2932
jpaDrugRepository.saveAll(

0 commit comments

Comments
 (0)