[인프런 워밍업 클럽 스터디 1기] BE 1주차 <첫 번째 회고록>

[인프런 워밍업 클럽 스터디 1기] BE 1주차 <첫 번째 회고록>

강의 요약


Day 2 <서버 개발을 위한 환경 설정 및 네트워크 기초>

새로운 스프링 프로젝트 시작 방법

spring initializer 접속

  • Project: 이 프로젝트에서 사용될 ‘빌드 툴’ → 최근에는 Gradle 많이 사용

  • Language: 서버를 개발할 때 사용할 언어 → 최신 프로젝트에는 Kotlin을 사용하는 경향이 있지만 Java로 만들어진 기존 프로젝트가 많이 존재

  • Spring Boot: 스프링 부트의 버전을 고르는 항목 → 알파벳이 붙어 있으면 개발 중이거나 오픈 베타라는 의미, 시간이 지나면서 계속 버전이 업그레이드 되기 때문에 강의를 보는 시점에 따라 다른 숫자가 나올 수 있음

    • 버전은 첫 번째 숫자(major), 두 번째 숫자(month), 마지막 숫자(버그 및 간단한 기능 추가)

  • Project Metadata

    • Group: 프로젝트 그룹

    • Artifact: 최종 결과물 이름

    • Name: 프로젝트 이름

    • Description: 프로젝트 설명

    • Package name: 패키지 이름

  • Packaging: Spring Boot 톰캣이 내장되어 있어 Jar을 선택하면 됨

  • Java: 기존에 존재하는 프로젝트는 Java11이 가장 많고 그 다음은 Java8이 많음 → 최신 프로젝트는 최신 Java 버전을 사용할 수 있음

  • Dependencies: 프로젝트에서 사용하는 라이브러리 / 프레임워크

    • 라이브러리: 프로그래밍을 개발할 때 미리 만들어져 있는 기능을 가져다 사용하는 것

    • 프레임워크: 프로그래밍을 개발할 때 미리 만들어져 있는 구조에 코드를 가져다 끼워 넣는 것

@SpringBootApplication과 서버

어노테이션: Java의 문법으로 @ 뒤에 이런저런 문자열을 붙이는 것, 스프링을 실행하기 위해 필요한 다양한 설정들을 모두 자동으로 해 줌

Server: 어떠한 기능을 제공하는 프로그램 (컴퓨터)

서버와 요청: 기능을 제공하기 위해서는 누군가의 요청 필요

네트워크란 무엇인가

택배 시스템 <-> 네트워크

집 <-> 컴퓨터

주소 <-> IP

주소 별칭 <-> 도메인 이름

택배를 받는 사람 <-> port / 3000

HTTP와 API란 무엇인가

HTTP(HyperText Transfer Protocol)

  • Protocol: 표준, 약속

  • 웹을 통한 컴퓨터 간의 통신은 HTTP라는 표준화된 방식이 있음

HTTP Method

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

  • GET: HTTP 요청을 받는 컴퓨터에게 요청하는 행위 → 데이터를 달라

  • POST: HTTP 요청을 받는 컴퓨터에게 요청하는 행위 → 저장하라

     

GET: 데이터를 달라, 쿼리

  • DELETE: 데이터를 삭제하라, 쿼리

POST: 데이터를 저장하라, 바디

  • PUT: 데이터를 수정하라, 바디

API(Application Programming Interface)

  • 클라이언트와 서버는 HTTP를 주고받으며 기능을 동작하는데 이때 정해진 규칙을 API라고 함

  • 정해진 약속을 하여 특정 기능을 수행하는 것

     

URL(Uniform Resource Locator)

<http://spring.com:3000/portion?color=red&count=2>

HTTP Status Code

HTTP/1.1 200 OK
Content-Type: application/json

{
	"name":"A",
	"age":null
}
  • 200 → OK

  • 300 → Moved Permanently

  • 400 → NotFound

  • 500 → Internal Server Error

  • 요청에서 응답은 상태 코드가 핵심

GET API 개발 및 테스트

API를 이루고 있는 요소

  • HTTP Method

  • HTTP Path

  • 쿼리 (Key & Value)

  • API의 반환 결과

덧셈 API 생성

  • HTTP Method: GET

  • HTTP Path: /add

  • 쿼리: int number1 / int number2

  • API의 반환 결과 -> 숫자 (두 숫자의 덧셈 결과)

@RestController: 주어진 Class를 Controller로 등록, API의 입구

@GetMapping("/add"): 함수를 HTTP Method가 GET이고 HTTP Path가 /add인 API로 지정

@RequestParam: 주어지는 쿼리를 함수 파라미터에 넣음

Day 3 <첫 HTTP API 개발>

POST API 개발 및 테스트

GET API에서 데이터 받기: 쿼리 이용

POST API에서 데이터 받기: HTTP Body 이용

JSON(JavaScript Object Notation): 객체 표기법, 무언가를 표기하기 위한 형식으로 중괄호가 양쪽에 있음

곱셈 API 생성

HTTP Method : POST

HTTP Path: /multiply

HTTP Body (JSON)

API 반환 결과: 숫자 (곱셈 결과)

유저 생성 API 개발

유저 등록 API

  • HTTP Method: POST

  • HTTP Path: /user

  • HTTP Body (JSON)

  • 결과 반환 X

유저 조회 API

  • HTTP Method: GET

  • HTTP Path: /user

  • 쿼리: 없음

  • 결과 반환 (JSON)

Day 4 <기본적인 데이터베이스 사용법>

Database와 MySQL

Database: 데이터를 구조화 시켜 저장

RDB(Relational Database) - MySQL: 데이터를 표처럼 구조화 시켜 저장

SQL(Structured Query Language): 표처럼 구조화된 데이터를 조회하는 언어

MySQL 접근 방법 -> MySQL Command List Client (무료)

MySQL에서 데이터베이스 생성

데이터베이스 생성

create database [데이터베이스 이름];

데이터베이스 목록 조회

show databases;

데이터베이스 삭제

drop database [데이터베이스 이름];

데이터베이스 안으로 접속

use [데이터베이스 이름];

테이블 생성

create table 테이블 이름 (
  ...
);

테이블 제거

drop table [테이름 이름];

MySQL Type

정수: tinyint, int, bigint

실수: double, decimal(A,B)

문자열: char(A), varchar(A)

날짜, 시간 타입: date, time, datetime

테이블 데이터 조작

C.R.U.D

  • Create, Retrieve or Read, Update, Delete

데이터 넣기

INSERT INTO [테이블 이름] (항목) VALUES (값);

데이터 조회

SELECT * FROM [테이블 이름];

데이터 수정

UPDATE [테이블 이름] SET 항목 = 값;

데이터 삭제

DELETE FROM [테이블 이름] WHERE 항목 = 값;

Spring에서 Database 사용

Spring <-> MySQL 연동을 위한 yaml 파일 작성

spring:
  datasource:
    url: "jdbc:mysql://localhost/library"
    username: "root"
    password: 
    driver-class-name: com.mysql.cj.jdbc.Driver

이후 유저 테이블 생성, jdbcTemplate를 이용하여 POST API 변경, GET API 변경, 데이터 입력 및 조회

Day 5 <데이터베이스를 사용해 만드는 API>

유저 업데이트 API, 삭제 API 개발과 테스트

유저 이름 업데이트

  • HTTP Method: PUT

  • HTTP Path: /user

  • HTTP Body (JSON)

  • 결과 반환 X (HTTP Stauts 200)

유저 삭제

  • HTTP Method: DELETE

  • HTTP Path: /user

  • 쿼리 사용: 문자열 name

  • 결과 반환 X

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

SELECT문으로 해당 id나 name을 가진 사용자를 조회한 다음 그 사용자가 없을 시 IllegalArgumentException()으로 예외 처리

Day 6 <클린코드의 개념과 첫 리팩토링>

좋은 코드(Clean Code)는 왜 중요한가

코드: 요구사항을 표현하는 언어

개발자: 요구사항을 구현하기 위해 코드를 읽고 작성

Controller에서 모든 기능을 구현하면 안 되는 이유

  • 함수는 최대한 작게 한 가지 일만 수행하도록 하는 것이 좋음

  • 클래스는 작아야 하며 하나의 책임만을 가져야 함

Controller를 3단 분리하기

Controller의 함수 1개가 하고 있던 역할

  1. API가 진입 지점으로써 HTTP Body 객체 변환 -> Controller 역할

  2. 현재 유저가 있는지 없는지 확인하고 예외 처리 -> Service 역할

  3. SQL을 사용해 실제 Database와의 통신 담당 -> Repository 역할


회고


부트캠프를 수료한 지 오래되어서 JAVA의 대부분을 까먹었다고 봐도 무방한데 실무에 필요한 부분을 먼저 배우고 기초 지식을 채워나가는 것도 효율적인 방법이라 판단되어 스터디를 시작하게 되었습니다. 아직 알아야 할 것이 더 많지만 애매하게 알고 있었던 부분에 대해 상당히 많이 이해가 되어 신기했고 앞으로의 방향성에 대해서도 고려해 볼 수 있는 1주차였습니다.

댓글을 작성해보세요.