๋ชฉ๋ก์ ์ฒด ๊ธ (124)
DevLog ๐ถ

๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ DB ๊ณต๋ถํ๋ค๊ฐ '๋ค์๋๋ฝ'์ ๋ํด์ ์๊ฒ ๋์๋๋ฐ, ๋ค์๋๋ฝ์ ์ฌ์ฉํ๋ฉด ๋ถ์ฐ๋ฝ์ ๊ตฌํํ ์ ์๋ค๋ ๊ธ์ ๋ณด๊ณ ํ ๋ฒ ํ ์คํธํด๋ณด๊ณ ์ถ์ด์ ๊ธ์ ์์ฑํด๋ณด๊ณ ์ ํ๋ค. ์ ์ฒด ์์ค์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํ๋ค. (๋ญ๊ฐ ํ ์คํธ์ฉ ๋ ํฌ ๋ง๋ค๊ธฐ ์ ๋งคํด์ ๊ทธ๋ฅ ์ ์ฐ๋ ๋ ํฌ์๋ค๊ฐ ํ๋ ค๋ค ๋ณด๋ ์ฝํ๋ฆฐ์ผ๋ก ์์ฑํ๊ฒ ๋์๋ค.) ๐ฑ ๋ถ์ฐ๋ฝ์ด๋? ๋ถ์ฐ๋ฝ์ด๋ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณต์ ์์์ ์ ๊ทผํ ๋, ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์งํค๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ์ ์ด๋ค. ์ฌ๊ธฐ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ฉฐ ๊ฒฝ์ํ๋ ์ํฉ์ 'Race Condition (๊ฒฝ์ ์ํ)'๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ, ์๋ฐ์์๋ 'synchronized'๋ผ๋ ํค์๋๋ฅผ ํตํด์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ ์ ์๋๋ก ๋๊ธฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ํ์ง๋ง, ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด..

๐ฑ ๋ฌธ์ ์ํฉ ๊ฐ๋จํ๊ฒ ํ ์คํธํ๊ณ ์ถ์ ๋ด์ฉ์ด ์๊ฒจ์ DTO์ฉ data class๋ฅผ ์์ฑํ์๋๋ฐ, ์๋์ ๊ฐ์ด Jackson์ ์ญ์ง๋ ฌํ ๊ด๋ จ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค. Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `study.ticketService.domain.application.dto.ConcertTicketCreateRequest` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Cr..

๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ ์ง๋ ๋ฆฌ๋งํ ํฌ์คํ ์์ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ๋ 'CREW' ํ ์ด๋ธ์ ๋ํด์ ์ง์ ์ฝ๋ ๋ ๋ฒจ๋ก ์์ฑํด๋ณด๊ณ ์ ํ๋ค. CREATE TABLE `CREW` ( `id` bigint NOT NULL, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; ์ฌ์ ์ค์ ์ ์ํด์ ์คํ ๋ฆฌ์ง ์์ง์ innoDB๋ก ์ค์ ํ 'CREW' ํ ์ด๋ธ์ ์์ฑํด์ค๋ค. SET AUTOCOMMIT = false; โญ๏ธ ๊ทธ๋ฆฌ๊ณ , autocommit ๋ชจ๋๋ ๊ผญ OFF๋ก ์ค์ ํด๋๊ณ ์งํํ์. ๋๋ ์ด๋ฒ์ 2๊ฐ์ ์ธ์ ์ ์ด์ด์ ์งํํ์๋ค. ๐ฑ READ UNCOMMITTED SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;..

๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ ์ด๋ฒ ํฌ์คํ ์์๋ InnoDB์ ์ธ๋ฑ์ค์ ๋ฝ์ ์๊ด๊ด๊ณ์ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ํด์ ์์๋ณด์. ๐ฑ ์ธ๋ฑ์ค์ ๋ฝ์ง๋ ํฌ์คํ ์์ ๋ ์ฝ๋ ๋ฝ์ ๋ํด ์ ๋ฆฌํ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉํธ๋ฅผ ๋จ๊ฒผ๋ค.innoDB์ ๊ฒฝ์ฐ ๋ ์ฝ๋ ์์ฒด๋ฅผ ์ ๊ทธ๋ ๊ฒ๋ณด๋ค๋, ์ธ๋ฑ์ค์ ๋ ์ฝ๋๋ฅผ ์ ๊ทผ๋ค.์ธ๋ฑ์ค๋ฅผ ์ ๊ทธ๊ธฐ ๋๋ฌธ์ ๋ ์ฝ๋ ๊ฒ์ ์ ๋ฐ๊ฒฌ๋ ๋ชจ๋ ๋ ์ฝ๋์ ๋ฝ์ ๊ฑธ๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด, crew ํ ์ด๋ธ์ age = 23์ธ ์ฌ๋์ด 100๋ช ์ด๋ผ๊ณ ์๊ฐํด๋ณด์. ์ด๋, age์๋ ์ธ๋ฑ์ค๊ฐ, name์๋ ์ธ๋ฑ์ค๊ฐ ๊ฑธ๋ ค์์ง ์์ ์ํ๋ค.SELECT COUNT(*) FROM crew WHERE age = 23; # result: 100 ํ์ง๋ง, age = 23์ด๋ฉด์ name = 'journey'์ธ ๊ฒฐ๊ณผ๋ 1๊ฐ๋ง ๋์จ๋ค๊ณ ๊ฐ์ ํด๋ณด์.SELEC..

๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ ์ด๋ฒ ํฌ์คํ ์์๋ ํธ๋์ญ์ ์ ๋ํ ๊ฐ๋จํ ๊ฐ๋ ๊ณผ, MySQL๊ณผ InnoDB ์คํ ๋ฆฌ์ง์์ง์์ ์ ๊ณตํ๋ ๋ฝ์ ๋ํด์ ์์๋ณด์. ๐ฑ ํธ๋์ญ์ ํธ๋์ญ์ ์ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์ ์์ ํ ์ ์ฉ(commit)๋๊ฑฐ๋, ์๋ฌด๊ฒ๋ ์ ์ฉ๋์ง ์์ (rollback)์ ๋ณด์ฅํด์ผ ํ๋ค. InnoDB์ MyISAM ํ ์ด๋ธ์ ํธ๋์ญ์ ๊ด์ ์์๋ ์ฐจ์ด๋ฅผ ๋ณด์ด๋๋ฐ, ์ด๋ฅผ ํ์ธํด๋ณด์. ์ฐ์ , ์๋์ ๊ฐ์ด myISAM๊ณผ innoDB๋ฅผ ์ฌ์ฉํ 2๊ฐ์ ํ ์ด๋ธ์ ๋ง๋ค์.CREATE TABLE tb_myisam ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=MYISAM; CREATE TABLE tb_innodb ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=i..

๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ ๋๋์ด ๊ธฐ๋๊ธด ํจํท ์ฌํ์ ๋ง์ง๋ง์ด๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ์น ์๋ฒ์ธก์์ ์ด๋ค ์์ผ๋ก ํจํท์ ๋ฐ์์ค๋์ง ์์๋ณผ ๊ฒ์ด๋ค! ํด๋ผ์ด์ธํธ์์ ํจํท์ ์ ์กํ๋ ๋จ๊ณ๋ฅผ ๋ฐ๋๋ก ๋ค์ง์ ๊ฒ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ ์ด๋ ต์ง ์์ ๊ฒ์ด๋ค. ๐ฑ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ํจํท์ด ์๋ฒ๋ก ๋์ฐฉํ ์งํ ๋ค์ ๋์์์, ํด๋ผ์ด์ธํธ์์ ๋ณด๋ธ ํจํท์ด ์๋ฒ๋ก ๋์ฐฉํ ์งํ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ๊ฐ๋จํ๊ฒ๋ง ์์๋ณด์. (์ด ๋ถ๋ถ์ ํฌ๊ฒ ์ค์ํ ๊ฑด ์๋๋ผ์ ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ณ ์ ํ๋ค.) ์ฐ์ , ์๋ฒ ์ธก์ผ๋ก ๋ค์ด์จ ํจํท์ ๊ฒฝ์ฐ ์ฌ์ค '์ ๊ธฐ ์ ํธ'์ ํํ๋ก ๋ค์ด์จ๋ค. ์ ๊ธฐ ์ ํธ๋ LAN ์ด๋ํฐ์์ ์์ ๋๋ฉฐ, ์ฌ๊ธฐ์ 1๊ณผ 0์ ๋์งํธ ๋ฐ์ดํฐ๋ก ๋ฐ๋๊ฒ ๋๋ค. ์ ๊ทธ๋ฆผ์ ์ ๊ธฐ ์ ํธ์์ ๋์งํธ ๋ฐ์ดํฐ๋ก ๋ณํ๋์์ ๋ ํจํท์ ํํ์ด๋ค. ๋ณ๊ฒฝ๋ ๋์ง..

โ๏ธ ๋ ๋ฒจ ๋ก๊ทธ ๋ ๋ฒจ 2 ๋ฐฉํ ์์ํ ์ง ์กฐ๊ธ ๋์ง๋ง... ใ ใ ๋ค๋ฆ๊ฒ ํ๊ณ ๋ฅผ ์์ฑํด๋ณด๊ณ ์ ํ๋ค. ์ง๋ ๋ ๋ฒจ 1 ์ธํฐ๋ทฐ ๋์ ๋นํด์ ๋ ๋ฒจ 2์ ์ธํฐ๋ทฐ๋ ๋ ๋ง์ ์ธ์์ด ์งํํ๋ค. (ํ์ง๋ง ์ํฉํธ๋ฃธ์์ ํ๋ค ๋ณด๋ ์์ฒญ ๋ณต์๋ณต์ํ ๋๋์ด์๋น) ํจ๊ปํ ํฌ๋ฃจ๋ค์ ์ฑํ, ๋ฐ์คํฐ, ๋ฃจ์นด, ๊น์งฑ, ํํฌ, ์ด์ค, ๋๋ ์ด๊ณ , ์ฝ์น๋์ ๋ธ๋ฆฌ์๋ค. ๐ช ์ ๋ฒ์๋ 2์ผ์ฐจ์ ์ธํฐ๋ทฐ์์ด์ ์ค๋นํ ์๊ฐ์ด ๋๋ํ๋๋ฐ, ์ด๋ฒ์๋ 1์ผ์ฐจ์ ๊ฑธ๋ฆฐ ๋ฐ๋์ ์ค๋นํ ์๊ฐ๋ ๋ณ๋ก ์์๋ค ใ ใ ใ ๋ ๋ฒจ ๋ก๊ทธ / ๋ ๋ฒจ ์ธํฐ๋ทฐ ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ www.notion.so ๋ ธ์ ์ ๋ ๋ฒจ ์ธํฐ๋ทฐ๋ฅผ ์ค๋นํ๋ฉฐ ์ด์ฌํ ์ ๋ฆฌํ์๋ค. ๋ ๋ฒจ 2์์ ๋ฐฐ์ด ๊ฒ ์๋ ์ค๊ตฌ๋๋ฐฉํด์ ๊ทธ๋ฐ๊ฐ... ์ต๋ํ ์คํ๋ง์ ๋ํ ๊ฒ๋ง ๊ณต๋ถํ๊ณ ๊ฐ๋ค. ๋ธ๋ก๊ทธ์ ํ ๋ฒ ๋ ์ฌ๋ฆฌ๋ ๊ฒ๋ณด๋ค๋ ๋ ธ์ ์ด..

๋ผ์จ, ์ฅฌ๋, ์ธ์ธ, ์ตธํ๋ ์งํํ๋ ๋ ๋ฒจ 2 ๋ง์ง๋ง ๋ฏธ์ , ์ฅ๋ฐ๊ตฌ๋ ํ์ ๋ฏธ์ ์ด๋ค! ํ๋ก ํธ ํฌ๋ฃจ๋ถ๋ค์ด๋๋ ํจ๊ป ํ ์ ์์์ด์ ๋๋ฌด ์ฌ๋ฐ์๋ ์๊ฐ์ด์๋ค ๐ ์ด๋ฒ ๋ฏธ์ ์ ์ ๋ฒ์ ์งํํ๋ ๋ฏธ์ ์ ๋ฐํ์ผ๋ก ํ๋ค ๋ณด๋๊น ์ฝ๋์ ์ธ ๋ถ๋ถ๋ณด๋ค, ๋ฐฐํฌ ์ชฝ์ ๋ ์ ๊ฒฝ์ผ๋ ๊ฒ ๊ฐ๋ค. ๋ง์ง๋ง ๋ฏธ์ ์ธ ๋งํผ ์ ๋ง ๋ง์ด ๋ฐฐ์ ๋ ์๊ฐ์ด์๋ค ใ ใ โ๏ธ ์์ฑํ ์ฝ๋ GitHub - Cl8D/jwp-shopping-order: ์ฐ์ํํ ํฌ์ฝ์ค ๋ ๋ฒจ 2 ์ฅ๋ฐ๊ตฌ๋ ํ์ ๋ฏธ์ ๋ ํ์งํ ๋ฆฌ ์ฐ์ํํ ํฌ์ฝ์ค ๋ ๋ฒจ 2 ์ฅ๋ฐ๊ตฌ๋ ํ์ ๋ฏธ์ ๋ ํ์งํ ๋ฆฌ. Contribute to Cl8D/jwp-shopping-order development by creating an account on GitHub. github.com โ๏ธ PR [2๋จ๊ณ - ์ฃผ๋ฌธ ๊ธฐ๋ฅ..

๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ ์ด๋ฒ ํฌ์คํ ์์๋ InnoDB์ ์ ๋ฐ์ ์ธ ์ํคํ ์ฒ ์ค์์ ๋์คํฌ ์์ญ์ ๋ํด์ ์์๋ณด์. ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋จํ๊ฒ๋ง ์ง๊ณ ๋์ด๊ฐ๊ณ ์ ํ๋ค. ๐ฑ Tablespaceํ ์ด๋ธ ์คํ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํฐ ๋ ผ๋ฆฌ์ ์ธ ๋จ์์ด๋ฉฐ, Segment -> Extent -> Page -> Row์ ๊ฐ์ ํํ๋ก ๊ตฌ์ฑ๋๋ค. MySQL์์ ํ ์ด๋ธ ์คํ์ด์ค๋ ์ ์ฅํ๋ ๋ฐ์ดํฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ์ 5๊ฐ์ง๋ก ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅํ๋ฐ, ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค. - System tablespace - File-Per-Table tablespace - General Tablespace - Temporary Tablespace - Undo Tablespace ๐ฑ System tablespaceSystem tablespace์ ๊ฒฝ์ฐ My..

๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ ์ด๋ฒ ํฌ์คํ ์์๋ InnoDB์ ์ ๋ฐ์ ์ธ ์ํคํ ์ฒ ์ค์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํด์ ์์๋ณด์. ์๋นํ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ๋๋ต์ ์ธ ๋ด์ฉ๋ง ์ดํดํ๊ณ ๋์ด๊ฐ๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ๋ค. ๐ฑ InnoDB ๋ฒํผ ํ (Buffer Pool)์ ๊ทธ๋ฆผ์ MySQL 8.0 ๊ธฐ์ค InnoDB ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ ๊ทธ๋ฆผ์ด๋ค. ์ด์ค์์ ๋ฒํผ ํ์ ๊ฒฝ์ฐ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ถ๋ถ์ด๋ค. ๋์คํฌ์ ๋ฐ์ดํฐ ํ์ผ, ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์๋ ํด๋ ์ ์๊ณ , ์ฐ๊ธฐ ์์ ์ ์ง์ฐ์์ผ์ ์ผ๊ด ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ค.๐ก ๊ทธ๋ ๋ค๋ฉด ํฌ๊ธฐ๋ ์ด๋ ์ ๋๋ก ์ค์ ํด์ผ ํ ๊น? ๋ณดํต OS ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด 8๊ธฐ๊ฐ ์ดํ๋ผ๋ฉด 50% ์ ๋๋ง ๋ฒํผ ํ๋ก ์ค์ ํ๊ณ , ๋๋จธ์ง๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ๊ณต๊ฐ์ผ๋ก ๋จ๊ฒจ๋๋ ๊ฒ์ด ์ข๋ค. ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ ..