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

์ธํ„ฐ๋„ท์˜ ํ†ต์‹  ๊ณ„์ธต์„ ๋‚˜ํƒ€๋‚ด๋Š” TCP/IP 5๊ณ„์ธต ๋ชจ๋ธ์—์„œ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต๊นŒ์ง€๋งŒ ํ•ด๋„ ์ธํ„ฐ๋„ท์ƒ์˜ ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํŒจํ‚ท์„ ๋ฐ›์„ ๋Œ€์ƒ์ด ์—†๊ฑฐ๋‚˜ ๋ถˆ๋Šฅ ์ƒํƒœ์ธ ๊ฒฝ์šฐ, ํ˜น์€ ์ค‘๊ฐ„์— ํŒจํ‚ท์ด ์†Œ์‹ค๋˜๊ฑฐ๋‚˜ ์ˆœ์„œ๋Œ€๋กœ ์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ†ต์‹ ์ด ์›ํ™œํ•˜๊ฒŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌด์‚ฌํžˆ ๋ชฉ์ ์ง€ ์ปดํ“จํ„ฐ์— ๋„์ฐฉํ•˜๋”๋ผ๋„ ๊ฐ™์€ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„์—์„œ ํ†ต์‹ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‘˜ ์ด์ƒ์ด๋ผ๋ฉด ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์•ผํ• ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. TCP/IP์˜ ์ „์†ก ๊ณ„์ธต์—์„œ TCP/UDP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค. TCP ํ”„๋กœํ† ์ฝœ์€ ๋ฐ์ดํ„ฐ์˜ ๋„์ฐฉ ๋ณด์ฆ ๋ฐ ์ˆœ์„œ ๋ณด์žฅ์œผ๋กœ ์‹ ๋ขฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ๋˜ํ•œ TCP/UDP ํŒจํ‚ท์— ์ถœ๋ฐœ์ง€, ๋ชฉ์ ์ง€ PORT ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ตœ์ข… ๋„์ฐฉ์ง€ ํ”„๋กœ..
๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ (virtual memory) ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ƒ์˜ ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•˜์—ฌ ๋งˆ์น˜ ์ปค๋‹ค๋ž€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋งŽ์•„๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ! ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ถˆ์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜์–ด, ์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋‹ค. ๋ถˆ์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” ํŽ˜์ด์ง•(paging)๊ณผ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ (segmentation)๊ธฐ๋ฒ•์ด ์žˆ๋‹ค. ํŽ˜์ด์ง• (paging) ํŽ˜์ด์ง•์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ page ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์„œ page์™€ ๋™์ผํ•œ ํฌ๊ธฐ์˜ frame ๋‹จ์œ„๋กœ ๋‚˜๋ˆˆ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถˆ์—ฐ์†์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ด๋‹ค. ํŽ˜์ด์ง•์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋„์›€..
Pageable์„ ์‚ฌ์šฉํ•˜๋Š” JPA ๋ฉ”์„œ๋“œ์—์„œ N+1๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ์— ์‹œ๋„ํ•ด ๋ณธ ๊ฒƒ๋“ค๊ณผ ํ•ด๊ฒฐ ๊ณผ์ •์— ๋Œ€ํ•ด ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค. ๋ฌธ์ œ ์ƒํ™ฉ ๊ฒŒ์‹œํŒ ์ „์ฒด ๋ชฉ๋ก๋ณด๊ธฐ์‹œ ํ˜ธ์ถœ๋˜๋Š” Pageable์„ ์ด์šฉํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค. public interface BaordRepository extends JpaRepository { Page findAllByHideIsFalse(Pageable pageable); } findAllByHideIsFalse() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด N+1๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๊ฒŒ์‹œํŒ์„ ์ž‘์„ฑํ•œ user์˜ ์ˆ˜ N๋งŒํผ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. Hibernate: select board0_.id as id1_0_, board0_.content as content2_0_, board0_.create..
Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€? ์ปจํŠธ๋กค๋Ÿฌ์—์„œ text/htmlํ˜•์‹์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ XML ๋˜๋Š” JSON ํ˜•ํƒœ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. Jackson์€ ๊ทธ ์ค‘ JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด Jackson์€ Java์—์„œ JSON์„ ํŒŒ์‹ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์„ธํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. JSON์„ ํŒŒ์‹ฑํ•ด์ฃผ๋Š” ํด๋ž˜์Šค์—๋Š” Jackson ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Google์ด ๋งŒ๋“  GSON ๋˜๋Š” SimpleJSON ๋„ ์žˆ๋‹ค. Spring์ด Jackson์„ ๋” ์„ ํ˜ธํ•˜๋Š” ์ด์œ  Jackson, GSON, SimpleJSON์˜ ์ฐจ์ด๋Š” ์—†๋‹ค. Jackson์˜ ํŠน๋ณ„ํ•œ ์ ์€ Spring 3.0๋ถ€ํ„ฐ Jackson๊ณผ ๊ด€๋ จ๋œ API๋ฅผ ์ œ๊ณตํ•˜์—ฌ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ..
'spring-boot-starter-web' ์˜์กด์„ฑ์„ ํฌํ•จ์‹œํ‚ค๋ฉด, Spring Boot๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐ ์ž๋™ ๊ตฌ์„ฑ์˜ ์ผ๋ถ€๋กœ Spring Boot์˜ ๋ฒ„์ „์— ๋”ฐ๋ผ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŠน์ • ๋ฒ„์ „์ด ๊ฒฐ์ •๋œ๋‹ค. 2.7.15 ๋ฒ„์ „์˜ Spring Boot ํ”„๋กœ์ ํŠธ์—์„œ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ํ™•์ธํ•ด ๋ณด์•˜๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์˜์กด์„ฑ๊ณผ ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ./gradlew dependencies 'com.fasterxml.jackson.core' ๋˜๋Š” 'jackson-databind'์™€ ๊ฐ™์€ Jackson ๊ด€๋ จ ์˜์กด์„ฑ์„ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Spring ..
push()์— ์‚ฌ์šฉํ•  Queue๋ฅผ q1, pop()์— ์‚ฌ์šฉํ•  Queue๋ฅผ q2๋ผ๊ณ  ํ•˜์˜€๋‹ค. [ push() ] q1.add()๋ฅผ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. [ pop() ] q1์—์„œ popํ•  1๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋†”๋‘๊ณ , ๋‚˜๋จธ์ง€ n-1๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ q2๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ q2๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. q1์— ๋‚จ์•„์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ q1.remove()ํ•˜์—ฌ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋‹ค์Œ์— ์ง„ํ–‰๋  pop()์„ ์œ„ํ•ด q2๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ, q1๊ณผ q2์˜ ์ด๋ฆ„์„ swapํ•œ๋‹ค. ๊ตฌํ˜„ ์ฝ”๋“œ import java.util.LinkedList; import java.util.Queue; public class QueueStack { Queue q1; Queue q2;..
enqueue() ๊ตฌํ˜„์— ์‚ฌ์šฉํ•  Stack์„ inStack, dequeue() ๊ตฌํ˜„์— ์‚ฌ์šฉํ•  Stack์„ ๋‘ ๋ฒˆ์งธ outStack์œผ๋กœ ์„ ์–ธํ•˜์˜€๋‹ค. [ enqueue() ] inStack์— push()ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค. [ dequeue() ] outStack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด inStack์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ์ด ๊ฒฐ๊ณผ ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ outStack์˜ top์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค. outStack.pop()์œผ๋กœ ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. outStack์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด pop()์„ ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ , outStack์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์ถ”์ถœํ•˜๋ฉด inStack์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ๊ตฌํ˜„ ์ฝ”๋“œ import java.util.Stack; public class Stac..
ํ”„๋กœ์ ํŠธ์—์„œ ๋Ÿฐํƒ€์ž„ ์‹œ ๊ฐ์ฒด๋ฅผ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , OCP๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ฝ”๋“œ๋กœ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋””์ž์ธ ํŒจํ„ด์„ ๊ณ ๋ คํ•œ ๊ณผ์ •์„ ๊ธฐ๋กํ•˜์˜€๋‹ค. 1. ์ „๋žต ํŒจํ„ด vs ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด์€ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. ์ƒ์†์€ ์ƒ์œ„ ํด๋ž˜์Šค์™€ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ฐ€์ ‘๋˜์–ด ์žˆ์–ด ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’๋‹ค. ๋˜ํ•œ ์ƒ์† ๊ด€๊ณ„๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์ค‘ ๊ฐ์ฒด๋ฅผ ๋™์ ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค. ๋Ÿฐํƒ€์ž„ ์‹œ ๊ฐ์ฒด๋ฅผ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด์€ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. 2. ์ „๋žต ํŒจํ„ด vs ์ƒํƒœ ํŒจํ„ด 2-1. ์ „๋žต ํŒจํ„ด ์ „๋žต ํŒจํ„ด์€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์บก์Šํ™”ํ•˜๊ณ , ์ด ๋ฐฉ๋ฒ•๋“ค์„ ์ƒํ˜ธ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ ํŒจํ„ด์ด๋‹ค. Context : ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ฒƒ, ์ „๋žต..
alreadykite
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก