728x90
반응형
Section2 목표
- 디스크와 메모리의 차이를 이해하고, DB의 필요성을 이해한다.
- MySQL DB를 SQL과 함께 조작할 수 있다.
- 스프링 서버를 이용해 DB에 접근하고 데이터를 저장, 조회, 업데이트, 삭제할 수 있다.
- API의 예외 상황을 알아보고 예외처리를 할 수 있다.
1. (10강) DB와 MySQL
- 서버를 종료했다가 다시 시작했을 때, 유저 정보가 모두 사라지는 문제가 발생
- 컴퓨터의 핵심 부품(간단설명) : CPU(연산) / RAM(메모리, 임시기억장치) / DISK(장기기억장치)
- 우리가 서버를 실행시켜 API를 동작시키기까지 일어나는 일
- 개발하고 있는 서버(코드)는 Disk에 존재한다.
- 서버를 실행시키면 Disk에 있는 코드 정보가 RAM으로 복사된다.
- AP가 실행되면 '연산'이 수행되며 CPU와 RAM을 오간다.
- 따라서, POST API를 통해 생긴 유저 정보는 RAM에 저장되어 있다.
- 서버가 종료되면 RAM에 있는 모든 정보는 사라지게 된다.
- 그러므로 다시 서버를 시작하면 유저 정보가 전부 사라진 것이다.
- 서버에서는 어떻게 Disk에 '저장'할 수 있을까? ' - DataBase 활용!
- DB - 데이터를 '구조화' 시켜 저장
- RDB - 데이터를 '표'처럼 구조화 시켜 저장
- MySQL에 접근하는 방법
- 1. IntelliJ Ultimate
- 오른쪽 상단에 DataBase > +(New) > DataSource > MySQL > User: root > (Test Connection) > OK
- 2. CLI
- iTerm > mysql -u root -p
- 1. IntelliJ Ultimate
2. (11강) MySQL에서 테이블 만들기
- 테이블 생성하기: create table [테이블명] ( 필드명 타입 부가조건 ... )
- auto_increment - 데이터를 명시적으로 넣지 않더라도 1부터 1씩 증가하여 자동기록된다.
- primary key - 중복이 없으며(unique) null을 허용하지 않는다.
- not null - name의 경우 null을 허용하지 않으므로 not null 부가조건 사용한다.
- MySQL 타입 살펴보기
- tinyint: 1바이트 정수
- int: 4바이트 정수
- bigint: 8바이트 정수
- double: 8바이트 실수
- decimal(A, B): 소수점 B개를 가지고 있는 전체 A자릿수 실수 ex) Deciaml(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
3. (12강) 테이블의 데이터를 조작하기
- 데이터 넣기: INSERT INTO [테이블명] (필드1, 필드2...) VALUES (값1, 값2....)
- 데이터 조회: select (필드명) from [테이블명] where [조건] and(or) [조건]...
- 데이터 업데이트: UPDATE [테이블명] SET 필드1이름 = 값, 필드2이름 = 값 ... WHERE [조건];
- 특정 조건을 가진 필드의 값을 변경! ex) update fruit set price = 1500 where name = '사과';
- WHERE[조건] 을 붙이지 않는다면 모든 데이터가 업데이트 된다.
- 데이터 삭제: DELETE FROM [테이블명] WHRER [조건]
- DELTET, TRUCATR, DROP의 차이에 대해서 탐구하기
3. (13강) Spring에서 DB 사용하기
- 스프링부트가 MySQL에 접근하기 위해 설정이 필요하다. ▷ application.yml 만들고 설정하기
- 스프링이 연결할 데이터베이스의 주소를 의미: jdbc를 이용해서 localhost에 존재하고 mysql를 사용하며 접근하려는 DB는 library임을 의미한다.
url: "jdbc:mysql//localhost/library"
- username, password: MySQL에 접근하기 위한 계정명, 비밀번호
- driver-class-name: DB에 접근할 때 사용할 프로그램
- 유저 정보 생성하는 API 변경 (메모리에 저장하는 List > DB에 저장)
private final JdbcTemplate jdbcTemplate;
public UserController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@PostMapping("/user")
public void saveUser(@RequestBody UserCreateRequest request) {
String sql = "insert into user (name, age) values (?, ?)";
jdbcTemplate.update(sql, request.getName(), request.getAge());
}
- JdbcTemplate 사용방법
- JdbcTemplate jdbcTemplate 필드를 생성하고 생성자를 만들 때 jdbcTemplate을 파라미터로 넣으면 된다.
- String 타입의 sql을 작성하는데 변수는 ? 처리한다. ?를 사용하면 값을 유동적으로 넣을 수 있다.
- 유저 정보 조회하는 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);
}
});
}
- jdbcTemplate.query(sql, RowMapper구현 익명 클래스)
- sql의 실행결과(ResultSet rs)가 RowMapper(단축키: control + O)를 통해서 UserResponse로 변경해준다.
- RowMapper는 쿼리의 결과를 받아, 원하는 객체로 반환해준다.
- ResultSet에 getType("필드이름")을 사용해 실제 값을 가져올 수 있다.
- 람다로 변경(단축키: option + enter)
728x90
반응형
'스터디 > 인프런' 카테고리의 다른 글
[인프런 워밍업 스터디 클럽 0기- BE] 4일차 강의 내용 정리(Section2) (0) | 2024.02.22 |
---|---|
[인프런 워밍업 스터디 클럽 0기- BE] 2일차 과제 (0) | 2024.02.20 |
[인프런 워밍업 스터디 클럽 0기- BE] 2일차 강의 내용 정리 (0) | 2024.02.20 |
[인프런 워밍업 스터디 클럽 0기- BE] 1일차 과제 (0) | 2024.02.19 |
[인프런 워밍업 스터디 클럽 0기- BE] 1일차 강의 내용 정리 (0) | 2024.02.19 |