[인프런 워밍업 스터디 클럽 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를 이용해 새로운 프로젝트 시작 https://start.spring.io/ 어노테이션@SpringBootApplication 어노테이션의 경우 스프링을 실행시킬 때 필요한 다양한 설정들을 자동으로 해준다.여기서 과제로 어노테이션에 대한 리서치 과제를 진행하였다.[과제 #1] 어노테이션 네트워크서버 : 어떠한 기능을 제공하는 프로그램을 실행시키고 있는 컴퓨터서버라는 컴퓨터에게 요청을 하기 위해서는 인터넷, 네트워크를 사용한다. 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로 접근하기 SQLDDL(Data Definition Language) : 데이터를 정의하는 SQLDBcreate database [데이터베이스 이름]; show databases; drop database [데이터베이스 이름]; use [데이터베이스 이름];테이블create table [테이블 이름] ( [필드1 이름] [타입] [부가조건], [필드 2 이름] [타입] [부가조건], ... primary key ([필드 이름]) ); show tables; drop table [테이블 이름];DML(Data Manipulation Language) : 데이터를 조작하기 위한 SQLCRUDCreate(생성) : 데이터 삽입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 람다를 이용해 더 간결한 코드를 간결하게 변경할 수 있다. [과제 #3] 람다식과 익명 클래스예외 처리사용자가 없으면 IllegalArgumentException과 같은 표준 예외를 throw한다. 사용자의 존재 여부를 확인하고 없으면 예외를 던져 200 OK 대신 500 Internal Server Error가 나오게 한다.여유롭게 강의를 수강하고 과제를 수행할 수 있을 것이라고 생각했는데, 강의도 진도표보다 적게 들었고 두 번째 과제도 수행하지 못했다.😭 다음 주에는 시간이 있을 때 미리 강의도 듣고 과제도 수행해야겠다는 생각이 들었다.