๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(42)
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.2] ์ตœ์†Ÿ๊ฐ’ ๋งŒ๋“ค๊ธฐ ํ’€์ด ๋‚ ์งœ : 2025.04.10๋ฌธ์ œ ์œ ํ˜• : ์—ฐ์Šต๋ฌธ์ œ๋ฌธ์ œ ์ œ๋ชฉ : ์ตœ์†Ÿ๊ฐ’ ๋งŒ๋“ค๊ธฐ๋ฌธ์ œ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/12941 Intuition์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋ฐฐ์—ด ๋‘ ๊ฐœ์—์„œ ํ•œ ๊ฐœ์”ฉ ์ˆซ์ž๋ฅผ ๋ฝ‘์•„์„œ ๊ณฑํ•œ๋‹ค. ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐ’์˜ ๋ˆ„์ ๋œ ๊ฐ’์„ ์ตœ์†Œ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.๊ฐ๊ฐ์˜ ํ•ฉ์„ ์ตœ์†Œ๋กœ ๋งŒ๋“ค๋ฉด ์ „์ฒด์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. (ํƒ์š•๋ฒ•, Greedy)A์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๊ณผ B์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ณฑํ•˜์—ฌ ๋”ํ•œ๋‹ค. Approach์ฃผ์–ด์ง„ ๋ฐฐ์—ด A, B๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.A๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ B์˜ ์ตœ๋Œ“๊ฐ’(๋งจ ๋ ์š”์†Œ)๊ณผ ๊ณฑํ•˜์—ฌ ๋ณ€์ˆ˜ sum์— ๋ˆ„์ ํ•œ๋‹ค. ComplexityTime complexity : O(n log n)๋ฐฐ์—ด์˜ ๊ธธ์ด..
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.2] ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ํ’€์ด ๋‚ ์งœ : 2025.04.02๋ฌธ์ œ ์œ ํ˜• : ์Šคํƒ/ํ๋ฌธ์ œ ์ œ๋ชฉ : ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ๋ฌธ์ œ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/12909 Intuition๋ฌธ์ž์—ด s๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์—ฌ๋Š” ๊ด„ํ˜ธ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•ด๋‘๊ณ , ์ง์ง€์–ด์ง€๋Š” ๋‹ซ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋งŒ๋‚˜๋ฉด ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ถ€ํ„ฐ ์ œ๊ฑฐํ•œ๋‹ค.์Šคํƒ์ด ๋น„์›Œ์ง„๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ, ์Šคํƒ์ด ๋น„์›Œ์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•œ๋‹ค. Approach๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋‹ซ๋Š” ๊ด„ํ˜ธ์ด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.์—ฌ๋Š” ๊ด„ํ˜ธ๋ฅผ ์ €์žฅํ•  ์Šคํƒ ์—ญํ• ์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ๋‹ค.๋ฌธ์ž์—ด s๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์—ฌ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฐฐ์—ด์˜ ๋งจ ๋์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋‹ซ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ผ๋ฉด true, ์•„..
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.2] ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’ # ํ’€์ด ๋‚ ์งœ : 2025.04.01# ๋ฌธ์ œ ์œ ํ˜• : ์—ฐ์Šต๋ฌธ์ œ# ๋ฌธ์ œ ์ œ๋ชฉ : ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’# ๋ฌธ์ œ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/12939 Intuition๋ฌธ์ž์—ด s๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•ด์„œ Math ๋ฉ”์„œ๋“œ๋กœ ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.๋ฐฐ์—ด์„ ๋”ฐ๋กœ ์„ ์–ธํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. Approach๋ฌธ์ž์—ด s๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.number ๋ฐฐ์—ด์˜ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.๊ฐ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๊ณ  ๊ณต๋ฐฑ์„ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๋กœ ๊ฒฐํ•ฉํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ComplexityTime Complexity : O(N)Space Complexity : O(N) Codefunction solution(s) { const arr = s...
[TypeScript] ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์—์„œ ๊ฐ’๋งŒ ๋ฝ‘์•„์„œ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?๐Ÿค”      const ENDPOINTS = { AUTH: { SIGN_UP: 'POST /auth/sign-up', SIGN_IN: 'POST /auth/sign-in' }} ๋งŒ์•ฝ ์ด๋Ÿฐ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ์ด ๊ฐ์ฒด์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ENDPOINTS.AUTH.SIGN_UP ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ด๋ ‡๊ฒŒ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์—์„œ value๋งŒ ๋ชจ์•„์„œ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ type Endpoint = 'POST /auth/sign-up' | 'POST /auth/sign-in' | ... ๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์ด ๊ฐ์ฒด์˜ ๋ชธ์ง‘์ด ํ›จ์”ฌ ๋” ํฌ๋‹ค๊ณ  ํ•  ๋•Œ๋Š” ๊ฝค๋‚˜ ๊ท€์ฐฎ๊ณ  ๋”๋Ÿฌ์šด ์ฝ”๋“œ๊ฐ€ ๋  ..
NestJS์—์„œ createMock์œผ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ...? ๐Ÿค”   ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด ๊ฐ€์žฅ ๋‹ต๋‹ตํ•œ ๋ถ€๋ถ„์€ ์—ญ์‹œ ์˜์กด์„ฑ๋“ค์„ ๋ชจ์˜(mocking)ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.๋ฐฑ์—”๋“œ์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ฉด ์ข‹์„๋งŒํ•œ ๊ฒƒ์€ ์—ญ์‹œ ์„œ๋น„์Šค ๋ ˆ์ด์–ด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.์ €๋Š” NestJS์—์„œ ์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์•Œ๋ฆผ์„ ์ „์†กํ•˜๋Š” ์„œ๋น„์Šค(NotificationService)๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.์ด ์„œ๋น„์Šค์˜ ํ•จ์ˆ˜๋“ค์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ์™ธ๋ถ€ API๋ฅผ ์‹ค์ œ๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ , ๋งˆ์น˜ ์—ฐ๊ฒฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจํ‚นํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง & ํ…Œ์ŠคํŠธ ์ฝ”๋“œ 1. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง NotificationService๋Š” ConfigService, HttpService, LoggerService ์„ธ ๊ฐœ์˜ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šค์ฝ”๋“œ ..
์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ vs ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ, ๊ทธ๋ฆฌ๊ณ  ์ฟ ํ‚ค๐Ÿช ์„ธ์…˜? ํ† ํฐ? ์ฟ ํ‚ค? ์ธ์ฆ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. HTTP๋Š” ๋ฌด์ƒํƒœ!์šฐ์„  HTTP ํ”„๋กœํ† ์ฝœ์ด ๋ฌด์ƒํƒœ(stateless)๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.HTTP ํ”„๋กœํ† ์ฝœ๋กœ ์›น์„ ํ†ตํ•ด ํ†ต์‹ ํ•ด์•ผ ํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋‚ด๋Š” ๊ฐ๊ฐ์˜ ์š”์ฒญ์€ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.์š”์ฒญ์ด ๋๋‚˜๋ฉด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฌ๊ณ , ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฐ์ง€ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฐ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋Œ€ํ‘œ์ ์œผ๋กœ ์„ธ์…˜๊ณผ ํ† ํฐ์ด ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹๊ณผ ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์˜ ๋กœ๊ทธ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ธ์…˜(session)์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(์˜ˆ๋ฅผ ๋“ค๋ฉด ์œ ์ €๋ช…, ๋น„๋ฐ€๋ฒˆํ˜ธ)๋ฅผ ๋‹ด์•„์„œ ..
[TypeORM] bigint๊ฐ€ string์œผ๋กœ ๋ณ€ํ™˜๋  ๋•Œ ๋ฌธ์ œ ์ƒํ™ฉ  TypeORM ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ ๋‚˜์™€์žˆ๋“ฏ์ด, ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ bigint๋กœ ์ปฌ๋Ÿผ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” string์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. (PostgreSQL ๊ธฐ์ค€)ํ•˜์ง€๋งŒ ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์„ ๋„ฃ๊ธฐ๋Š” ๊ท€์ฐฎ์œผ๋‹ˆ, ์—”ํ‹ฐํ‹ฐ๋กœ ๋ณ€ํ™˜ํ•œ ์‹œ์ ์— ์ด๋ฏธ number ๋ผ๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.Javascript์—์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” "์•ˆ์ „ํ•œ" ์ •์ˆ˜์˜ ๋ฒ”์œ„๋Š” -9,007,199,254,740,991 ~ 9,007,199,254,740,991 ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ PostgreSQL bigint์˜ ๋ฒ”์œ„๋Š” -9,223,372,036,854,775,808 to +9,223,372,036,854,775,807๋กœ ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— string์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.totalAmount ๊ฐ’..
[TypeORM] ์™œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ private์œผ๋กœ ํ•  ์ˆ˜ ์—†์„๊นŒ? ๋ฌธ์ œ ์ƒํ™ฉ TypeORM ์‚ฌ์šฉ ์ค‘ Entity ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ private์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋”๋‹ˆ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. "Property "id" was not found in "Expense". Make sure your query is correct."์ฒ˜์Œ์—๋Š” ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„ ์•ž์— ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ๋ถ™์—ฌ์„œ ๋งคํ•‘์ด ์•ˆ ๋˜๋Š” ๊ฑด๊ฐ€ ํ–ˆ๋Š”๋ฐ, ํ”„๋กœํผํ‹ฐ๋ฅผ public์œผ๋กœ ํ•ด์•ผ๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ๋งคํ•‘๋˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ private์œผ๋กœ ์„ ์–ธํ•˜๊ณ  getter & setter๋ฅผ ๋‘์–ด ์บก์Šํ™”๋ฅผ ํ•˜์—ฌ, ์—”ํ‹ฐํ‹ฐ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด์€ public ๋ฉ”์„œ๋“œ๋ฅผ ๋‘์–ด ์„œ๋น„์Šค์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์˜ ์ •์„(?)์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค... TypeORM์—์„œ๋„ ์ด์™€ ..