[인프런 워밍업 스터디 클럽 1기 BE] 첫번째 발자국
Section 1 - 생애 최초 API 만들기
Java를 공부하기 전에 알아두면 좋을 것들
JAVA의 경우 C언어와는 다르게 운영체제에 따라 각각의 컴파일러가 필요하지 않다. JAVA 컴파일러의 결과물이 각각의 운영체제의 JVM 위로 올라가게 된다.
JVM : 바이너리 코드를 읽고 검증하고 실행
JRE : JVM + 실행에 필요한 라이브러리 파일
JDK : JRE + 개발을 위한 도구(컴파일러, 디버그 도구)
JDK > JRE > JVM
빌드(build) : 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적 SW(Artifact)로 변환하는 과정
실행(run) : 작성한 코드를 컴파일을 거쳐 작동하는 것 (Artifact가 있을 수도 있고 없을 수도 있다)
Java 빌드 도구 : 빌드 과정 자동화와 외부 라이브러리 관리를 위해 빌드 툴을 사용
예) ANT, Maven, Gradle
스프링 프로젝트 시작
이미 만들어진 스프링 프로젝트를 다운로드
spring initializer를 이용해 새로운 프로젝트 시작
어노테이션
@SpringBootApplication
어노테이션의 경우 스프링을 실행시킬 때 필요한 다양한 설정들을 자동으로 해준다.
여기서 과제로 어노테이션에 대한 리서치 과제를 진행하였다.
네트워크
서버 : 어떠한 기능을 제공하는 프로그램을 실행시키고 있는 컴퓨터
서버라는 컴퓨터에게 요청을 하기 위해서는 인터넷, 네트워크를 사용한다.
HTTP와 API
(웹을 통한)컴퓨터 간 통신은 HTTP라는 표준화된 규약을 통해 이루어진다.
HTTP 요청은 HTTP Method(GET, POST)와 Path(/portion)가 핵심이다.
요청에서 데이터를 전달하기 위한 방식에는 쿼리와 바디 방식이 있다.
HTTP 응답의은 상태코드 가 핵심이다.
클라이언트와 서버는 HTTP를 주고받으며 기능하는데 이때 정해진 규칙이 API이다.
API 개발하기
API Specification(명세) : API를 개발하기 전에 API의 HTTP method, HTTP path, 쿼리와 바디, API의 반환 결과를 결정해야 한다.
GET API
@RestController : 주어진 Class를 Controller로 등록한다.
Controller : API의 입구
DTO(Data Transfer Object) 객체 : '쿼리'를 서버 안 Controller로 전달하는 역할
POST API
쿼리를 사용하지 않고 바디(Body)를 사용한다.
Json : 바디에 데이터를 담아주는 방식
Section 2 - 생애 최초 Database 조작하기
Database
지난 시간에 서버를 종료했다가 시작하면 유저 정보가 전부 사라지는 것을 확인할 수 있었다. API의 결과가 RAM(메모리)에 저장되기 때문에 서버는 Disk(장기기록장치)에 정보를 저장해야 한다. 이럴 때 Database를 사용할 수 있다.
Database : 데이터를 구조화 시켜 저장
Relational Database : 데이터를 표처럼 구조화 시켜 저장
MySQL은 대표적인 RDB이다.
데이터베이스를 조작하기 위해서 SQL을 사용해야 한다.
MySQL
접근 방법
Intellij Ultimate에서 MySQL에 바로 접근이 가능하다.
CLI로 접근하기
SQL
DDL(Data Definition Language) : 데이터를 정의하는 SQL
DB
create database [데이터베이스 이름];
show databases;
drop database [데이터베이스 이름];
use [데이터베이스 이름];
테이블
create table [테이블 이름] (
[필드1 이름] [타입] [부가조건],
[필드 2 이름] [타입] [부가조건],
...
primary key ([필드 이름])
);
show tables;
drop table [테이블 이름];
DML(Data Manipulation Language) : 데이터를 조작하기 위한 SQL
CRUD
Create(생성) : 데이터 삽입
Retrieve or Read(읽기) : 조회
Update(업데이트) : 수정
Delete(제거) : 삭제
# 데이터 넣기
INSERT INTO [테이블 이름] (필드1이름, 필드2이름, ...) VALUES (값1, 값2, ...)
# 데이터 조회하기
SELECT * FROM [테이블 이름] WHERE [조건];
# 데이터 업데이트하기
UPDATE [테이블 이름] SET 필드1이름=값1, 필드2이름=값2, ... WHERE [조건];
# 데이터 삭제하기
DELETE FROM [테이블 이름] WHERE [조건];
Spring에서 Database 사용
resources 폴더에
application.yml
파일을 생성해 스프링 서버와 연결할 DB 정보를 설정한다.POST API 변경
jdbcTemplate을 이용해 SQL을 날릴 수 있다.
"INSERT INTO user(name, age) VALUES(?, ?)";
와 같이 값이 들어가야 하는 부분에는 ?를 사용한다.jdbcTemplate.update(sql, request.getName(), request.getAge());
jdbcTemplate.update
는 INSERT, UPDATE, DELETE 쿼리에 사용 가능하다.첫 파라미터는 sql을 받고, ?를 대신할 값을 차례로 넣어준다.
GET API 변경
jdbcTemplate.query(sql, RowMapper 구현 익명클래스)
: query를 사용하면 SELECT 쿼리를 날릴 수 있다.@Override
함수 : ResultSet 객체에는 결과가 담겨있고, 이 객체에getType("필드이름")
을 사용해서 실제 값을 가져온다.JAVA 람다를 이용해 더 간결한 코드를 간결하게 변경할 수 있다.
예외 처리
사용자가 없으면
IllegalArgumentException
과 같은 표준 예외를 throw한다.사용자의 존재 여부를 확인하고 없으면 예외를 던져 200 OK 대신 500 Internal Server Error가 나오게 한다.
여유롭게 강의를 수강하고 과제를 수행할 수 있을 것이라고 생각했는데, 강의도 진도표보다 적게 들었고 두 번째 과제도 수행하지 못했다.😭 다음 주에는 시간이 있을 때 미리 강의도 듣고 과제도 수행해야겠다는 생각이 들었다.
댓글을 작성해보세요.