๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ Today I Learned(TIL)/์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 4

by carrot0911 2025. 2. 13.

์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง 

ํŽ˜์ด์ง€ ์กฐํšŒ ํ•„ํ„ฐ๋ง ๋กœ์ง ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„

QueryDSL์„ ํ™œ์šฉํ•˜์—ฌ ์˜ต์…˜๋“ค์„ ํ•„ํ„ฐ๋งํ•ด์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋กœ์ง์„ ์™„์„ฑํ–ˆ๋‹ค.
์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ Dto๋กœ ๋ฐ˜ํ™˜๋ฐ›๋Š” ๊ฑด ํž˜๋“ค ๊ฒƒ ๊ฐ™์•„์„œ ๋กœ์ง์„ ๋‚˜๋ˆ ์„œ dataId๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๊ณ  keyword๋ฅผ ๋”ฐ๋กœ ๋ฐ˜ํ™˜๋ฐ›์•„์„œ List ํ˜•ํƒœ๋กœ Dto์™€ ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.
์ „๋ถ€ ๊ตฌํ˜„ํ•œ ํ›„ Postman์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค๋Š”๋ฐ ์–ด๋–ค ํ•„ํ„ฐ๋ง์„ ๋„ฃ์–ด๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์™”๋‹ค.. @ModelAttribute๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ์„ ๋ฐ›๊ฒŒ๋” ์„ค์ •ํ–ˆ๋Š”๋ฐ ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜๋ ค๋ฉด Dto์— @Setter ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค........ ๊ทธ๋Ÿฐ ์ค„๋„ ๋ชจ๋ฅด๊ณ  ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋ž‘ Postman์—์„œ ์ž…๋ ฅ์„ ์ž˜๋ชปํ•œ ์ค„ ์•Œ๊ณ  ๊ณ„์† ๊ฑฐ๊ธฐ๋งŒ ๋“ค์—ฌ๋‹ค ๋ณด๊ณ  ์žˆ์—ˆ์œผ๋‹ˆ... ๋‹ต์ด ๋‚˜์˜ฌ๋ฆฌ๊ฐ€ ์—†์—ˆ๋‹ค.
๋ฐฉ๋ฒ•์„ ์ฐพ์€ ํ›„ @Setter๋ฅผ ์ ์šฉํ•˜๊ณ  ๋‹ค์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ ค๋ดค๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ ์ˆ˜์ •

ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ๋๋‚ธ ํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๋ฅผ ํ†ตํ•ด ํšŒ์‚ฌ๋ช…๊ณผ ๋น„๊ตํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.
Dto์— ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  QueryDSL์—์„œ๋„ ๊ฒ€์ƒ‰์–ด๋ฅผ ํ†ตํ•ด ํšŒ์‚ฌ๋ช…์— ํฌํ•จ๋˜๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋„ ํ…Œ์ŠคํŠธํ–ˆ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.. ์™œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”๊ฑด๊ฐ€.. ํ•˜๋ฉด์„œ ์ด์œ ๋ฅผ ์ฐพ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋‹คํ–‰ํžˆ ๋‚ด๊ฐ€ @RequestMapping์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  Postman์—์„œ ๋ฐ”๊พธ์ง€ ์•Š์•„์„œ ์ƒ๊ธฐ๋Š” ์—๋Ÿฌ์˜€๊ณ ,  URL์„ ์ˆ˜์ •ํ•œ ํ›„ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ–ˆ๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

Stream ๊ณต๋ถ€

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋„ ๊ทธ๋ ‡๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋„ ์ง„ํ–‰ํ•˜๋ฉด์„œ Stream์„ ๊ต‰์žฅํžˆ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ •์ž‘ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์˜ˆ์ „ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๋”ฐ๋ผ ์ ๋Š”๊ฒŒ ๋Œ€๋ถ€๋ถ„์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€์ž๋Š” ์ƒ๊ฐ์œผ๋กœ ๊ฐœ๋…๋“ค๊ณผ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์„ ์ •๋ฆฌํ•ด๋ดค๋‹ค.


Java Stream

๋žŒ๋‹ค๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐ์—ด๊ณผ ์ปฌ๋ ‰์…˜์„ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ .
๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ถ”์ƒํ™”ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ด ๋†“์•„์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์ƒ๊ด€์—†์ด ๋ชจ๋‘ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์˜ ์žฌ์ƒ์šฉ์„ฑ์ด ๋†’์•„์ง.

์ŠคํŠธ๋ฆผ์˜ ํŠน์ง•

  • ์›๋ณธ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ → ์ฝ๊ธฐ๋งŒ ํ•จ
  • ์ผํšŒ์šฉ → ํ•œ๋ฒˆ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ซํ˜€์„œ ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ
  • ์ตœ์ข… ์—ฐ์‚ฐ ์ „๊นŒ์ง€ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ
  • ์ž‘์—…์„ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์œผ๋กœ ์ฒ˜๋ฆฌ → forEach()๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€์ž…๋œ ๋žŒ๋‹ค์‹์„ ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฌ์›€ → ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์‚ฌ์šฉ
  • ๊ธฐ๋ณธํ˜• ์ŠคํŠธ๋ฆผ์„ ์ œ๊ณต → Stream<Integer> ๋Œ€์‹  IntStream์ด ์ œ๊ณต๋˜์–ด์„œ ์˜คํ† ๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ ๋“ฑ์˜ ๋ถˆํ•„์š”ํ•œ ๊ณผ์ •์ด ์ƒ๋žต๋˜๊ณ  ์ˆซ์ž์˜ ๊ฒฝ์šฐ ์œ ์šฉํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณต(.sum(), .average() ๋“ฑ)

์ค‘๊ฐ„ ์—ฐ์‚ฐ (๊ฐ€๊ณต)

Filtering

์ŠคํŠธ๋ฆผ ๋‚ด ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ํ‰๊ฐ€ํ•ด์„œ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ์ž‘์—… → if๋ฌธ ์—ญํ• 

List<String> list = Arrays.asList("a","b","c");
Stream<String> stream = list.stream()
		.filter(list -> list.contains("a"));  // 'a'๊ฐ€ ๋“ค์–ด๊ฐ„ ์š”์†Œ๋งŒ ์„ ํƒ  [a]

๋žŒ๋‹ค์‹์˜ ๋ฆฌํ„ด๊ฐ’์€ boolean์ด๊ณ  true์ธ ๊ฒฝ์šฐ๋งŒ ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰.

Mapping

์ŠคํŠธ๋ฆผ ๋‚ด ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ํŠน์ • ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…, ๊ฐ’์„ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋žŒ๋‹ค๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ

์ŠคํŠธ๋ฆผ์„ ์›ํ•˜๋Š” ๋ชจ์–‘์˜ ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

Stream<String> stream = list.stream()
		.map(String::toUpperCase);  //[A,B,C]
	    
	  .map(Integers::parseInt);  // ๋ฌธ์ž์—ด -> ์ •์ˆ˜๋กœ ๋ณ€ํ™˜

์ŠคํŠธ๋ฆผ์— ์žˆ๋Š” ๊ฐ’์„ ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ์— ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋„ฃ์œผ๋ฉด ๋ฉ”์„œ๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ(๋ฐ˜ํ™˜๊ฐ’)์ด ๋‹ด๊น€.

Sorting

์ŠคํŠธ๋ฆผ ๋‚ด ์š”์†Œ๋“ค์„ ์ •๋ ฌํ•˜๋Š” ์ž‘์—…, Comparator ์‚ฌ์šฉ

Stream<String> stream = list.stream()
		.sorted() // [a,b,c] ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
	  .sorted(Comparator.reverseOrder()) // [c,b,a] (๋‚ด๋ฆผ์ฐจ์ˆœ)
    
List<String> list = Arrays.asList("a","bb","ccc");
Stream<String> stream = list.stream()
		.sorted(Comparator.comparingInt(String::length)) // [ccc,bb,a] //๋ฌธ์ž์—ด ๊ธธ์ด ๊ธฐ์ค€ ์ •๋ ฌ

๊ธฐํƒ€ ์—ฐ์‚ฐ

Stream<String> stream = list.stream()
		.distinct()  // ์ค‘๋ณต ์ œ๊ฑฐ
    .limit(max)  // ์ตœ๋Œ€ ํฌ๊ธฐ ์ œํ•œ
    .skip(n)  // ์•ž์—์„œ๋ถ€ํ„ฐ n๊ฐœ skipํ•˜๊ธฐ
    .peek(System.out::println)  // ์ค‘๊ฐ„ ์ž‘์—…๊ฒฐ๊ณผ ํ™•์ธ

์ตœ์ข… ์—ฐ์‚ฐ (๊ฒฐ๊ณผ ๋งŒ๋“ค๊ธฐ)

Calculating

๊ธฐ๋ณธํ˜• ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ŠคํŠธ๋ฆผ ๋‚ด ์š”์†Œ๋“ค๋กœ ์ตœ์†Œ, ์ตœ๋Œ€, ํ•ฉ, ํ‰๊ท  ๋“ฑ์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

IntStream stream = list.stream()
		.count()   //์ŠคํŠธ๋ฆผ ์š”์†Œ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
    .sum()     //์ŠคํŠธ๋ฆผ ์š”์†Œ์˜ ํ•ฉ ๋ฐ˜ํ™˜
    .min()     //์ŠคํŠธ๋ฆผ์˜ ์ตœ์†Œ๊ฐ’ ๋ฐ˜ํ™˜
    .max()     //์ŠคํŠธ๋ฆผ์˜ ์ตœ๋Œ€๊ฐ’ ๋ฐ˜ํ™˜
    .average() //์ŠคํŠธ๋ฆผ์˜ ํ‰๊ท ๊ฐ’ ๋ฐ˜ํ™˜

Reduction

์ŠคํŠธ๋ฆผ์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ค„์—ฌ๊ฐ€๋ฉฐ ๋ˆ„์ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰

IntStream stream = IntStream.range(1,5);
		.reduce(10, (total,num)->total+num);  //reduce(์ดˆ๊ธฐ๊ฐ’, (๋ˆ„์  ๋ณ€์ˆ˜,์š”์†Œ)->์ˆ˜ํ–‰๋ฌธ)
    // 10 + 1+2+3+4+5 = 25

Collecting

//์˜ˆ์‹œ ๋ฆฌ์ŠคํŠธ
List<Person> members = Arrays.asList(new Person("lee", 26),
																		 new Person("kim", 23),
																		 new Person("park", 23));
                    
// toList() - ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜
members.stream()
		.map(Person::getLastName)
    .collect(Collectors.toList());  // [lee, kim, park]
    
// joining() - ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ง์œผ๋กœ ์ด์–ด ๋ถ™์ด๊ธฐ
members.stream()
	.map(Person::getLastName)
    .collect(Collectors.joining(delimiter = "+" , prefix = "<", suffix = ">");  // <lee+kim+park>
    
//groupingBy() - ๊ทธ๋ฃน์ง€์–ด์„œ Map์œผ๋กœ ๋ฐ˜ํ™˜
members.stream()
		.collect(Collectors.groupingBy(Person::getAge));  // {26 = [Person{lastName="lee",age=26}],
    //  23 = [Person{lastName="kim",age=23},Person{lastName="park",age=23}]}
    
//collectingAndThen() - collecting ์ดํ›„ ์ถ”๊ฐ€ ์ž‘์—… ์ˆ˜ํ–‰
members.stream()
		.collect(Collectors.collectingAndThen (Collectors.toSet(),
									    									   Collections::unmodifiableSet));
		//Set์œผ๋กœ collectํ•œ ํ›„ ์ˆ˜์ •๋ถˆ๊ฐ€ํ•œ set์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—… ์‹คํ–‰

Matching

ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

  • anyMatch(ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€)
  • allMatch(๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š”์ง€)
  • noneMatch(๋ชจ๋‘ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”์ง€)
List<String> members = Arrays.asList("Lee", "Park", "Hwang");
boolean matchResult = members.stream()
						.anyMatch(members -> members.contains("w")); //w๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€, True

boolean matchResult = members.stream()
						.allMatch(members -> members.length() >= 4); //๋ชจ๋“  ์š”์†Œ์˜ ๊ธธ์ด๊ฐ€ 4 ์ด์ƒ์ธ์ง€, False

boolean matchResult = members.stream()
						.noneMatch(members -> members.endsWith("t")); //t๋กœ ๋๋‚˜๋Š” ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š”์ง€, True

Iterating

forEach๋กœ ์ŠคํŠธ๋ฆผ์„ ๋Œ๋ฉด์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—…

members.stream()
		.map(Person::getName)
    .forEach(System.out::println);
    // ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ (peek๋Š” ์ค‘๊ฐ„, forEach๋Š” ์ตœ์ข…)

Finding

์ŠคํŠธ๋ฆผ์—์„œ ํ•˜๋‚˜์˜ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜

Person person = members.stream()
										.findAny()   // ๋จผ์ € ์ฐพ์€ ์š”์†Œ ํ•˜๋‚˜ ๋ฐ˜ํ™˜, ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์˜ ๊ฒฝ์šฐ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์Œ
                    .findFirst() // ์ฒซ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜

์ตœ๊ทผ ๊ฒ€์ƒ‰ ๊ธฐ๋ก ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

ํŽ˜์ด์ง• ์กฐํšŒ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋˜๊ณ  ์ตœ๊ทผ ๊ฒ€์ƒ‰ ๊ธฐ๋ก์„ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๊ทธ ์ „์— ๋ฏธ๋ฆฌ ์งœ๋†“์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด์„œ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์ƒ๊ฐ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋” ๋‹จ์ถ•๋˜์—ˆ๊ณ  ๊ธˆ๋ฐฉ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋งˆ๋ฌด๋ฆฌํ•œ ํ›„ Elasticsearch์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์˜ค๋Š˜ ํ•˜๋ฃจ ์ •๋ฆฌ โœ๏ธ

์˜ค๋Š˜์€ ์ •๋ง ๋ชฝ๋กฑํ•˜๊ฒŒ ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜๊ฐ„ ๊ฒƒ ๊ฐ™๋‹ค... ํ•˜๋ฃจ์— 4์‹œ๊ฐ„ ์ž๊ณ  ๋ฒ„ํ‹ฐ๋Š” ๊ฒƒ์€ ์ •๋ง ๋ฏธ์นœ ์ง“ ๊ฐ™๋‹ค. ์ƒˆ๋ฒฝ 3์‹œ ๋ฐ˜์— ์ž์„œ 7์‹œ ๋ฐ˜์— ์ผ์–ด๋‚œ ๊ฒƒ๋„ ๋Œ€๋‹จํ•œ ์ผ์ด๋‹ค.. ๋‚œ ์ง„์งœ ์ž ์ด ํ•„์ˆ˜์ธ ์‚ฌ๋žŒ์ธ๋ฐ ใ… ใ…œ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„๋™์•ˆ์€ ์ž ์€ ํฌ๊ธฐํ•ด์•ผ๊ฒ ์ง€..
์–ด๋–ป๊ฒŒ๋“  ๋ฒ„ํ‹ฐ๋ฉด์„œ ์ง€๊ธˆ๋„ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋ˆˆ์€ ๋ฐ˜์ฏค ๊ฐ๊ธด ์ƒํƒœ์ด๋‹ค. ์˜ค๋Š˜์€ ๊ทธ๋ž˜๋„ ์ข€ ์ž๊ณ  ๋‚ด์ผ ์ปจ๋””์…˜ ํšŒ๋ณตํ•ด์„œ ํŒ€ ํšŒ์˜๋ž‘ ๊ฐœ๋… ๊ณต๋ถ€๋ฅผ ์ง‘์ค‘ํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.

 

๋‚ด์ผ ๊ณ„ํš โฐ

  • Elasticsearch ๊ณต๋ถ€
  • Elasticsearch ์„ค์น˜..?

+ ์ถ”๊ฐ€ ๊ณ„ํš์€ ์–ธ์ œ๋“ ์ง€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค~~