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

Spring

[Spring] @ExceptionHandler๋ฅผ ํ†ตํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (+ DTO Validation)

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒผ๋‹ค! ํ•ด๋‹น ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๊ฐ’๋„ ๋ฐ˜ํ™˜ํ–ˆ์–ด์•ผ ํ•ด์„œ try-catch๋ฅผ ์‚ฌ์šฉํ• ๊นŒ ํ–ˆ์ง€๋งŒ ๋ฐ˜ํ™˜ํ˜• ์‹์ด ๋‹ฌ๋ผ์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ• ๊นŒ ๊ณ ๋ฏผ์„ ํ•˜๋˜ ์ค‘์— @ExceptionHandler๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•ด ์ฃผ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค! ๊ทผ๋ฐ @ExceptionHandler๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ปจํŠธ๋กค๋Ÿฌ์— ๋งค๋ฒˆ ์ง€์ •์„ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ ์ค‘๋ณต์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ผ์„œ @ControllerAdvice๋ฅผ ํ†ตํ•ด ์ „์—ญ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ํ•ธ๋“ค๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. ๐Ÿ”Ž ์‚ฌ์šฉํ•œ ์ฝ”๋“œ @RestControllerAdvice public class ExceptionAdviceController { private final ResponseService responseService; public Exce..

Spring

[Spring] MessageSource๋ฅผ ์ด์šฉํ•œ ๊ตญ์ œํ™” exception ์ ์šฉํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ๊ตญ์ œํ™” ์ ์šฉ์„ ํ•ด๋ณด์•˜๋‹ค. ๐ŸŒฑ i18n ๊ฐœ๋… i18n์ด๋ž€ internationalization(i์™€ n์‚ฌ์ด 18๊ธ€์ž)์„ ์ค„์ธ ๊ฒƒ์œผ๋กœ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ฉด '๊ตญ์ œํ™”'๋ผ๋Š” ๋œป์ด๋‹ค. ๊ตญ์ œํ™”๋Š” ๋ฌธํ™”, ์ง€์—ญ, ์–ธ์–ด๊ฐ€ ๋‹ค์–‘ํ•œ ๋Œ€์ƒ ๊ณ ๊ฐ์„ ์œ„ํ•ด ์‰ฝ๊ฒŒ ํ˜„์ง€ํ™”๋  ์ˆ˜ ์žˆ๋Š” ์ œํ’ˆ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋ฌธ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด๋‹ค! โš™๏ธ build.gradle ์— ์˜์กด์„ฑ ์ถ”๊ฐ€ ๋‚˜๋Š” ymlํŒŒ์ผ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค! properties๋กœ ํ•  ๊ฑฐ๋ฉด ์ถ”๊ฐ€ ์•ˆ ํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค! implementation 'net.rakugakibox.util:yaml-resource-bundle:1.1' โš™๏ธ application.yml์— ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ ์„ค์ • ๋ฐ ์„ค์ • ํŒŒ์ผ ..

๊ฒฝํ—˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค/์•ฑ ํ˜„๋Œ€ํ™” ํ…Œํฌ ์„ธ๋ฏธ๋‚˜ ์ฐธ์—ฌ

๋ฐ๋ณด์…˜์—์„œ ์ง„ํ–‰ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ธ๋ฏธ๋‚˜์— ์ฐธ์—ฌํ–ˆ๋‹ค! ์‚ฌ์‹ค ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ œ๋Œ€๋กœ ์จ๋ณธ ์ ์€ ์—†์ง€๋งŒ ์ด๋Ÿฐ ๊ฐœ๋ฐœ ์ปจํผ๋Ÿฐ์Šค๊ฐ™์€ ๊ณณ ์ž์ฃผ ๋‹ค๋‹ˆ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์‹ ์ฒญํ•˜๊ณ  ํŒ๊ต๋กœ ๋“ค์œผ๋Ÿฌ ๊ฐ”๋‹ค ใ…Žใ…Ž ์„ธ๋ฏธ๋‚˜ ๋“ค์–ด๊ฐ”๋Š”๋ฐ ์ •๋ง ๋งŽ์€ ํ˜„์ง์ž ๋ถ„๋“ค์ด ๊ณ„์…”์„œ ๋†€๋ž๋‹ค ๐Ÿ˜ฎ ๋‹ค๋“ค ๋ฐฐ์›€์— ๋Œ€ํ•œ ์—ด์ •์ด ๋Œ€๋‹จํ•˜์‹œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ๋‚˜๋„ ๋Š์ž„์—†์ด ์„ฑ์žฅํ•˜๊ณ  ๋ฐฐ์šฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด์•ผ๊ฒ ๋‹ค๊ณ  ๋Š๋‚€ ํ•˜๋ฃจ์˜€๋‹ค.. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋‚ด์šฉ์„ ๋‹ค ์•Œ์•„๋“ฃ์ง„ ๋ชปํ–ˆ์ง€๋งŒ ๋‚˜์ค‘์— ๊ฐ•์˜์—์„œ ๋“ค์€ ๋ฐฉ๋ฒ•๋“ค์„ ๊ผญ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ด์•ผ๊ฒ ๋‹ค !!

DB

[DB] DB ์ธ๋ฑ์Šค๋ž€?

๐Ÿซง DB ์ธ๋ฑ์Šค๋ž€? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค. → ์ฑ…์—์„œ ๋ชฉ์ฐจ๋ฅผ ๋ณด๋ฉด ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋งŒ์œผ๋กœ ์›ํ•˜๋Š” ๋‚ด์šฉ์˜ ๋ถ€๋ถ„์„ ํ•œ ๋ฒˆ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์˜๋ฏธ์ด๋‹ค ๐Ÿ“ƒ Full Table Scan full table scan์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•  ๋•Œ where๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ…Œ์ด๋ธ”์˜ ์ „์ฒด๋ฅผ ์กฐ๊ฑด๊ณผ ๋น„๊ตํ•ด์•ผ๋˜๋Š” ์ž‘์—…์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ต‰์žฅํžˆ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆผ! โš™๏ธ B-Tree B-Tree๋Š” Balanced Tree์˜ ์ค„์ž„๋ง์ด๋‹ค. MySQL์˜ DB ์—”์ง„์ธ InnoDB๋Š” B+Tree๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์€ B-Tree์˜ ํ™•์žฅ๋œ ๊ฐœ๋…์ด๋‹ค. B-Tree B-Tree๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค. ์ฐจ๋ก€๋Œ€๋กœ ๋ฃจํŠธ๋…ธ๋“œ, ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ, ๋ฆฌ..

Spring

[Spring] Spring Cache(์Šคํ”„๋ง ์บ์‹œ)๋ž€?

๐Ÿ”Ž Spring Cache๋ž€? ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•˜์—ฌ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋†“๊ณ  ๋˜‘๊ฐ™์€ ์š”์ฒญ์ด ์™”์„ ๋•Œ ๋กœ์ง์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ฃผ์–ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋กœ์ปฌ ์บ์‹œ์ด๊ธฐ ๋•Œ๋ฌธ์— application๊ฐ„ ๊ณต์œ ๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„๋ฅผ ๋Œ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€๋ฏ€๋กœ ๊ณ„์† ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด redis ๊ฐ™์€ ์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ณณ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์ด ๋™์ผํ•  ๋•Œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ํ˜ธ์ถœ๋  ๋•Œ ํ•œ ๋ฒˆ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋งŽ์€ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๊ณณ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ •ํ™•์„ฑ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์Šคํ”„๋ง ์„ค์ • implementation 'org.springframework.boot..

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๋””์ž์ธํŒจํ„ด] ๋นŒ๋”ํŒจํ„ด์ด๋ž€?

๋นŒ๋”ํŒจํ„ด ๋นŒ๋”ํŒจํ„ด์€ ๋ณต์žกํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •๊ณผ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์„ ๋ถ„๋ฆฌํ•ด์„œ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ƒ์„ฑ ํŒจํ„ด์ด๋‹ค. ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ 1. ์ƒ์„ฑ์ž ์ƒ์„ฑ 2. setter ์ฃผ์ž… 3. ๋นŒ๋” ํŒจํ„ด์ด๋‹ค. ์ ์ธต์  ์ƒ์„ฑ์ž ํŒจํ„ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ƒ์„ฑ์ž๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉ ํ•˜๋Š” ๋ฐฉ๋ฒ• class Member { private String name; private int age; public Member(String name, int age){ this.name = name; this.age = age; } public Member(String name){ this.name = name; } } ์ด๋Ÿฐ ํŒจํ„ด์€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ํ•„๋“œ๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ƒ์„ฑ์ž์— ๋“ค์–ด๊ฐˆ ์ธ์ž์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜ ๋ช‡ ๋ฒˆ..

ํ•„์‚ฌ

[ํ•„์‚ฌ] 2024.02.12

๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ฑ…์ž„์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๊ณ  ๋Œ€๋‹ตํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์ฑ…์ž„์งˆ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋Œ€๋‹ตํ•  ์ˆ˜ ์—†์„ ๋•Œ ๋‚˜๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์ฑ…์ž„์งˆ ์ˆ˜ ์—†๋Š” ์ผ์„ ์•Œ์•„์„œ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋‚˜๋Š” ์–‘์‹ฌ์ด๋ผ ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณณ์—์„œ ๋‚˜๋ฅผ ๋•๋Š” ๊ฒƒ์€ ์ฑ…์ž„๊ณผ ์–‘์‹ฌ์ด๋‹ค. ์ฑ…์ž„๊ณผ ์–‘์‹ฌ์€ ์งˆ๋ฌธ์œผ๋กœ๋ถ€ํ„ฐ ์ƒ๊ฒจ๋‚œ๋‹ค. - ์‚ฐ์ฑ…๊ณผ ์—ฐ์•  (์œ ์ง„๋ชฉ) - ์•„๋ฆ„๋‹ค์šด ๊ฒƒ์—์„œ ์ถ”ํ•œ ์˜๋ฏธ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์‚ฌ๋žŒ์€ ์ฆ๊ฑฐ์›€์„ ์ฃผ์ง€ ๋ชปํ•˜๋Š” ํƒ€๋ฝํ•œ ์‚ฌ๋žŒ์ด๋‹ค. ์ด๊ฑด ์ž˜๋ชป์ด๋‹ค. ์•„๋ฆ„๋‹ค์šด ๊ฒƒ์—์„œ ์•„๋ฆ„๋‹ค์šด ์˜๋ฏธ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์‚ฌ๋žŒ์€ ๊ต์–‘ ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋‹ค. ์ด๋Ÿฐ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ํฌ๋ง์ด ์žˆ๋‹ค. ๊ทธ๋“ค์€ ์„ ํƒ๋ฐ›์€ ์‚ฌ๋žŒ๋“ค๋กœ, ๊ทธ๋“ค์—๊ฒŒ ์•„๋ฆ„๋‹ค์šด ๊ฒƒ์€ ์˜ค๋กฏ์ด ์•„๋ฆ„๋‹ค์šด๋งŒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋„๋•์ ์ธ ์ฑ…์ด๋‚˜ ๋ถ€๋„๋•ํ•œ ์ฑ…์€ ์—†๋‹ค. ์ž˜ ์“ด ์ฑ…, ํ˜น์€ ์ž˜ ์“ฐ์ง€ ๋ชปํ•œ ์ฑ…, ์ด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋‹ค ๊ทธ..

ํ•„์‚ฌ

[ํ•„์‚ฌ] 2024.02.08

์š”์ฆ˜ ์ง์ ‘ ํŽœ์œผ๋กœ ๊ธ€์„ ์“ฐ๋Š” ์ผ๋„ ์ ์–ด์ง€๊ณ , ๋ฌธํ•ด๋ ฅ์ด๋ž‘ ์ง‘์ค‘๋ ฅ๋„ ๊ธฐ๋ฅผ ๊ฒธ ํ•„์‚ฌ๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค! ์˜ค๋Š˜์ด 3์ผ์ฐจ์ธ๋ฐ ๋‚ด๊ฐ€ ํ•„์‚ฌํ•œ ๊ฒƒ๋“ค์„ ๋ธ”๋กœ๊ทธ์— ๊ธฐ๋กํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค (• ห™ ห˜ ห™ •)โ† ๊ทธ ์–ด๋‘  ์†์—์„œ ๋‚˜๋Š” ์ž๋ž๊ณ , ๋ฐ”๋กœ ๊ทธ ์–ด๋‘ ์œผ๋กœ ์ธํ•˜์—ฌ ๋‚˜๋Š” ์กฐ๊ธˆ์”ฉ ๊ฐ•ํ•ด์กŒ๋‹ค. ๊ทธ ์‹ ๋ นํ•œ ํ‘ธ๋ฅธ๋น›์— ์ต์ˆ™ํ•ด์ง€๋ฉด์„œ ์–ด๋ฆฐ ๋‚˜๋Š” ํˆฌ์ •ํ•˜๊ฑฐ๋‚˜ ์‹ฌ์‹ฌํ•จ์„ ํ˜ธ์†Œํ•˜๋Š” ๋Œ€์‹  ์นจ๋ฌตํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์› ๋‹ค. ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ๊ฐˆ๋งํ•˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถœ ๋•Œ ๋น„๋กœ์†Œ ํ‰ํ™”๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜๋Š” ์–ด๋ ดํ’‹์ด ๊นจ๋‹ซ๊ณ  ์žˆ์—ˆ๋‹ค. - ๊ฒ€์€ ์‚ฌ์Šด (ํ•œ๊ฐ•) - ๋ƒ„์ƒˆ๋Š” ๊ธฐ์–ต ์†์˜ ์†Œ๋ฆฌ์™€ ํ–ฅ์„ ์ „ํ•˜๋ฉฐ ๊ณผ๊ฑฐ์˜ ์–ด๋–ค ์‹œ๊ฐ„์„ ๋– ์˜ค๋ฅด๊ฒŒ ํ•˜๋Š” ํŠน์„ฑ์„ ์ง€๋…”๋‹ค. ํ‹ฐํƒ€๋Š” ๋ƒ„์ƒˆ๋ฅผ ํ ๋ป‘ ๋“ค์ด๋งˆ์‹œ๋ฉฐ ๊ทธ ๊ฐ๋ณ„ํ•œ ๋ƒ„์ƒˆ๋‚˜ ํ–ฅ๊ณผ ํ•จ๊ป˜ ์ž์‹ ์˜ ์ถ”์–ต ์†์œผ๋กœ ์—ฌํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ–ˆ๋‹ค. - ๋‹ฌ์ฝค ์Œ‰์‹ธ๋ฆ„ํ•œ ์ดˆ์ฝœ๋ฆฟ (๋ผ์šฐ๋ผ ์—์Šคํ‚ค..

Algorithm

ํ€ต์ •๋ ฌ(Quick-Sort) ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ€ต์ •๋ ฌ์ด๋ž€? ํ€ต์ •๋ ฌ(Quick-Sort)์€ ํ‰๊ท  ์†๋„ (NlogN)์„ ์ž๋ž‘ํ•˜๋Š” ๋งค์šฐ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ถ„ํ• ์ •๋ณต(Divide & Conquer) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜๋กœ ๋‹ค๋ฅธ ์›์†Œ์™€ ๋น„๊ต๋งŒ์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋น„๊ต ์ •๋ ฌ์— ์†ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ •๋ ฌ๊ณผ์ • ํ€ต์ •๋ ฌ์€ ์ž„์ด์˜ ํ”ผ๋ด‡(pivot)์„ ๊ธฐ์ค€์œผ๋กœ ์ขŒ์ธก์—๋Š” ํ”ผ๋ด‡๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๋‘๊ณ  ์šฐ์ธก์—๋Š” ํ”ผ๋ด‡๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ํ”ผ๋ด‡์„ ์„ ํƒํ•œ๋‹ค. left๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€๋ฉด์„œ ํ”ผ๋ด‡๋ณด๋‹ค ๋” ํฐ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค. right๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๊ฐ€๋ฉด์„œ ํ”ผ๋ด‡๋ณด๋‹ค ๋” ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค. ์ฐพ์€ ์ง€์ ์—์„œ left์™€ right๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. ์œ„ ๊ณผ์ •์„ left๋ž‘ right๊ฐ€ ๋ฐ”๋€” ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. left๋ž‘ right๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํ”ผ๋ด‡๊ณผ right๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. ์œ„ ๊ณผ์ •์„ ๊ฑฐ..

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

[nginx] let’s encrypt ๊ถŒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ

nginx๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ž๊พธ cert.pem์— ๊ถŒํ•œ์ด ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค.. โœ๏ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• certbot certonly --manual -d ${domain} cd /var/log/ sudo chmod -R 775 letsencrypt/ sudo chgrp -R ec2-user letsencrypt/ cd /var/lib sudo chmod -R 775 letsencrypt/ sudo chgrp -R ec2-user letsencrypt/ cd /etc sudo chmod -R 775 letsencrypt/ sudo chgrp -R ec2-user letsencrypt/ ์ด๋ ‡๊ฒŒ letsencrypt์— ec2-user ๊ถŒํ•œ์„ ์คฌ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค!

DAHLIA CHOI
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)