Database와 MySQL
- 컴퓨터의 3가지 핵심 부품: CPU (연산), RAM (메모리), DISK (장기기억)
- RDB(Relational DataBase) 중 하나인 MySQL을 사용해서 데이터를 구조화시켜 저장해야 장기기억에 저장되어서 서버를 재시작하더라도 데이터가 유지됨.
MySQL에서 테이블 만들기 (DDL: Data Definition Language)
- 데이터베이스 생성:
create database <데이터베이스명>;
- 데이터베이스 전체 조회:
show databases;
- 데이터베이스 삭제:
drop database <데이터베이스명;
- 데이터베이스 사용:
use <데이터베이스명;
- 테이블 생성
create table <테이블명> (
<필드명> <필드타입> <부가조건>,
...
primary key (<필드명>)
);
create table fruit (
id bigint auto_increment,
name varchar(20),
price int,
stocked_date date,
primary key (id)
);
option + command + L 로 데이터 포멧 정리 가능
MySQL의 타입 종류
- 정수:
tinyint(1 바이트), int(4 바이트), bigint(8 바이트)
- 실수:
double (8 바이트 정수) , decimal(A, B) (소수점을 B개 가지고 있는 A자릿수의 실수. 예: decimal(4, 2) => 12.23)
- 문자열:
char(A) (정확히 A개의 글자가 들어갈 수 있는 문자열, 고정길이) varchar(A) (최대 A개의 글자가 들어갈 수 있는 문자열, 가변길이)
- 날짜 시간:
date (날짜, yyyy-MM-dd), time (시간, HH:mm:ss), datetime (날짜 + 시간, yyyy-MM-dd HH:mm:ss)
테이블의 데이터를 조작하기 (DML: Data Manipulation Language)
- 삽입 (Create) :
INSERT INTO <테이블명> (<테이블 속성>) VALUES (<속성값들>)
예: INSERT INTO fruit (name, price, stocked_date) VALUES ("apple", 1000, "2025-03-21")
- 조회 (Read) :
SELECT <속성명 or *> FROM <테이블명> WHERE <조건>
- 수정 (Update) :
UPDATE <테이블> SET <속성=속성값> WHERE <조건>
예: UPDATE fruit SET price=1500 WHERE name="apple"
⭐️ 주의: 조건을 붙이지 않으면 해당 속성의 모든 값이 같은 값으로 업데이트 됨.
- 삭제 (Delete) :
DELETE FROM <테이블명> WHERE <조건>
⭐️ 주의: 조건을 붙이지 않으면 해당 테이블의 모든 값이 삭제됨.
Spring에서 Database 사용하기
application.yml이라는 파일을 통해 설정할 수 있음! (src > main > java > resources 위치에 생성하기)
spring:
datasource:
url: "jdbc:mysql://localhost/library"
username: "root"
password: "rlaalswl"
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc : java database connector
driver-class-name : 데이터베이스에 접근할 때 사용할 프로그램명
User 테이블 생성하기
create table user
(
id bigint auto_increment,
name varchar(25),
age int,
primary key (id)
);
기존 코드 수정하기
JdbcTemplate 사용해서 데이터베이스 연결하기
private final JdbcTemplate jdbcTemplate;
public UserController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
POST api 수정하기 위해서 아래와 같이 sql문을 작성한 후 update 메소드를 활용해서 테이블에 데이터를 삽입해주기
String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, request.getName(), request.getAge());
GET api 수정하기 위해서
@GetMapping("/user")
public List<UserResponse> getUsers() {
String sql = "SELECT * FROM user";
return jdbcTemplate.query(sql, new RowMapper<UserResponse>() {
@Override
public UserResponse mapRow(ResultSet rs, int rowNum) throws SQLException {
long id = rs.getLong("id");
String name = rs.getString("name");
int age = rs.getInt("age");
return new UserResponse(id, name, age);
}
});
}
control + O로 override할 메소드를 선택하는 화면으로 이동한 후, mapRow라는 메소드를 선택해서 override 해주기

- 이 때, mapRow 는 유저 정보의 타입을 우리가 선언한 UserResponse 타입으로 변환해주는 역할을 수행함
Java lamda 함수에 대한 추가 설명 강의
테스트 해보기
- 데이터베이스에 값이 잘 들어간 것 확인!

유저 업데이트 API, 삭제 API 개발과 테스트
유저 업데이트 API
| HTTP Method | HTTP path | HTTP body |
|---|
PUT | /user | { "id": Long, "name": String } |
유저 삭제 API
| HTTP Method | HTTP path | query |
|---|
DELETE | /user | 문자열 name |
@PutMapping("/user")
public void updateUser(@RequestBody UserUpdateRequest request) {
String sql = "UPDATE user SET name = ? WHERE id = ?";
jdbcTemplate.update(sql, request.getName(), request.getId());
}
@DeleteMapping("/user")
public void deleteUser(@RequestParam String name) {
String sql = "DELETE FROM user WHERE name = ?";
jdbcTemplate.update(sql, name);
}
- 생각해볼 부분
지금 코드에서는 존재하지 않는 유저 정보에 대해 수정이나 삭제 요청을 하더라도 200OK를 반환함. 즉, 요청을 받았을 때 데이터베이스에 해당 유저가 존재하는지를 검증하지 않음.
유저 업데이트 API, 삭제 API 예외 처리 하기
- 요청을 받았을 때 데이터베이스에 해당 유저가 존재하지 않을 경우, 예외 처리를 통해 오류 코드를 반환하도록 수정하기.
@PutMapping("/user")
public void updateUser(@RequestBody UserUpdateRequest request) {
String sqlCheck = "SELECT * FROM user WHERE id = ?";
boolean isUserNotExist = jdbcTemplate.query(sqlCheck, (rs, rowNum) -> 0, request.getId()).isEmpty();
if (isUserNotExist) {
throw new IllegalArgumentException("User 가 존재하지 않음");
}
String sql = "UPDATE user SET name = ? WHERE id = ?";
jdbcTemplate.update(sql, request.getName(), request.getId());
}
insert into user(name, age) values ('민지', 23); 로 데이터 추가한 후, 포스트맨을 사용해서 존재하지 않는 유저를 수정해보자.
- 존재하는 사용자 수정

- 존재하지 않는 사용자 수정
