[인프런 워밍업 스터디 클럽 1기 BE] 첫번째 발자국

[인프런 워밍업 스터디 클럽 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

       

 

스프링 프로젝트 시작

  1. 이미 만들어진 스프링 프로젝트를 다운로드

  2. spring initializer를 이용해 새로운 프로젝트 시작

     

    https://start.spring.io/

 

어노테이션

@SpringBootApplication 어노테이션의 경우 스프링을 실행시킬 때 필요한 다양한 설정들을 자동으로 해준다.
여기서 과제로 어노테이션에 대한 리서치 과제를 진행하였다.

[과제 #1] 어노테이션

 

네트워크

서버 : 어떠한 기능을 제공하는 프로그램을 실행시키고 있는 컴퓨터

서버라는 컴퓨터에게 요청을 하기 위해서는 인터넷, 네트워크를 사용한다.
image

 

HTTP와 API

  1. (웹을 통한)컴퓨터 간 통신은 HTTP라는 표준화된 규약을 통해 이루어진다.

  2. HTTP 요청은 HTTP Method(GET, POST)와 Path(/portion)가 핵심이다.

  3. 요청에서 데이터를 전달하기 위한 방식에는 쿼리와 바디 방식이 있다.

  4. HTTP 응답의은 상태코드 가 핵심이다.

  5. 클라이언트와 서버는 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

접근 방법

  1. Intellij Ultimate에서 MySQL에 바로 접근이 가능하다.

  2. 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 람다를 이용해 더 간결한 코드를 간결하게 변경할 수 있다.

       

      [과제 #3] 람다식과 익명 클래스

  • 예외 처리

    • 사용자가 없으면 IllegalArgumentException과 같은 표준 예외를 throw한다.

       

    • 사용자의 존재 여부를 확인하고 없으면 예외를 던져 200 OK 대신 500 Internal Server Error가 나오게 한다.


여유롭게 강의를 수강하고 과제를 수행할 수 있을 것이라고 생각했는데, 강의도 진도표보다 적게 들었고 두 번째 과제도 수행하지 못했다.😭 다음 주에는 시간이 있을 때 미리 강의도 듣고 과제도 수행해야겠다는 생각이 들었다.

댓글을 작성해보세요.