๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JAVA์—์„œ String์„ Null Safeํ•˜๊ฒŒ ๋น„๊ตํ•˜๊ธฐ Nullableํ•œ ๋‘ ๊ฐœ์˜ String์ด equalํ•œ์ง€๋ฅผ null safeํ•˜๊ฒŒ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž. String#equals ๋‘ String์ด null์ด ์•„๋‹ˆ๋ฉด String ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ equals๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. @Test void test0() { String s1 = "hello"; String s2 = "hello"; assertThat(s1.equals(s2)).isTrue(); s2 = "world"; assertThat(s1.equals(s2)).isFalse(); } @Test void test1() { String s1 = null; String s2 = null; assertThatThrownBy(() -> s1.equals(s2)).isInstanceOf(NullP.. 2021. 8. 14.
์Šคํ”„๋ง ๋ถ€ํŠธ ๋กœ๊ทธ์ธ (1) - ์ฟ ํ‚ค, ์„ธ์…˜์„ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ ์ธํ”„๋Ÿฐ - ์Šคํ”„๋ง MVC 2ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ™œ์šฉ ๊ธฐ์ˆ ์„ ๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณด์ž. ํ”„๋กœ์ ํŠธ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ 2.4.9์— spring-boot-starter-web, spring-boot-starter-thymeleaf, spring-boot-starter-validation, lombok ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์˜์กด์„ฑ๊ณผ ๊ฐ™์ด ๋ทฐ ํ…œํ”Œ๋ฆฟ์€ thymeleaf๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Bootstrap ์ด๊ฑด ๊ผญ ํ•„์š”ํ•œ๊ฑด ์•„๋‹ˆ๋ฏ€๋กœ ์Šคํ‚ตํ•ด๋„ ๋œ๋‹ค. https://getbootstrap.com/ ์—์„œ bootstrap.min.css ํŒŒ์ผ์„ ๋ฐ›์•„ resources/static/css์— ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด์ œ ํšŒ์› ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ.. 2021. 8. 13.
๋„ทํ”Œ๋ฆญ์Šค ์œ ๋ ˆ์นด(Eureka)๋ฅผ ์‚ฌ์šฉํ•œ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ๊ตฌํ˜„ ๋„ทํ”Œ๋ฆญ์Šค ์œ ๋ ˆ์นด(Eureka)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž. ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ 2๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•˜๋‚˜๋Š” ๋””์Šค์ปค๋ฒ„๋ฆฌ ์„œ๋ฒ„, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋””์Šค์ปค๋ฒ„๋ฆฌ ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ ํ•˜๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค. java 11 spring boot 2.4.9 gradle ๋””์Šค์ปค๋ฒ„๋ฆฌ ์„œ๋ฒ„ - ์œ ๋ ˆ์นด ์„œ๋ฒ„ ์šฐ์„  ๋””์Šค์ปค๋ฒ„๋ฆฌ ์„œ๋ฒ„ ์—ญํ• ์„ ํ•  ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธํŒ…ํ•œ๋‹ค. Dependency spring-cloud-starter-eureka-server ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server' ์œ ๋ ˆ์นด ์„œ๋ฒ„ ํ™œ์„ฑํ™” ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฉ”์ธ ํด๋ž˜์Šค์— @EnableEurekaServer .. 2021. 8. 2.
NAT ๊ฐœ๋… ์ •๋ฆฌ NAT NAT = Network Address Translation = ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ณ€ํ™˜ IP ํŒจํ‚ท์˜ TCP/UDP ํฌํŠธ ์ˆซ์ž์™€ ์†Œ์Šค ๋ฐ ๋ชฉ์ ์ง€์˜ IP ์ฃผ์†Œ ๋“ฑ์„ ์žฌ๊ธฐ๋กํ•˜๋ฉด์„œ ๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ธฐ์ˆ  ์™ธ๋ถ€์— ๊ณต๊ฐœ๋œ ๊ณต์ธ(Public) IP์™€ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์„ค(Private) IP๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ, ๋„คํŠธ์›Œํฌ ์ „์†ก ์ˆ˜ํ–‰ ์‹œ ๋‘ IP์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ์›ํ™œํžˆ ์šด์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ  ํŒจํ‚ท์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— IP๋‚˜ TCP/UDP์˜ ์ฒดํฌ์„ฌ(checksum)๋„ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์–ด ์žฌ๊ธฐ๋กํ•ด์•ผ ํ•œ๋‹ค. NAT๋ฅผ ์ด์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋Œ€๊ฐœ ์‚ฌ์„ค ๋„คํŠธ์›Œํฌ์— ์†ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ˜ธ์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ๊ณต์ธ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋„ท์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. NAT๊ฐ€ ํ˜ธ์ŠคํŠธ ๊ฐ„์˜ ํ†ต์‹ ์— ์žˆ์–ด์„œ ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ.. 2021. 2. 3.
Oracle WITH ๊ตฌ๋ฌธ์„ MySQL๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ Oracle WITH ๊ตฌ๋ฌธ์„ MySQL๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ MySQL 8.0 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” WITH ๊ตฌ๋ฌธ์ด ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— WITH ๊ตฌ๋ฌธ์„ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์„ ํƒ์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. Temporary Table(์ž„์‹œ ํ…Œ์ด๋ธ”) Derived Table Inline View ๋ณธ ๊ธ€์—์„œ๋Š” inline view๋ฅผ ์ด์šฉํ•˜์—ฌ Oracle WITH ๊ตฌ๋ฌธ์„ ๋ณ€๊ฒฝํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. WITH ๊ตฌ๋ฌธ์„ Inline View๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์˜ˆ์ œ ํŽธ์˜์ƒ ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ๋ฅผ ์˜ˆ์ œ๋กœ ๋“ค์—ˆ๋‹ค. โ„น๏ธOracle WITH: WITH SAMPLE_WITH AS (SELECT ID FROM SAMPLE_TBL) SELECT A.ID FROM ANOTHER_TBL A, SAMPLE_WITH B WHERE A.ID = B.ID โ„น๏ธMySQL Inlin.. 2020. 12. 8.
MySQL Workbench ์‚ฌ์šฉ ์ค‘ Error: DBMS connection is not available MySQL Workbench ์‚ฌ์šฉ ์ค‘ Error: DBMS connection is not available MySQL Workbench๋กœ DB์— ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์ž ๊น ์ž‘์—…์„ ์•ˆํ•˜๊ณ ์žˆ์œผ๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์งˆ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋ฉด Error: DBMS connection is not available ์—๋Ÿฌ๊ฐ€ ๋–จ์–ด์ง„๋‹ค. ์ด๋Ÿด ๋•Œ ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ์ƒˆ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š”, MySQL Workbench > Query > Reconnect to Server๋กœ ์„œ๋ฒ„์™€ ์žฌ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ž‘์—…์ค‘์ด์—ˆ๋˜ sql์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋‹ˆ ๋” ํŽธํ•˜๊ฒŒ ์ž‘์—…์„ ์ด์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. 2020. 12. 7.
Oracle์˜ TO_CHAR ํ•จ์ˆ˜์™€ ๋Œ€์‘๋˜๋Š” MySQL ํ•จ์ˆ˜ Oracle TO_CHAR -> MySQL DATE_FORMAT Oracle์˜ TO_CHAR๋Š” MySQL์˜ DATE_FORMAT๊ณผ ๋Œ€์‘๋œ๋‹ค. โ„น๏ธ Oracle TO_CHAR ์‚ฌ์šฉ ์˜ˆ select TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') from dual 20201206153514 โ„น๏ธ MySQL DATE_FORMAT ์‚ฌ์šฉ ์˜ˆ select DATE_FORMAT(now(), '%Y%m%d%H%i%s') 20201206154329 Oracle TO_CHAR Syntax: TO_CHAR(์ˆซ์ž/๋‚ ์งœ, ํฌ๋งท) ์ˆซ์ž๋‚˜ ๋‚ ์งœ๋ฅผ ํŠน์ • ํฌ๋งท์˜ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ˆซ์ž/๋‚ ์งœ๋ฅผ, ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํฌ๋งท์„ ์ง€์ •ํ•œ๋‹ค. TO_CHAR ๋‚ ์งœ ๋ณ€ํ™˜ ํฌ๋งท ํฌ๋งท ์„ค๋ช… ์‚ฌ์šฉ ์˜ˆ AM, A.M.. 2020. 12. 6.
[์Šคํ”„๋ง ๋ถ€ํŠธ/MVC] ์ •์  ๋ฆฌ์†Œ์Šค(Static Resources) ๊ธฐ๋ณธ ์„ค์ •๊ณผ ์ปค์Šคํ…€ ๋ฐฉ๋ฒ• [์Šคํ”„๋ง ๋ถ€ํŠธ/MVC] ์ •์  ๋ฆฌ์†Œ์Šค(Static Resources) ๊ธฐ๋ณธ ์„ค์ •๊ณผ ์ปค์Šคํ…€ ๋ฐฉ๋ฒ• ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ •์  ๋ฆฌ์†Œ์Šค(static resources)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋งคํ•‘ ์„ค์ •๊ณผ ์ปค์Šคํ…€์„ ์ง€์›ํ•œ๋‹ค. ์‹ค์ œ๋กœ ํ™•์ธํ•ด๋ณด์ž. ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ์˜ src/main/resources/static/์— hello.html์„ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. Hello Static Resource ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ๊ธฐ๋™ํ•˜์ง€ ์•Š๊ณ  ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ ๋งŒ์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ํ›„ http://localhost:8080/hello.html๋กœ ์š”์ฒญํ•ด๋ณด์ž. ์ •์  ๋ฆฌ์†Œ์Šค ๋งคํ•‘ URL ํŒจํ„ด ๊ธฐ๋ณธ์ ์œผ๋กœ /**(๋ฃจํŠธ) ๋ถ€ํ„ฐ ๋งคํ•‘๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์˜ˆ์ฒ˜๋Ÿผ http://127.0.0.1:8080/hello.html์„ ์š”์ฒญํ•˜๋ฉด ์ •์ .. 2020. 8. 19.
์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ฆ‰์‹œ ์›น ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ  - AutoConfiguration ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ฆ‰์‹œ ์›น ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ  - AutoConfiguration spring-boot-starter-web ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•˜๋ฉด ์ฆ‰์‹œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. @RestController public class UserController { @GetMapping("/hello") public String hello() { return "hello"; } } ์•„๋ฌด๋Ÿฐ ์„ค์ • ์—†์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด GET /hello ์š”์ฒญ์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(@SpringBootApplication)์„ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•œ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๊ธฐ๋ณธ ์„ค์ • ์ด๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์„ค์ •๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ .. 2020. 8. 19.
CLI ํ™˜๊ฒฝ์—์„œ Git ์‚ฌ์šฉํ•˜๊ธฐ(๋ช…๋ น์–ด ์ •๋ฆฌ) #2 CLI ํ™˜๊ฒฝ์—์„œ Git ์‚ฌ์šฉํ•˜๊ธฐ(๋ช…๋ น์–ด ์ •๋ฆฌ) #2 ๐Ÿ“ ๋ชฉ๋ก stash merge rebase pull request show reset cherry-pick stash - stash ๋œป: (์•ˆ์ „ํ•œ ๊ณณ์—) ๋„ฃ์–ด ๋‘๋‹ค. - ์ž‘์—…ํ•˜๋˜ ๋‚ด์šฉ(commit ํ•˜๊ธฐ ์ „์˜ modified, staged ์ƒํƒœ์˜ ํŒŒ์ผ๋“ค)์„ ์ž„์‹œ ์ €์žฅ - ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ปค๋ฐ‹์€ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ฌ์šฉ - stack์ฒ˜๋Ÿผ ์ž‘๋™(stash, pop) stash ์‚ฌ์šฉ ๋ฐฉ๋ฒ• git stash ํ˜„์žฌ ์ž‘์—…ํ•˜๋˜ ํŒŒ์ผ์„ ์ž„์‹œ ์ €์žฅ ์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ ์ƒํƒœ์—์„œ status๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด commit์„ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ working tree clean ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. stash๋กœ ์ž„์‹œ ์ €์žฅ๋œ ๋ชฉ๋ก ํ™•์ธ.. 2020. 8. 6.
CLI ํ™˜๊ฒฝ์—์„œ Git ์‚ฌ์šฉํ•˜๊ธฐ(๋ช…๋ น์–ด ์ •๋ฆฌ) #1 CLI ํ™˜๊ฒฝ์—์„œ Git ์‚ฌ์šฉํ•˜๊ธฐ(๋ช…๋ น์–ด ์ •๋ฆฌ) #1 ๐Ÿ“ ๋ชฉ๋ก status log add commit branch checkout push pull fetch status - ํ˜„์žฌ git ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์คŒ - ๋‹ค์Œ 4๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ถœ๋ ฅ๋จ 1) Untracked files 2) Changes to be committed 3) Changes not staged for commit 4) Nothing to commit, working tree clean 1) Untracked files - Untracked ์ƒํƒœ์˜ ํŒŒ์ผ๋“ค - Git์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ๋“ค - add ๋ช…๋ น์–ด๊ฐ€ ์ ์šฉ๋˜๊ธฐ ์ „์˜ ํŒŒ์ผ๋“ค - ex) ์‹ ๊ทœ ํŒŒ์ผ 2) Changes to be committed - Staged ์ƒํƒœ์˜ ํŒŒ์ผ๋“ค - Untra.. 2020. 8. 5.
Spring Boot + MyBatis ์„ค์ • ๋ฐฉ๋ฒ•(HikariCP, H2) Spring Boot + MyBatis ์„ค์ • ๋ฐฉ๋ฒ•(HikariCP, H2) ๐Ÿ“ ์ˆœ์„œ 1. ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ 2. ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ์„ค์ •(schema.sql, data.sql) 3. DBCP/DataSource ์„ค์ •(HikariCP) 4. MyBatis ์„ค์ •(@MapperScan, XML ์œ„์น˜, CamelCase, Alias, ๋กœ๊ทธ๋ ˆ๋ฒจ) 5. Model, Mapper ์ƒ์„ฑ 6. ํ…Œ์ŠคํŠธ 1. ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ MyBatis๋ฅผ ์ด์šฉํ•œ DB ์—ฐ๋™์„ ์œ„ํ•œ ์ƒˆ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋Š” IDE๋ฅผ ์ด์šฉํ•˜๋˜์ง€, spring initializr(start.spring.io)๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ”๋Š” 8๋กœ, ์˜์กด์„ฑ์€ Spring Web, Spring Data JDBC.. 2020. 8. 1.