๐Ÿฌ IntelliJ MySql ์‚ฌ์šฉ๋ฒ•, JDBC, ์ดˆ์ดˆ๊ฐ„๋‹จ ์—ฐ๋™ ์˜ˆ์ œ ๋งŒ๋“ค์–ด๋ณด๊ธฐ(ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…)

๋ฆผ๋ฏผ์ง€ยท2025๋…„ 3์›” 21์ผ

Today I Learn

๋ชฉ๋ก ๋ณด๊ธฐ
30/62

(๋งฅ๋ถ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค)

1๏ธโƒฃ IntelliJ & MySQL

DB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๊ณ  ์ธํ…”๋ฆฌ์ œ์ด์˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” DB๋ฅผ ๋ˆ„๋ฅด๊ณ  Data Source ์—์„œ ํ˜„์žฌ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ์— ์„ค์น˜๋˜์–ด์žˆ๋Š” DB ์‹œ์Šคํ…œ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค
์ €๋Š” MySQL์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค

๊ทธ๋ฆฌ๊ณ  ๋ณธ์ธ์ด Sql ์„ค์น˜ํ• ๋•Œ ์„ค์ •ํ–ˆ๋˜ User ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค
(mySQL์€ ์œ ์ €์ด๋ฆ„์ด ๊ธฐ๋ณธ์œผ๋กœ root๋กœ ์„ค์ •๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”)
๋‹ค ์ž‘์„ฑํ•œ ํ›„ ์ƒ์„ฑํ•˜๊ธฐ ์ „์—, ๋จผ์ € Test Connection์„ ๋ˆŒ๋Ÿฌ ์ž˜ ์—ฐ๊ฒฐ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ์‹œ๋‹ค.
โ†’ Succeeded๊ฐ€ ๋‚˜์™”๋‹ค๋ฉด ์„ฑ๊ณต!

์˜ค๋ฅธ์ชฝ์— DataBase ์ฐฝ์ด ์ƒ๊ฒผ์„ํ…๋ฐ, ์—ฌ๊ธฐ์„œ ์œ—์ชฝ์˜ + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒˆ๋กœ์šด ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

์•„๋ž˜์˜ sql๋ฌธ์„ ๋„ฃ์–ด์ฃผ๊ณ  Create๋ฌธ์œผ๋กœ ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์ค์‹œ๋‹ค (DDL)

use ํ…Œ์ด๋ธ”๋ช…

์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ์— ํ…Œ์ด๋ธ”์ด ์ž˜ ์ƒ์„ฑ๋œ ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์šฉ

๋งŒ์•ฝ์— ๋‚ด๊ฐ€ ์ด ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ ์‹ถ๋‹ค?
๊ทธ๋Ÿฌ๋ฉด tables์—์„œ ์˜ค๋ฅธ์ชฝ ํด๋ฆญ!
Diagrams์—์„œ Show Diagramsํ•˜๋ฉด,

์•„๋ž˜์ฒ˜๋Ÿผ ์ž๋™์œผ๋กœ ERD๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
(ํšจ์ž ์ธํ…”๋ฆฌ์ œ์ด๐Ÿ’•)

์ดํ›„์—๋Š” SQL ๋ฌธ๋ฒ•๋Œ€๋กœ, ๋ฐ์ดํ„ฐ CRUD๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค
์˜ˆ์‹œ๋กœ,

-- students ํ…Œ์ด๋ธ”์— email ์ปฌ๋Ÿผ ์ถ”๊ฐ€
ALTER TABLE student ADD COLUMN email VARCHAR(100) NOT NULL;
-- major ํ…Œ์ด๋ธ”์˜ name ์ปฌ๋Ÿผ์˜ ๊ธธ์ด ๋ณ€๊ฒฝ
ALTER TABLE major MODIFY COLUMN name VARCHAR(100);
-- major ํ…Œ์ด๋ธ”์˜ ํŠœํ„ฐ UNIQUE ์ œ์•ฝ์กฐ๊ฑด ์„ค์ •
ALTER TABLE major ADD CONSTRAINT UNIQUE(tutor);
-- student ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
INSERT INTO student (name, age, grade, email) VALUES('ํ•™์ƒ1', 20, 'AAA', 'a@a.com');


select  * from student;

-- ํ•™์ƒ1 ๋‚˜์ด๋ฅผ 21๋กœ ์—…๋ฐ์ดํŠธ
UPDATE student SET age = 21 WHERE name = 'ํ•™์ƒ1';

-- ์‹๋ณ„์ž 4๋ฒˆ์˜ student ์‚ญ์ œ
DELETE FROM student WHERE id = 4;

์ด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ CRUD๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

2๏ธโƒฃ JDBC

:Java ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค
โ†’ DBMS์™€ ํ†ต์‹ ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ CRUDํ•  ์ˆ˜ ์žˆ๋”ฐ!

๐Ÿ‘ ํŠน์ง• ๋ฐ ์žฅ์ 
1. ํ‘œ์ค€ API๋ฅผ ์ง€์›
: DB ๋Œ€ํ•ด ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์ƒํ˜ธ ์ž‘์šฉ
โ†’ DB ์ข…๋ฅ˜๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ฟผ๋ฆฌ๋ฌธ์ด ์‹คํ–‰๋œ๋‹ค. MySQL โ†’ ORACLE
2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ : DB์™€ ์ธํ…”๋ฆฌ์ œ์ด ์—ฐ๊ฒฐ ๊ฐœ์ด๋“
3. Prepared Statement
4. ๊ฒฐ๊ณผ ์ง‘ํ•ฉ ์ฒ˜๋ฆฌ(Result Set)
โ†’ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ Java ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
5. ํŠธ๋žœ์žญ์…˜ ์ž‘์—… ๊ฐ€๋Šฅ

โœ… Prepared Statement

: SQL๋ฌธ์„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ?๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ์„œ preComile(๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ํ•ด๋†“๊ธฐ)๋กœ ์ฟผ๋ฆฌ๋ฌธ์„ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ ํ›„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

โ†’ ์ฟผ๋ฆฌ๊ฐ€ ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋˜๋ฉด ์—ฌ๋Ÿฌ๋ฒˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ๋ณด์•ˆ ๊ฐ•ํ™”ํ•ด์ค€๋‹ค

MySQL๊ณผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ
application.properties ํŒŒ์ผ์— JDBC์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค

spring.datasource.url=jdbc:mysql://localhost:3306/์ถ”๊ฐ€ํ• DB์ด๋ฆ„
spring.datasource.username=๊ณ„์ •
spring.datasource.password=๋น„๋ฐ€๋ฒˆํ˜ธ
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

๐Ÿ–ผ๏ธ JDBC Template

: JDBC์˜ ๋ฐ˜๋ณต์  ์ž‘์—…๋“ค์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํด๋ž˜์Šค (์—ฐ๊ฒฐ, SQL์‹คํ–‰, ์ž์› ํ•ด์ œ ๋“ฑ)

  • ๋‚ด๋ถ€์ ์œผ๋กœ PreparedStatement๋ฅผ ์‚ฌ์šฉ, SQL ์ธ์ ์…˜์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ ๊ฐœ์„ 
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ„ํŽธํ•จ

์œ„์—์„œ ์ด๋ฏธ prepared statement๋Š” ์„ค์ •ํ•ด์ฃผ์—ˆ์œผ๋ฏ€๋กœ
bulid.gradle์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ž

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ Dependency์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค

// MySQL
    implementation 'mysql:mysql-connector-java:8.0.28'
// JDBC Template
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'

JdbcTemplate์˜ ์ž‘๋™ ์›๋ฆฌ

(1) JdbcTemplate๊ฐ€ DataSource๋กœ๋ถ€ํ„ฐ ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ์˜จ๋‹ค
(2) SQL์„ ์‹คํ–‰ํ•  ๋•Œ PreparedStatement๋ฅผ ์‚ฌ์šฉ (?๋กœ ๊ฐ’์„ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— SQL ์ธ์ ์…˜ ๋ฐฉ์ง€ ๊ฐ€๋Šฅ)
(3) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ (SQLException โ†’ DataAccessException)
(4) SQL ์‹คํ–‰ ํ›„ ์ž์›์„ ์ž๋™์œผ๋กœ ํ•ด์ œ (์ปค๋„ฅ์…˜ ๋ฐ˜ํ™˜ ํฌํ•จ)


์—ฌ๊ธฐ์„œ ์ž ๊น, Spring Bean์— ๋Œ€ํ•ด ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž

๐Ÿซ› Spring Bean

: ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ• ๋•Œ new ํ‚ค์›Œ๋“œ๋กœ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ spring์€ ์ด๋ฅผ ๋Œ€์‹ ํ•ด์ค€๋‹ค ใ…‹.ใ…‹
Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•„์š”ํ• ๋•Œ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ค€๋‹ค => Spring Bean

๋งŒ๋“œ๋Š”๋ฒ•

1. @Component ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ

โ†’ ์ฃผ๋กœ service repository controller ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค

@Component
public class MyComponent {
    public void sayHello() {
        System.out.println("Hello, Spring Bean!");
    }
}

2. @Service, @Repository, @Controller ์‚ฌ์šฉํ•˜๊ธฐ (ํŠน์ • ์—ญํ• ์˜ Bean์„ ๋‚˜ํƒ€๋‚ผ๋•Œ)

@Service
public class MyService {
    public String getMessage() {
        return "Hello from MyService!";
    }
}

๐Ÿ‘พ ์ดˆ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ๋งŒ๋“ค๋ฉฐ ์ตํžˆ๊ธฐ

์‚ฌ์‹ค.. ์–ด์ œ ๋ฉ”๋ชจ์žฅ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค,..
(ํ•„๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ ๋‡Œ์— ์ œ๋Œ€๋กœ ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•œ ๋А๋‚Œใ…œใ…œ)

์ดˆ์ดˆ์ดˆ๊ฐ„๋‹จํ•œ ๋ฉ”๋ชจ์žฅ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๋จธ๋ฆฌ์†์— ์ง‘์–ด๋„ฃ์–ด๋ณด์ž

๋จผ์ € ๋ฉ”๋ชจ๋ฅผ ํฌ์ŠคํŠธํ•˜๊ณ  ์ „์ฒด ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๋Š” ๋ฉ”๋ชจ์žฅ์„ ๋งŒ๋“ค์–ด๋ณด์ž!

์ „์ฒ˜๋ฆฌ ์ž‘์—…

1. ์˜์กด์„ฑ ์ถ”๊ฐ€
application.properties ํŒŒ์ผ์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์„œ sql๊ณผ ์—ฐ๊ฒฐ

spring.datasource.url=jdbc:mysql://localhost:3306/DB๋ช…
spring.datasource.username=์‚ฌ์šฉ์ž๋ช…
spring.datasource.password=๋น„๋ฒˆ
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2. gradle ์ถ”๊ฐ€
build.gradle ํŒŒ์ผ์˜ dependenctis์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์œ„์— ์ž‘๊ฒŒ ๋œจ๋Š” ์ฝ”๋ผ๋ฆฌ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ธฐ

// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
// JDBC Template
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'

3. db ๋งŒ๋“ค๊ธฐ&์ถ”๊ฐ€ํ•˜๊ธฐ(DDL)

๋งˆ์ง€๋ง‰์ค„์— select๋ฌธ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์ฒด ์กฐํšŒํ•ด์„œ ์ž˜ ๋“ค์–ด๊ฐ”๋Š”์ง€๊นŒ์ง€ ํ™•์ธํ•˜๊ธฐ

1. DTO ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ

: ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ํ•„๋“œ๋กœ ์ •์˜
โ†’ JSON ๋ฐ์ดํ„ฐ๋ฅผ DTO ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!

@Getter
@AllArgsConstructor
public class MemoRequestDto {
    private String title;
    private String content;
}

2. MemoService ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ

์„œ๋น„์Šค ํด๋ž˜์Šค์—๋Š” ๋ญ๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค????
@Service ์–ด๋…ธํ…Œ์ด์…˜ ํ•„์ˆ˜๋กœ ๋‹ฌ์•„๋‘๊ณ  ์‹œ์ž‘.

@Service //์ด๊ฑฐ ์„œ๋น„์Šค ํด๋ž˜์Šค๋ผ๊ณ  ์Šคํ”„๋งํ•œํ…Œ ์•Œ๋ ค์ฃผ๋Š”๊ฑฐ์ž„
@AllArgsConstructor //์ƒ์„ฑ์ž ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ
private final JdbcTemplate jdbcTemplate;

JDBC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณต์žกํ•œ ์ž‘์—…๋“ค์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” JdbcTemplate ๋จผ์ € ์ •์˜ํ•ด์ฃผ์ž

๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฅผ ์ €์žฅ(Post)ํ•ด์•ผํ•˜๋‹ˆ๊นŒ saveMemo๋ฉ”์„œ๋“œ ๋งŒ๋“ค์ž

//๋ฉ”๋ชจ ์ €์žฅ
public void saveMemo(String title, String content){
	String sql = "Insert Into memoJ (title, content Values (?, ?)";
    jdbcTemplate.update(sql, title, content);
    }

INSERT INTO memoJ (title, content) VALUES (?, ?)
?์€ ์‹ค์ œ ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ ํ‘œ์‹œ์ž!
=> ์ปดํŒŒ์ผ๋˜์–ด ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ์ƒํƒœ๋กœ ๋ณด๊ด€๋จ
jdbcTemplate.update(sql, title, content);
title๊ณผ content๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’
์ด ๊ฐ’๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ? ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐ„๋‹ค

๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•  getMemos()

//๋ฉ”๋ชจ ์กฐํšŒ
public List<Map<String, Object>> getMemos(){
	String sql = "SELECT * FROM memos";
    return jdbcTemplate.queryForList(sql);
    }

3. ์ปจํŠธ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ

@RestController
@RequestMapping("/memos") //prefix ์„ค์ •
@AllArgsConstructor  // Lombok ์–ด๋…ธํ…Œ์ด์…˜, ๋ชจ๋“  ํ•„๋“œ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ์ž๋™ ์ƒ์„ฑ
public class MemoController {
    private final MemoService memoService;

๋จผ์ € ์•„๊นŒ ๋งŒ๋“  MemoService๋ฅผ ๊ฐ€์ ธ์˜ค์ž
-> ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ƒ์„ฑ์ž ์•ˆ๋งŒ๋“ค์–ด๋„ ๋จ! ๊ฐœ๊ฟ€ ใ…‹

๊ทธ๋ฆฌ๊ณ  DTO๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž

@PostMapping
public String saveMemo(@RequestBody MemoRequestDto dto){
	memoService.saveMemo(dto.getTitle(), dto.getContent());
    return "Saved";
    }

@GetMapping
public List<Map<String, Object>> getMemos(){
	return memoService.getMemos();
    }

saveMemo ๋ฉ”์„œ๋“œ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ json ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๊นŒ dto๋ฅผ ๋งŒ๋“ค์—ˆ์ž๋‚˜์š”?
๊ทธ๊ฑธ ํ™œ์šฉํ•˜๋Š”๊ฑฐ์ฅ
@RequestBody MemoRequestDto dto
@RequestBody๋ฅผ ์‚ฌ์šฉํ•ด์„œ MemoRequestDto๋ฅผ ๋งคํ•‘๋ฐ›์„ ์ˆ˜ ์žˆ๋‹น

์ž!! ํฌ์ŠคํŠธ๋งจ์œผ๋กœ ์‹คํ–‰ํ•ด๋ณด์ž

4. ํฌ์ŠคํŠธ๋งจ ์‹คํ–‰

POST ๋กœ ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ

PUT ์œผ๋กœ ๋ฉ”๋ชจ ์ „์ฒด ์กฐํšŒํ•˜๊ธฐ

์„ฑ๊ณต!!!!!

๋“œ๋””์–ด ์กฐ๊ธˆ ์ดํ•ดํ•œ ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿฅน

5. ์ฃผ์˜ํ•  ์ 

์—๋Ÿฌ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์ข…์ข… ๋ฐœ์ƒํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ์˜ 80%๊ฐ€ ๊ฑฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ด๋ฆ„์„ ์ž˜๋ชป ์ž…๋ ฅํ•ด์„œ์˜€๋‹คใ…œใ…œ

Serviceํด๋ž˜์Šค์—์„œ DB๋ฅผ ๋งตํ•‘ํ•˜๋Š”๋ฐ

์—ฌ๊ธฐ์„œ DB์ด๋ฆ„ ์ž…๋ ฅ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ๋‹คใ… ใ…  ํ•ญ์ƒ ์ฃผ์˜ํ• ๊ฒƒ!!!

0๊ฐœ์˜ ๋Œ“๊ธ€