๐Ÿค” Stream์œผ๋กœ ์ˆ˜๋™ ํŽ˜์ด์ง•?

์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ, ๋ณดํ†ต JPA์—์„œ ํŽ˜์ด์ง•์ด ํ•„์š”ํ•˜๋ฉด Page<T> ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด๋ฐ›๋Š” ๊ฒŒ ๊ฐ€์žฅ ๊น”๋”ํ•˜๋‹ค.

Page<Entity> res = repository.findByStatus("PENDING", pageable);

์ด ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ํ˜•ํƒœ๊ณ , ์„ฑ๋Šฅ์ƒ์œผ๋กœ๋„ ํšจ์œจ์ ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์˜ค๋Š˜ ๋‚˜์˜ ์ƒํ™ฉ์—์„œ๋Š” stream์œผ๋กœ ํ•„ํ„ฐ๋ง ํ›„, PageImpl๋กœ ์ˆ˜๋™ ํŽ˜์ด์ง•์„ ํ•˜๋Š”๊ฒŒ ๋‚˜์„ ๋•Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. ์‚ฌ์šฉ์ž์˜ ํ•„ํ„ฐ ์กฐ๊ฑด์ด ๋งŽ๊ณ 
  2. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” null์ผ ์ˆ˜๋„ ์žˆ๊ณ 
  3. ์ผ๋ถ€๋Š” ํฌํ•จ ๊ฒ€์ƒ‰์ด๊ณ 
  4. ๋‚ ์งœ ๋ฒ”์œ„ ์กฐ๊ฑด๊นŒ์ง€ ์กด์žฌํ–ˆ๋‹ค.

์ด ์กฐ๊ฑด๋“ค์„ ๋ชจ๋‘ JPQL์ด๋‚˜ @Query๋กœ ์งœ๋Š” ๊ฑด ๋ณต์žก๋„๋„ ๋†’๊ณ  ์œ ์ง€๋ณด์ˆ˜์˜ ์ง€์˜ฅ์ด ๋  ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๊ทธ๋ž˜์„œ findAll()์ด๋‚˜ ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด์„ ๊ฑธ์–ด์„œ repository์—์„œ ์กฐํšŒ ํ›„ stream().filter(...)๋กœ ํ•„ํ„ฐ๋ง์„ ํ–ˆ๋‹ค.

๋ฌผ๋ก  ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ์ ์„๋•Œ๋งŒ ํ•ด๋‹นํ•œ๋‹ค.

 

๐Ÿ“Œ ์ „์ฒด ์ฝ”๋“œ ์˜ˆ์‹œ

// 1. ๋ฐ์ดํ„ฐ ์กฐํšŒ
List<Entity> entityList = repository.findById(id);

// 2. ์กฐ๊ฑด ํ•„ํ„ฐ๋ง + ์ •๋ ฌ
List<Entity> filteredEntityList = entityList.stream()
	.filter(entity -> entity.getStatus().equals(dto.getStatus()))
    .filter(entity -> entity.getCont().getContNm().toLowerCase().contains(dto.getSearchNm().toLowerCase())
    .filter(entity -> dto.getTypeCodeList().contains(entity.getTypeCode())
    .sorted(Comparator.comparing(Entity::getCrtTime).reversed())
    .toList();

// 3. Pageable ๊ฐ์ฒด ์ƒ์„ฑ (pageable์€ F/E์—์„œ ๋„˜์–ด์˜ด)
Pageable page = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize());

// 4. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ
int start = (int) page.getOffset();
int end = Math.min((start + page.getPageSize()), filteredEntityList.size());

Page<Entity> entityPage = new PageImpl<>(
	filteredEntityList.subList(start, end),
    page,
    filteredEntityList.size()
);

 

๐Ÿ’ฅ .filter(...) ์กฐ๊ฑด์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๋ฆฌํŒฉํ† ๋ง

Jave Stream์˜ filter()์€ ์กฐ๊ฑด์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์กฐ๊ฑด์„ ๋ณ„๋„ ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

List<Entity> filteredEntityList = entityList.stream()
    .filter(entity -> filterSearchNm(entity, dto.getSearchNm()))
    .filter(entity -> filterReqTypeCode(entity, dto.getReqTypeCodeList()))
    .sorted(Comparator.comparing(Entity::getCrtTime).reversed())
    .toList();

// ์กฐ๊ฑด ๋ถ„๋ฆฌ ๋ฉ”์„œ๋“œ
private boolean filterSearchNm(Entity entity, String searchNm) {
	if (StringUtils.isEmpty(searchNm)) return true;
    
    String keyword = searchNm.toLowerCase();
    return entity.getCont().getContNm().toLowerCase().contains(keyword) ||
    	   entity.getComp().getCompNm().toLowerCase().contains(keyword);
}

private boolean filterReqTypeCode(Entity entity, List<String> codeList) {
	return Collectionutils.isEmpty(codeList) ||
    	   codeList.contains(entity.getReqTypeCode());
}

๐Ÿงธ Pageable

Spring Data JPA์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

PageRequest.of(ํŽ˜์ด์ง€๋ฒˆํ˜ธ, ํŽ˜์ด์ง€ํฌ๊ธฐ)๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โฌ‡๏ธ ์ •๋ ฌ๊นŒ์ง€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ

Pageable pageable = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "createdDate"));
  • 0: ์ฒซ ํŽ˜์ด์ง€ (0๋ถ€ํ„ฐ ์‹œ์ž‘)
  • 10: ํ•œ ํŽ˜์ด์ง€์— 10๊ฐœ์”ฉ
  • "createDate": ์ •๋ ฌ ๊ธฐ์ค€ ์ปฌ๋Ÿผ
  • DESC: ๋‚ด๋ฆผ์ฐจ์ˆœ

 

๐ŸŽก Repository ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉ

Page<Entity> findAll(Pageable pageable);

// Specification๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ
Page<Entity> findAll(Specification<Entity> spec, Pageable pageable);

 

๐ŸŽก Controller์—์„œ ์‚ฌ์šฉ

@GetMapping("/list")
public Page<ResponseDto> getList(@RequestParam int page,
                                 @RequestParam int size) {
    Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdDate"));
    return repository.findAll(spec, pageable).map(entity -> toDto(entity));
}

 

๐Ÿช„ Pageable(Sort ํฌํ•จ) ์‚ฌ์šฉ ์‹œ ์ฝ˜์†” ์ถœ๋ ฅ ์ฟผ๋ฆฌ

    order by
        mer1_0.[CREATE_DATE] desc 
    offset
        ? rows 
    fetch
        first ? rows only

'Backend > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Data JPA] Stream Filter ํ›„ Page๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ  (0) 2025.05.23

๋ฌธ์ œ

 

Brazilian E-Commerce Public Dataset by Olist ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ธŒ๋ผ์งˆ์˜ ์ด์ปค๋จธ์Šค ์›น์‚ฌ์ดํŠธ์ธ Olist Store์˜ ํŒ๋งค ๋ฐ์ดํ„ฐ ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ olist_orders_dataset ํ…Œ์ด๋ธ”์—๋Š” ์ฃผ๋ฌธ ID, ๊ณ ๊ฐ ID, ์ฃผ๋ฌธ ์ƒํƒœ, ๊ตฌ๋งค ์‹œ๊ฐ ๋“ฑ ์ฃผ๋ฌธ ๋‚ด์—ญ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. Olist์˜ ์ฃผ๋ฌธ๋ถ€ํ„ฐ ๋ฐฐ์†ก๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๊ณ , ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ์‹œ๊ฐ์„ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ณ ๊ฐ์˜ ๊ตฌ๋งค
    • order_purchase_timestamp ์ปฌ๋Ÿผ์— ๊ตฌ๋งค ์‹œ์ ์ด ์ €์žฅ๋จ
  2. ํŒ๋งค์ž๊ฐ€ ์ฃผ๋ฌธ์„ ์Šน์ธ
    • order_approved_at ์ปฌ๋Ÿผ์— ์Šน์ธ ์‹œ์ ์ด ์ €์žฅ๋จ
  3. ํƒ๋ฐฐ์‚ฌ์— ๋„์ฐฉํ•˜์—ฌ ๋ฐฐ์†ก ์‹œ์ž‘
    • order_delivered_carrier_date ์ปฌ๋Ÿผ์— ๋ฐฐ์†ก ์‹œ์ž‘ ์‹œ์ ์ด ์ €์žฅ๋จ
  4. ๋ฐฐ์†ก ์™„๋ฃŒ
    • order_delivered_customer_date ์ปฌ๋Ÿผ์— ๋ฐฐ์†ก ์™„๋ฃŒ ์‹œ์ ์ด ์ €์žฅ๋จ

์ถ”๊ฐ€๋กœ order_estimated_delivery_date ์ปฌ๋Ÿผ์—๋Š” ์ฃผ๋ฌธ ์‹œ์ ์— ๊ณ„์‚ฐํ•œ ๋ฐฐ์†ก ์˜ˆ์ • ์‹œ๊ฐ์ด ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปฌ๋Ÿผ์— ๊ฐ’์ด โ€˜2017-02-24 00:00:00โ€™๋กœ ๋“ค์–ด์žˆ๋Š” ๊ฒฝ์šฐ, ๋ฐฐ์†ก์„ 2017๋…„ 2์›” 24์ผ ์ž์ •๊นŒ์ง€ ์™„๋ฃŒํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

2017๋…„ 1์›” ํ•œ ๋‹ฌ ๋™์•ˆ ๋ฐœ์ƒํ•œ ์ฃผ๋ฌธ์˜ ๋ฐฐ์†ก ์˜ˆ์ธก์ด ์ •ํ™•ํ–ˆ๋Š”์ง€ ๋ถ„์„์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ์ผ์ž๋ณ„๋กœ ๋ฐฐ์†ก ์˜ˆ์ • ์‹œ๊ฐ ์•ˆ์— ๊ณ ๊ฐ์—๊ฒŒ ๋„์ฐฉํ•œ ์ฃผ๋ฌธ๊ณผ, ๋ฐฐ์†ก ์˜ˆ์ • ์‹œ๊ฐ์ด ์ง€๋‚˜์„œ ๊ณ ๊ฐ์—๊ฒŒ ๋„์ฐฉํ•œ ์ฃผ๋ฌธ์„ ๊ฐ๊ฐ ์ง‘๊ณ„ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๋ฐฐ์†ก ์™„๋ฃŒ ๋˜๋Š” ๋ฐฐ์†ก ์˜ˆ์ • ์‹œ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ณ„์‚ฐ์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋Š” ๊ตฌ๋งค ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•˜๊ณ , ์•„๋ž˜ ์ปฌ๋Ÿผ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • purchase_date - ๊ตฌ๋งค ๋‚ ์งœ (์˜ˆ: 2017-01-01)
  • success - ๋ฐฐ์†ก ์˜ˆ์ • ์‹œ๊ฐ ์•ˆ์— ๊ณ ๊ฐ์—๊ฒŒ ๋„์ฐฉํ•œ ์ฃผ๋ฌธ ์ˆ˜
  • fail - ๋ฐฐ์†ก ์˜ˆ์ • ์‹œ๊ฐ์ด ์ง€๋‚˜ ๊ณ ๊ฐ์—๊ฒŒ ๋„์ฐฉํ•œ ์ฃผ๋ฌธ ์ˆ˜

๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ

purchase_date success fail
2017-01-06 4 0
2017-01-07 3 1
  • 2017๋…„ 1์›” 6์ผ ๊ตฌ๋งค๋œ ์ฃผ๋ฌธ์€ ์ด 4๊ฑด์ด๊ณ  ๋ชจ๋‘ ๋ฐฐ์†ก ์˜ˆ์ •์ผ ์•ˆ์— ๋ฐฐ์†ก ์™„๋ฃŒ๋จ
  • 2017๋…„ 1์›” 7์ผ ๊ตฌ๋งค๋œ ์ฃผ๋ฌธ์€ ์ด 4๊ฑด์ด๊ณ  ๊ทธ ์ค‘ 3๊ฑด์€ ๋ฐฐ์†ก ์˜ˆ์ •์ผ ์•ˆ์— ๋ฐฐ์†ก ์™„๋ฃŒ๋˜์—ˆ์œผ๋‚˜, 1๊ฑด์€ ๋ฐฐ์†ก ์˜ˆ์ •์ผ ์ดํ›„์— ๋ฐฐ์†ก ์™„๋ฃŒ๋จ

 

์ œ์ถœ
SELECT DATE(order_purchase_timestamp) AS 'purchase_date'
     , SUM(IIF(order_estimated_delivery_date >= order_delivered_customer_date, 1, 0)) AS 'success'
     , SUM(IIF(order_estimated_delivery_date < order_delivered_customer_date, 1, 0)) AS 'fail'
FROM olist_orders_dataset
WHERE order_delivered_customer_date IS NOT NULL
  AND order_estimated_delivery_date IS NOT NULL
  AND purchase_date LIKE '2017-01%'
GROUP BY purchase_date
ORDER BY purchase_date
;

ํŠน์ • ๋ฒ„์ „ ์ด์ƒ์ด ๋˜์–ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์ด ์กด์žฌํ•  ๋•Œ, ํ˜„์žฌ ๋ฒ„์ „ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

SELECT @@VERSION;

 

์˜ˆ์‹œ ๊ฒฐ๊ณผ
Microsoft SQL Server 2019 (RTM-CU29-GDR) (KB5046860) - 15.0.4410.1 (X64) 
	Oct 23 2024 15:50:49 
	Copyright (C) 2019 Microsoft Corporation
	Standard Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: )

'Database > RDBMS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[MSSQL] ์ œ์•ฝ ์กฐ๊ฑด ํ™œ์„ฑ/๋น„ํ™œ์„ฑํ™”  (0) 2025.02.18

JSP ์ž‘์—… ์ค‘ login() ํ•จ์ˆ˜๊ฐ€ ๋‘๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

<!-- ๊ธฐ์กด ์ฝ”๋“œ (type ๋ฏธ์ง€์ •) -->
<button onclick="login();" style="cursor:pointer; border:0px;">LOGIN</button>

 

login() ํ•จ์ˆ˜ ๋‚ด๋ถ€๋ฅผ ๋ณด๋ฉด, ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ํ›„

document.f.submit();์„ ํ˜ธ์ถœํ•˜์—ฌ ํผ์„ ์ œ์ถœํ•œ๋‹ค.

function login() {
    if (document.getElementById('id').value == '') {
        alert('์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.');
        return;
    }

    if (document.getElementById('pwd').value == '') {
        alert('๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.');
        return;
    }

    document.f.submit();
}

 

์ด๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ์€ ๋ฒ„ํŠผ ํƒœ๊ทธ์˜ ๊ธฐ๋ณธ ๋™์ž‘์ด submit ํƒ€์ž…์œผ๋กœ ์ธ์‹๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(<button> ํƒœ๊ทธ์˜ ๊ธฐ๋ณธ type์€ submit)

 

 

 

<button> ํƒœ๊ทธ์˜ ๊ธฐ๋ณธ type์ธ submit์œผ๋กœ ํผ ์ œ์ถœ์ด ๋˜๊ณ ,

login() ๋‚ด์—์„œ document.f.submit();์„ ํ˜ธ์ถœํ•˜์—ฌ ํผ์ด ๋‘ ๋ฒˆ ์ œ์ถœ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ type์ด ์•„๋‹Œ type="button"์„ ํ†ตํ•ด ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด

๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ํผ ์ œ์ถœ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

<!-- type ๋ช…์‹œ -->
<button type="button" onclick="login();" style="cursor:pointer; border:0px;">LOGIN</button>

 

 

 

์ด ๋ฌธ์ œ๋Š” JSP๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ HTML + JavaScript ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠนํžˆ ์ด๋Ÿฐ ๋ถˆํ•„์š”ํ•œ ํ•จ์ˆ˜ ์ค‘๋ณต ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ž ๐Ÿ˜‰

'Frontend > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] var, let, const ์ฐจ์ด  (0) 2022.07.20
ํŠน์ • branch clone
git clone -b {branch_name} --single-branch {์ €์žฅ์†Œ URL}
ex) git clone -b javajigi --single-branch https://github.com/javajigi/java-racingcar

 

 

 

single branch clone ์ดํ›„ ํŠน์ • branch ์ถ”๊ฐ€ clone
git remote set-branches --add origin {branch_name}
git fetch origin dev_front

# ๋ธŒ๋žœ์น˜ ๋ฆฌ์ŠคํŠธ ํ™•์ธ
git branch -a

git checkout {branch_name}
์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ๋น„ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… NOCHECK CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…;

 

 

 

์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… WITH CHECK CHECK CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…;

 

 

 

๋ชจ๋“  ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์„ ํ•œ ๋ฒˆ์— ๋น„ํ™œ์„ฑํ™”/ํ™œ์„ฑํ™”ํ•˜๊ธฐ
-- ๋ชจ๋“  ์ œ์•ฝ ์กฐ๊ฑด ๋น„ํ™œ์„ฑํ™”
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… NOCHECK CONSTRAINT ALL;

-- ๋ชจ๋“  ์ œ์•ฝ ์กฐ๊ฑด ํ™œ์„ฑํ™”
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… WITH CHECK CHECK CONSTRAINT ALL;
์—๋Ÿฌ๋ฉ”์„ธ์ง€ ๋‚ด์šฉ
Module Error (from ./node_modules/eslint-loader/index.js):
error: Use object destructuring (prefer-destructuring) at src\views\mr\BrandPerformance.vue:296:13:
  294 |       const compComboId = '#PRODUCT_BY_RANGE#';
  295 |       const yyyymm = this.query.yyyymm.replace(/-/gi, '');
> 296 |       const prodRangeCd = this.query.prodRangeCd;
      |             ^
  297 |       const rs = await this.compCodeList(compComboId, yyyymm, prodRangeCd);
  298 |       const clsRow = rs.data.resultList;

 

์œ„ ์—๋Ÿฌ๋Š” this.query.prodRangeCd๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค.

๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ํ†ตํ•ด this.query์˜ ์†์„ฑ์„ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ถ”์ถœํ•˜๋ผ๋Š” ๋‚ด์šฉ์ด๋‹ค.

this.query ๊ฐ์ฒด์—์„œ ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๊ฐ€์ ธ์˜จ๋‹ค๋ฉด ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ˆ˜์ • ๋ฐ˜์˜
const { yyyymm, prodRangeCd } = this.query;
const compComboId = '#PRODUCT_BY_RANGE#';
const formattedYyyymm = yyyymm.replace(/-/gi, '');
const rs = await this.compCodeList(compComboId, formattedYyyymm, prodRangeCd);
const clsRow = rs.data.resultList;

 

์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด this.query ๊ฐ์ฒด์—์„œ yyyymm๊ณผ prodRangeCd๋ฅผ ํ•œ ๋ฒˆ์— ๊ตฌ์กฐ ๋ถ„ํ•ดํ•˜์—ฌ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

'Errors' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[SVN] svn commit has encountered a problem  (0) 2022.05.23

+ Recent posts