섹션 3. 생애 최초 Database 조작하기

김민지·2025년 3월 21일

서버 기초 강의

목록 보기
3/12

Database와 MySQL

  • 컴퓨터의 3가지 핵심 부품: CPU (연산), RAM (메모리), DISK (장기기억)
  • RDB(Relational DataBase) 중 하나인 MySQL을 사용해서 데이터를 구조화시켜 저장해야 장기기억에 저장되어서 서버를 재시작하더라도 데이터가 유지됨.

MySQL에서 테이블 만들기 (DDL: Data Definition Language)

  1. 데이터베이스 생성: create database <데이터베이스명>;
  2. 데이터베이스 전체 조회:show databases;
  3. 데이터베이스 삭제: drop database <데이터베이스명;
  4. 데이터베이스 사용: use <데이터베이스명;
  5. 테이블 생성
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)

  1. 삽입 (Create) : INSERT INTO <테이블명> (<테이블 속성>) VALUES (<속성값들>)
    예: INSERT INTO fruit (name, price, stocked_date) VALUES ("apple", 1000, "2025-03-21")
  2. 조회 (Read) : SELECT <속성명 or *> FROM <테이블명> WHERE <조건>
  3. 수정 (Update) : UPDATE <테이블> SET <속성=속성값> WHERE <조건>
    예: UPDATE fruit SET price=1500 WHERE name="apple"
    ⭐️ 주의: 조건을 붙이지 않으면 해당 속성의 모든 값이 같은 값으로 업데이트 됨.
  4. 삭제 (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)
);
  • command + shift + O : 검색

기존 코드 수정하기

  1. JdbcTemplate 사용해서 데이터베이스 연결하기
private final JdbcTemplate jdbcTemplate;

    public UserController(JdbcTemplate jdbcTemplate) { // 생성자 추가
        this.jdbcTemplate = jdbcTemplate;
    }
  1. POST api 수정하기 위해서 아래와 같이 sql문을 작성한 후 update 메소드를 활용해서 테이블에 데이터를 삽입해주기
String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, request.getName(), request.getAge());
  1. GET api 수정하기 위해서
    @GetMapping("/user") // GET /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 MethodHTTP pathHTTP body
PUT/user { "id": Long, "name": String }

유저 삭제 API

HTTP MethodHTTP pathquery
DELETE/user 문자열 name
    @PutMapping("/user") // PUT /user
    public void updateUser(@RequestBody UserUpdateRequest request) {
        String sql = "UPDATE user SET name = ? WHERE id = ?";
        jdbcTemplate.update(sql, request.getName(), request.getId());
    }

    @DeleteMapping("/user") // DELETE /user
    public void deleteUser(@RequestParam String name) {
        String sql = "DELETE FROM user WHERE name = ?";
        jdbcTemplate.update(sql, name);
    }
  • 생각해볼 부분
    지금 코드에서는 존재하지 않는 유저 정보에 대해 수정이나 삭제 요청을 하더라도 200OK를 반환함. 즉, 요청을 받았을 때 데이터베이스에 해당 유저가 존재하는지를 검증하지 않음.

유저 업데이트 API, 삭제 API 예외 처리 하기

  • 요청을 받았을 때 데이터베이스에 해당 유저가 존재하지 않을 경우, 예외 처리를 통해 오류 코드를 반환하도록 수정하기.
    @PutMapping("/user") // PUT /user
    public void updateUser(@RequestBody UserUpdateRequest request) {
        // 수정하고자 하는 User가 데이터베이스에 존재하는지 검증
        String sqlCheck = "SELECT * FROM user WHERE id = ?";
        // user가 존재하지 않는다면 빈 리스트가 반환될 것임.
        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); 로 데이터 추가한 후, 포스트맨을 사용해서 존재하지 않는 유저를 수정해보자.
  1. 존재하는 사용자 수정
  2. 존재하지 않는 사용자 수정

0개의 댓글