μ •κ·œν‘œν˜„μ‹πŸ’‘

str1.match(/\b\w{1,}\b/g)

진ㅉㅏ 단 ν•œκΈ€μžλ„ 이해할 수 μ—†μ—ˆλ˜ μ •κ·œν‘œν˜„μ‹ ..
νŒ¨μΊ μ—μ„œ μ œκ³΅ν•΄ μ€€ ν•œμ‹œκ°„μ˜ κ°•μ˜λ§ŒμœΌλ‘œ 이제 μ‘°κΈˆμ€ μ΄ν•΄ν•˜κ³  μ“Έ 수 있게 됐닀..!!

  • μ •κ·œν‘œν˜„μ‹, Regular Expression
  • "μ •κ·œμ‹" 이라고도 함
  • λ¬Έμžμ—΄μ„ λ‹€μ–‘ν•œ νŒ¨ν„΄μœΌλ‘œ 검색 ν•  수 μžˆλŠ” ν˜•μ‹μ–Έμ–΄(νŒ¨ν„΄)
  • μžλ°”μŠ€ν¬λ¦½νŠΈ 뿐만 μ•„λ‹ˆλΌ λ‹€λ₯Έ ν”„λ‘œκ·Έλ‘œλ° μ–Έμ–΄ ν˜Ήμ€ νŠΉμ •ν•œ ν™˜κ²½μ—μ„œλ„ μ‚¬μš© κ°€λŠ₯

πŸ§‘μ •κ·œμ‹μ˜ ꡬ성

/ν‘œν˜„/μ˜΅μ…˜

/abc/g // "abc"λΌλŠ” λ¬Έμžμ—΄μ„ μ°Ύκ³ μžν•¨ g(global)μ˜΅μ…˜μ„ μ„€μ •ν•˜μ—¬ 검색
  • μ •κ·œμ‹μ€ "ν‘œν˜„(νŒ¨ν„΄)"κ³Ό "μ˜΅μ…˜(ν”Œλž˜κ·Έ)"λ₯Ό μ„€μ •
  • ν‘œν˜„(νŒ¨ν„΄)은 찾고자 ν•˜λŠ” λ¬Έμžμ—΄μ„ μ‚½μž…
  • μ˜΅μ…˜(ν”Œλž˜κ·Έ)λŠ” ν‘œν˜„μ‹μ— 좔가적인 검색 μ˜΅μ…˜μ„ λΆ€μ—¬

πŸ§‘μ •κ·œμ‹ 생성방식

πŸ’›μƒμ„±μž ν•¨μˆ˜

  • new RegExp() μƒμ„±μž ν•¨μˆ˜λ₯Ό μ‚¬μš©
  //new RegExp('ν‘œν˜„(νŒ¨ν„΄)', 'μ˜΅μ…˜')
  const regexp = new RegExp('[a-z]','gi')

πŸ’›λ¦¬ν„°λŸ΄ 방식

  • /둜 감싸진 νŒ¨ν„΄μ„ λ¦¬ν„°λŸ΄λ‘œ μ‚¬μš©
  // /ν‘œν˜„/μ˜΅μ…˜
  const regexp = /[a-z]/gi

πŸ§‘μ •κ·œμ‹μ„ λ‹€λ£¨λŠ” λ©”μ†Œλ“œ

πŸ’›test

  • μ •κ·œμ‹.test(λ¬Έμžμ—΄)
  • μ •κ·œμ‹κ³Ό μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ˜ μ‘΄μž¬μ—¬λΆ€(boolean) λ°˜ν™˜
  const str = "The quick brown fox jumps over the lazy dog."

  // 전체 λ¬Έμžμ—΄ 쀑 "the" λ₯Ό 탐색
  const regexp = /the/g

  // strλ³€μˆ˜μ˜ 전체 λ¬Έμžμ—΄ 쀑 "the"λ₯Ό 탐색 ν›„ μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ˜ μ—¬λΆ€λ₯Ό λ°˜ν™˜
  console.log(regexp.test(str)) //true

πŸ’›match

  • λ¬Έμžμ—΄.match(μ •κ·œμ‹)
  • μ •κ·œμ‹κ³Ό μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ„ λ°°μ—΄λ°μ΄ν„°λ‘œ λ°˜ν™˜
  const str = "The quick brown fox jumps over the lazy dog."

  // 전체 λ¬Έμžμ—΄ 쀑 λŒ€μ†Œλ¬Έμžμ˜ ꡬ뢄 없이 "the" λ₯Ό 탐색
  const regexp = /the/gi

  // strλ³€μˆ˜μ˜ 전체 λ¬Έμžμ—΄ 쀑 "the"λ₯Ό 탐색 ν›„ μΌμΉ˜ν•˜λŠ” λ¬Έμžλ“€μ„ λ°°μ—΄ν˜•νƒœλ‘œ λ°˜ν™˜
  console.log(regexp.test(str)) // ['The', 'the']

πŸ’›replace

  • λ¬Έμžμ—΄.replace(μ •κ·œμ‹, λŒ€μ²΄λ¬Έμž)
  • μ •κ·œμ‹κ³Ό μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ„ μ°Ύμ•„ λŒ€μ²΄λ¬Έμžλ‘œ λŒ€μ²΄ 된 λ¬Έμžμ—΄ λ°˜ν™˜
  const str = "The quick brown fox jumps over the lazy dog."

  // 전체 λ¬Έμžμ—΄ 쀑 λŒ€μ†Œλ¬Έμžμ˜ ꡬ뢄 없이 "the" λ₯Ό 탐색
  const regexp = /the/gi

  // str λ³€μˆ˜μ˜ 전체 λ¬Έμžμ—΄ 쀑 λŒ€μ†Œλ¬Έμžμ˜ ꡬ뢄 없이 "the" λ₯Ό 탐색 ν•˜μ—¬ "TTHHEE"둜 재배치(replace)
  console.log(str.replace(regexp1,'TTHHEE')) //"TTHHEE quick brown fox jumps over TTHHEE lazy dog."

πŸ§‘μ •κ·œμ‹μ˜ μ˜΅μ…˜(ν”Œλž˜κ·Έ)

  • ν‘œν˜„μ‹μœΌλ‘œ κ²€μƒ‰ν•˜λ €λŠ” 문자 νŒ¨ν„΄μ— 좔가적인 μ˜΅μ…˜μ„ λ„£μ–΄ μ›ν•˜λŠ” 문자 검색 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ ν•  수 μžˆλ„λ‘ ν•˜λŠ” μΌμ’…μ˜ 단좕어
  • /ν‘œν˜„/μ˜΅μ…˜ 의 μ •κ·œμ‹ νŒ¨ν„΄μ—μ„œ λ’€μ˜ μ˜΅μ…˜μžλ¦¬μ— λ“€μ–΄κ°€λ©° μ—¬λŸ¬κ°€μ§€ μ˜΅μ…˜μ„ ν•œκΊΌλ²ˆμ— 넣을 수 있음
  • μƒλž΅ κ°€λŠ₯

ex)
/ν‘œν˜„/ : 아무 μ˜΅μ…˜(ν”Œλž˜κ·Έ)도 λΆ€μ—¬ν•˜μ§€ μ•ŠμŒ
/ν‘œν˜„/g : g μ˜΅μ…˜(ν”Œλž˜κ·Έ)만 λΆ€μ—¬
/ν‘œν˜„/gi : g μ˜΅μ…˜(ν”Œλž˜κ·Έ)κ³Ό i μ˜΅μ…˜ λΆ€μ—¬
/ν‘œν˜„/gim : g μ˜΅μ…˜(ν”Œλž˜κ·Έ)κ³Ό i μ˜΅μ…˜κ³Ό m μ˜΅μ…˜ λΆ€μ—¬

πŸ’› g (Global)

  • μΌμΉ˜ν•˜λŠ” λͺ¨λ“  λ¬Έμžμ—΄μ„ 탐색
  • ν•΄λ‹Ήμ˜΅μ…˜μ„ μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 제일 처음으둜 μΌμΉ˜λ˜λŠ” λ¬Έμžμ—΄λ§Œ λ°˜ν™˜
  const str = "the quick brown fox jumps over the lazy dog."


  // "o" λ₯Ό 탐색 ( 아무 ν”Œλž˜κ·Έλ„ λΆ€μ—¬ν•˜μ§€ μ•ŠμŒ )
  const regexp = /o/

  // strλ³€μˆ˜μ—μ„œ "o"λ₯Ό 탐색 ν›„ μΌμΉ˜ν•˜λŠ” 문자λ₯Ό λ°˜ν™˜(match)
  // g μ˜΅μ…˜μ„ λΆ€μ—¬ν•˜μ§€ μ•Šμ•„ 처음으둜 λ§Œλ‚˜λŠ” ν•˜λ‚˜μ˜ 'o'만 λ°˜ν™˜
  console.log(regexp.match(str)) // ['o']


  // 전체 λ¬Έμžμ—΄ 쀑 "o" λ₯Ό 탐색 (g ν”Œλž˜κ·Έ)
  const globalRegexp = /o/g

  // strλ³€μˆ˜μ˜ 전체 λ¬Έμžμ—΄ 쀑 "o"λ₯Ό 탐색 ν›„ μΌμΉ˜ν•˜λŠ” λ¬Έμžλ“€μ„ λ°°μ—΄ν˜•νƒœλ‘œ λ°˜ν™˜(match)
  // g μ˜΅μ…˜μ„ λΆ€μ—¬ν•˜μ—¬ ν•΄λ‹Ή λ¬Έμžμ—΄μ˜ λͺ¨λ“  "o" λ°˜ν™˜
  console.log(globalRegexp.match(str)) // ['o','o','o','o']

πŸ’› i (Ignore case)

  • μ˜μ–΄μ˜ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šλ„λ‘ 함
const str = "The quick brown fox jumps over the lazy dog."


// 전체 λ¬Έμžμ—΄ 쀑(g) "the" λ₯Ό 탐색 
const regexp = /the/g
console.log(regexp.match(str)) // ['the']


// 전체 λ¬Έμžμ—΄ 쀑(g) λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³ (i) "the" λ₯Ό 탐색 
const ignoreRegexp = /the/gi
console.log(ignoreRegexp.match(str)) // ['The','the']

πŸ’› m (Multi line)

  • ν•˜λ‚˜μ˜ λ¬Έμžμ—΄μ—μ„œ μ€„λ°”κΏˆμ΄ μΌμ–΄λ‚˜λŠ” 경우 μ€„λ‹¨μœ„λ‘œ λ¬Έμžμ—΄μ„ λ‚˜λˆ„μ–΄ 인식
const str = `The quick brown fox jumps over the lazy dog
  My faxed joke won a pager in the cable TV quiz show
  Sphinx of black quartz, judge my vow`

// 전체 λ¬Έμžμ—΄ 쀑 "w"둜 λλ‚˜λŠ” λ¬Έμžμ—΄μ˜ "w"λ₯Ό λ°˜ν™˜
// mν”Œλž˜κ·Έλ₯Ό λΆ€μ—¬ν•˜μ§€ μ•ŠμœΌλ©΄ 전체 λ¬Έμžμ—΄μ„ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ μΈμ‹ν•˜μ—¬ 'w'둜 λλ‚˜λŠ” λ¬Έμžμ—΄μ΄ ν•˜λ‚˜λΌκ³  νŒλ‹¨
console.log(str.match(/w$/g)) //['w']

// 전체 λ¬Έμžμ—΄ 쀑 "w"둜 λλ‚˜λŠ” λ¬Έμžμ—΄μ˜ "w"λ₯Ό λ°˜ν™˜
// mν”Œλž˜κ·Έλ₯Ό λΆ€μ—¬ν•˜μ—¬ μ€„λ‹¨μœ„λ‘œ λ¬Έμžμ—΄μ„ λ‚˜λˆ„μ–΄ 인식. 'w'둜 λλ‚˜λŠ” λ¬Έμžμ—΄μ„ λͺ¨λ‘ 찾음
console.log(str.match(/w$/gm)) //['w', 'w']

πŸ§‘μ •κ·œμ‹μ˜ ν‘œν˜„(νŒ¨ν„΄)

λ‹€μ–‘ν•œ νŠΉμˆ˜κΈ°ν˜Έμ™€ νŒ¨ν„΄μ„ 톡해 λ¬Έμžμ—΄μ„ κ²€μƒ‰ν•˜λŠ” 방식 (μΌμΉ˜νŒ¨ν„΄)을 지정 ν•  수 μžˆλ‹€

πŸ’› ^ab

  • 쀄(Line) μ‹œμž‘μ— μžˆλŠ” 'ab'와 일치
const str = `The quick brown fox jumps over the lazy dog
  My faxed joke won a pager in the cable TV quiz show
  Sphinx of black quartz, judge my vow`

// 'the'둜 μ‹œμž‘ν•˜λŠ” λ¬Έμžμ—΄ 탐색
console.log(str.match(/^the/gim)) // ['The']

// ^ν‘œν˜„μ‹ 없이 검색 μ‹œ λͺ¨λ“  'the' 탐색
console.log(str.match(/the/gim)) // ['The','the','the']

πŸ’› ab$

  • 쀄(Line) 끝에 μžˆλŠ” 'ab'와 일치
const str = `The quick brown fox jumps over the lazy dog
  My faxed joke won a pager in the cable TV quiz show
  Sphinx of black quartz, judge my vow`

// 'the'둜 μ‹œμž‘ν•˜λŠ” λ¬Έμžμ—΄ 탐색
console.log(str.match(/^the/gim)) // ["The"]

πŸ’› a|b

  • 'a' λ˜λŠ” 'b'
const str = "The quick brown fox jumps over the lazy dog."

// 'fox'λ˜λŠ” 'dog' λͺ¨λ‘ 탐색
console.log(str.match(/fox|dog/g)) //['fox', 'dog']

πŸ’› ab?

  • 'b'κ°€ μ—†κ±°λ‚˜ 'b'와 일치
const str = `
https://fastcampus.app/
http://localhost:1234/
`

// 's'뒀에 ?ν‘œν˜„μ‹μ„ λΆ™μ—¬ 's'κ°€ μžˆκ±°λ‚˜ μ—†λŠ” 'http'λ₯Ό 탐색
console.log(str.match(/https?/g)) //['https', 'http']

πŸ’› .

  • λͺ¨λ“  문자 일치
  • μž„μ˜μ˜ ν•œ λ¬Έμžμ™€ 일치
const str = "The quick brown fox"

// . : 띄어쓰기λ₯Ό 포함 ν•œ λͺ¨λ“  λ¬Έμžμ—΄ 탐색
console.log(str.match(/./g)) 
// ['T', 'h', 'e', ' ', 'q', 'u', 'i', 'c', 'k', ' ', 'b', 'r', 'o', 'w', 'n', ' ', 'f', 'o', 'x']

//μ•„λž˜μ™€ 같이 μ€‘κ°„λ¬Έμžλ₯Ό μ •ν™•νžˆ μ•Œ 수 없을 λ•Œ μ‚¬μš© ν•  수 있음
console.log(str.match(/b...n/g)) //['brown']
console.log(str.match(/f../g)) //['fox']
console.log(str.match(/.he/g)) //['The']

πŸ’› +

  • 1개 이상 연속 일치
const str = "abc1212@naver.com"

// \w+ : 63개 λ¬Έμžμ™€ μΌμΉ˜ν•˜λŠ” μž„μ˜μ˜ λ¬Έμžκ°€ 1κ°œμ΄μƒ 연속됨.
console.log(str.match(/\w+/g)) //[abc1212, naver, com]

πŸ’› {2}

  • 2개 연속 일치
const str = 'xxxx'

// 'x'κ°€ 2번 μ—°μ†μœΌλ‘œ μΌμΉ˜ν•˜λŠ” 문자 탐색
console.log(str.match(/x{2}/g)) //['xx', 'xx']

πŸ’› {2,}

  • 2개 이상 연속 일치
  • λ‘λ²ˆμ§Έ μš”μ†Œ (μ΅œλŒ“κ°’)을 λΉ„μ›Œλ‘ μœΌλ‘œμ¨ μ΅œλŒ“κ°’μ„ μ œν•œν•˜μ§€ μ•ŠμŒ
const str = 'xxxx'

// 'x'κ°€ 2번 이상 μ—°μ†μœΌλ‘œ μΌμΉ˜ν•˜λŠ” 문자 탐색
console.log(str.match(/x{2,}/g)) //['xxxx']

πŸ’› {2,3}

  • 2개 이상 3개 μ΄ν•˜ 연속 일치
const str = 'xxxx'

// 'x'κ°€ 2λ²ˆμ΄μƒ 3번 μ΄ν•˜ μ—°μ†μœΌλ‘œ μΌμΉ˜ν•˜λŠ” 문자 탐색
console.log(str.match(/x{2,3}/g)) //['xxx']

πŸ’› +

  • κ°€λŠ₯ν•œ λ§Žμ€ 횟수 연속 일치
const str = 'abc1212@naver.com'

// 이메일 탐색 μ •κ·œμ‹
// .+ : 길이,문자 상관없이 λͺ¨λ“  문자 일치 (아이디)
// @
// .+ : 길이,문자 상관없이 λͺ¨λ“  문자 일치 (μ΄λ©”μΌμ£Όμ†Œκ°’)
// \. : .
// .{2,} : 2자리 이상 μ—°μ†λ˜λŠ” μž„μ˜μ˜ 문자 (com, net λ“±)

console.log(str.match(/.+@.+\..{2,}/gm)) //abc1212@naver.com

πŸ’› [abc]

  • a λ˜λŠ” b λ˜λŠ” c
const str = "The quick brown fox jumps over the lazy dog."

// [fox] : 'f' λ˜λŠ” 'o' λ˜λŠ” 'x' λͺ¨λ‘ 탐색
console.log(str.match(/[fox]/g)) //['o', 'f', 'o', 'x', 'o', 'o']

πŸ’› [a-z]

  • aλΆ€ν„° z μ‚¬μ΄μ˜ λ¬Έμžκ΅¬κ°„μ— 일치(μ†Œλ¬Έμž)
const str = 'http://localhost:1234/'

// a-z μ‚¬μ΄μ˜ λͺ¨λ“  μ•ŒνŒŒλ²³ 탐색 (μ†Œλ¬Έμž)
console.log(str.match(/[a-z]/g)) // ['h', 't', 't', 'p', 'l', 'o', 'c', 'a', 'l', 'h', 'o', 's', 't']

πŸ’› [A-Z]

  • AλΆ€ν„° Z μ‚¬μ΄μ˜ λ¬Έμžκ΅¬κ°„μ— 일치(λŒ€λ¬Έμž)
const str = 'Hello World!'

// A-Z μ‚¬μ΄μ˜ λͺ¨λ“  μ•ŒνŒŒλ²³ 탐색 (λŒ€λ¬Έμž)
console.log(str.match(/[A-Z]/g)) // ['H', 'W']

πŸ’› [0-9] , \d

(\ : λ°±μŠ¬λž˜μ‹œ κΈ°ν˜Έμž…λ‹ˆλ‹€)

  • [0-9] : 0λΆ€ν„° 9 μ‚¬μ΄μ˜ μˆ«μžκ΅¬κ°„μ— 일치(숫자)
  • \d : μˆ«μžμ— 일치(Digit)
const str = '010-1234-5678'

//1κΈ€μž 이상 μ—°μ†λ˜λŠ”({1, }) 0-9μ‚¬μ΄μ˜ 숫자
console.log(str.match(/[0-9]{1,}/g)) //['010', '1234', '5678']
console.log(str.match(/\d{1,}/g)) //['010', '1234', '5678']

πŸ’› [κ°€-힣]

  • κ°€ λΆ€ν„° 힣 μ‚¬μ΄μ˜ λ¬Έμžκ΅¬κ°„μ— 일치(ν•œκΈ€)
const str = '동해물과 백두산이 마λ₯΄κ³  닳도둝'

//1κΈ€μž 이상 μ—°μ†λ˜λŠ”({1, }) [κ°€-힣]μ‚¬μ΄μ˜ 문자(ν•œκΈ€)
console.log(str.match(/[κ°€-힣]{1,}/g)) // ['동해물과', '백두산이', '마λ₯΄κ³ ', '닳도둝']

πŸ’› \w , \b

(\ : λ°±μŠ¬λž˜μ‹œ κΈ°ν˜Έμž…λ‹ˆλ‹€)

  • \w : 63개 문자(λŒ€μ†Œμ˜λ¬Έ52개, 숫자10개, _(underbar))에 일치 (Word)
  • \b : 63개 λ¬Έμžμ— μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” λ¬Έμžκ²½κ³„ (Boundary)
/*
\b 둜 63개 λ¬Έμžμ— ν•΄λ‹Ήν•˜μ§€ μ•ŠλŠ” 문자 (띄어쓰기, 특수문자 λ“±) λ₯Ό μ•ž λ’€λ‘œ λ§λŒ€κ³ ,
\w{1,} 둜 1κΈ€μž 이상 μ—°μ†λ˜λŠ” λͺ¨λ“  λ¬Έμžμ—΄μ„ νƒμƒ‰ν•˜λ©΄ μ•„λž˜μ™€ 같이
단어 λ‹¨μœ„, ν˜Ήμ€ λ¬ΆμŒλ‹¨μœ„(?)의 문자 μΆ”μΆœ κ°€λŠ₯
*/

const phone = '010-1234-5678'
const mail = 'www.google.com'
const str = 'The quick brown fox jumps over the lazy dog'

//μ—°μ†λ˜λŠ” 문자
console.log(phone.match(/\b\w{1,}\b/g)) //['010', '1234', '5678']
console.log(mail.match(/\b\w{1,}\b/g)) //['www', 'google', 'com']
console.log(str.match(/\b\w{1,}\b/g)) //['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']

//t둜 μ‹œμž‘ν•˜λŠ” μ—°μ†λ˜λŠ” 문자
console.log(str.match(/\bt\w{1,}\b/gi)) //['The', 'the']

πŸ’› \s

(\ : λ°±μŠ¬λž˜μ‹œ κΈ°ν˜Έμž…λ‹ˆλ‹€)

  • 곡백에 일치 (Space, tapλ“±)
const str = `   hello    
  world   !     `;

//replace() λ₯Ό ν™œμš©ν•˜μ—¬ λͺ¨λ“  곡백을 "" (λΉˆλ¬Έμžμ—΄) 둜 재배치
console.log(str.replace(/\s/g,"")) //'helloworld!'

πŸ’› 문자(?=a)

  • a 의 μ•žμͺ½μ— μœ„μΉ˜ν•˜λŠ” λ¬Έμžμ—΄ 탐색
const mail = 'abc123@gmail.com'

// @ μ•žμ—μ˜€λŠ” 1κΈ€μžμ΄μƒμ˜ λͺ¨λ“  문자 (μ΄λ©”μΌμ—μ„œ 아이디 μΆ”μΆœ)
console.log(mail.match(/.{1,}(?=@)/g)) //['abc123']

πŸ’› (?<=a)문자

  • a λ’€μͺ½μ— μœ„μΉ˜ν•˜λŠ” λ¬Έμžμ—΄ 탐색
const mail = 'abc123@gmail.com'

// @ λ’€μ—μ˜€λŠ” 1κΈ€μžμ΄μƒμ˜ λͺ¨λ“  문자
console.log(mail.match(/(?<=@).{1,}/g)) //['gmail.com']

λ§ˆμΉ˜λ©°πŸ™Œ

항상 μ–΄λ””μ„ κ°€ μ •κ·œμ‹ ν‘œν˜„μ΄ 보이면 λ¨Έλ¦¬λΆ™μž‘κ³  μœΌμ•„.. ν•˜λ©° ν”Όν•˜κΈ° λ°”λΉ΄λŠ”λ° 또 μ΄λ ‡κ²Œ μ°¨κ·Όμ°¨κ·Ό νŒŒν—€μ³λ³΄λ‹ˆ λˆˆμ— 읡기만 ν•˜λ©΄ 생각보닀 어렡지 μ•Šμ„ 것 κ°™κ³  또 λ‚˜λ¦„ νŽΈν•˜κ³  μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆκ² κ΅¬λ‚˜ μ‹Άμ—ˆλ‹€

κΌ­ ν•œλ²ˆμ―€ 곡뢀λ₯Ό ν•΄μ•Όκ² λ‹€ 생각은 ν•˜κ³  μžˆμ—ˆμ§€λ§Œ λ„ˆλ¬΄ μ–΄λ €μ›Œλ³΄μ—¬μ„œ 엄두도 λͺ»λ‚΄κ³  μžˆμ—ˆλŠ”λ° νŒ¨μΊ μ—μ„œ λˆˆμ•žμ— μ΄λ ‡κ²Œ λ–‘ν•˜λ‹ˆ κ°•μ˜λ₯Ό κ°€μ Έλ‹€ 놓아 μ€€ 덕뢄에 μ΄λ ‡κ²Œ 또 곡뢀가 λ˜μ—ˆλ‹€!!
μ–΄λ €μ›Œ 보인닀고 κ²λ§Œλ‚΄λ©΄ 정말 λ˜λŠ”κ²Œ μ—†μœΌλ©°,, 막상 λΆ€λ”ͺ히면 별 κ±° μ•„λ‹Œκ²ƒλ“€μ΄ λŒ€λΆ€λΆ„μΈκ²ƒμ„ λ˜ν•œλ²ˆ λŠλ‚€λ‹€!! λ‚΄κ°€ μ΄λ ‡κ²Œ μ»΄ν“¨ν„°μ•žμ—μ„œ κ°œλ°œκ³΅λΆ€λ₯Ό ν•˜κ³ μžˆμ„κ±°λΌκ³€ μΌλ…„μ „λ§Œ 해도 κΏˆλ„ λͺ»κΎΈλ˜ 일인데 μ–΄λ–»κ²Œλ“  λΆ€λ”ͺν˜€λ³΄λ‹ˆ μ§€κΈˆ μ΄λ ‡κ²Œ μ–΄λ–»κ²Œλ“  ν•˜κ³ μžˆλŠ”κ²ƒ 처럼!!

profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ„±μž₯일기 πŸ’­

0개의 λŒ“κΈ€