![[인프런 워밍업 클럽 스터디 1기] BE 1주차 <첫 번째 회고록>](https://cdn.inflearn.com/public/files/blogs/fc4685d4-3564-49e9-b0ad-1184aebafd0b/333476.png)
[인프런 워밍업 클럽 스터디 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개가 하고 있던 역할
API가 진입 지점으로써 HTTP Body 객체 변환 -> Controller 역할
현재 유저가 있는지 없는지 확인하고 예외 처리 -> Service 역할
SQL을 사용해 실제 Database와의 통신 담당 -> Repository 역할
회고
부트캠프를 수료한 지 오래되어서 JAVA의 대부분을 까먹었다고 봐도 무방한데 실무에 필요한 부분을 먼저 배우고 기초 지식을 채워나가는 것도 효율적인 방법이라 판단되어 스터디를 시작하게 되었습니다. 아직 알아야 할 것이 더 많지만 애매하게 알고 있었던 부분에 대해 상당히 많이 이해가 되어 신기했고 앞으로의 방향성에 대해서도 고려해 볼 수 있는 1주차였습니다.
댓글을 작성해보세요.