[인프런 워밍업 스터디 클럽 1기 BE] 첫 번째 발자국
1주차 4/29 - 5/3Section 1 생애 최초 API 만들기목표스프링 프로젝트를 설정해 시작하고 실행할 수 있다.서버란 무엇인지, 네트워크와 HTTP, API는 무엇인지, JSON은 무엇인지 등 서버 개발에 필요한 다양한 개념을 이해한다.스프링 부트를 이용해 간단한 GET API, POST API를 만들 수 있다.@SpringBootApplication과 서버@SpringBootApplication = 어노테이션어노테이션 : Java의 문법으로 @ 뒤에 문자열을 붙이는 것 → 마법같은 일을 해주는 기호서버란?어떠한 기능을 제공하는 프로그램 /그 프로그램을 실행시키고 있는 컴퓨터네트워크란 무엇인가?포트 (port): 그 컴퓨터 안에 동작하는 여러 프로그램 중에 특정한 하나의 프로그램을 가리키는 것 (컴퓨터에서 돌고 있는 여러 프로그램 중 하나만 특정)IP 주소 : 컴퓨터마다 갖는 고유한 주소도메인 이름 : 244.66.51.9라는 외우기 어려운 숫자 대신, 사람이 외우기 쉬운 이름을 사용하는 것 ex) 도메인 이름 : spring.com, port : 3000→ Domain Name System (DNS)HTTP와 API란 무엇인가?HTTP (HyperText Transfer Protocol) : 데이터를 주고 받는 표준 → 컴퓨터 간의 통신HTTP Method : GET, POST, PUT, DELETEHTTP 요청 : HTTP Method (GET, POST)와 Path (/portion)가 핵심 / 쿼리와 바디로 데이터를 전달HTTP 응답 : 상태 코드가 핵심API (Application Programming Interface) :정해진 약속을 하여, 특정 기능을 수행하는 것GET API 개발하고 테스트하기@RestController public class CalculatorController { @GetMapping("/add") // GET /add public int addTwoNumbers( @RequestParam int number1, @RequestParam int number2 ) { return number1 + number2; } }POST API 개발하고 테스트하기@PostMapping("/multiply") // POST /multiply public int multipltTwoNumbers(@RequestBody CalculatorMultiplyRequest request) { return request.getNumber1() * request.getNumber2(); }유저 생성 API 개발유저 생성 API 스펙HTTP Method : POSTHTTP Path : /userHTTP Body (JSON){ "name": String (null 불가능), "age": Integer } 결과 반환 X (HTTP 상태 200 OK이면 충분)private final List<User> users = new ArrayList<>(); @PostMapping("/user") // POST /user public void saveUser(@RequestBody UserCreateRequest request) { users.add(new User(request.getName(), request.getAge())); }유저 조회 API 개발과 테스트유저 조회 API 스펙HTTP Method : GETHTTP Path : /user쿼리 : 없음결과 반환[{' "id": Long, "name": String (null 불가능), "age": Integer }, ...] @GetMapping("/user") public List<UserResponse> getUsers() { List<UserResponse> responses = new ArrayList<>(); for (int i = 0; i < users.size(); i++) { responses.add(new UserResponse(i + 1, users.get(i))); } return responses; }Section 2 생애 최초 Database 조작하기목표 1. 디스크와 메모리의 차이를 이해하고, Database의 필요성을 이해한다. 2. MySQL Database를 SQL과 함께 조작할 수 있다. 3. 스프링 서버를 이용해 Database에 접근하고 데이터를 저장, 조회, 업데이트, 삭제할 수 있다.4.API의 예외 상황을 알아보고 예외를 처리할 수 있다.Database와 MySQL컴퓨터의 핵심 부품 : CPU (연산 담당), RAM (메모리, 단기기억), DISK (장기기록)서버를 실행시켜 API를 동작시키기까지 일어나는 일서버 실행 → DISK의 코드 정보 RAM으로 복사 → API 실행 → 연산 수행 (CPU-RAM)Database :데이터를 구조화시켜 저장하는 장치RDB (Relational Database) : MySQL데이터를 표처럼 구조화시켜 저장하는 장치SQL (Structured Query Language) :표처럼 구조화된 데이터를 조회하는 언어MySQL에 접근하는 방법 터미널에서 mysql -u root -p + 비밀번호비밀번호 없으면 mysql -u rootMySQL에서 테이블 만들기DDL (Data Definition Language) : 데이터를 정의하기 위한 SQLMySQL 명령어데이터베이스 생성, 조회, 삭제create database [데이터베이스 이름]; show databases; drop database [데이터베이스 이름]; 테이블 생성, 조회, 삭제use [데이터베이스 이름]; show tables; create table [테이블 이름] ( [필드1 이름] [타입] [부가조건], [필드2 이름] [타입] [부가조건], ... primary key ([필드 이름]) ); drop table [테이블 이름]; 예시create table fruit ( id bigint auto_increment, name varchar(20), price int, stocked_date date, primary key (id) );SQL의 데이터 타입정수 타입tinyint : 1바이트 정수int : 4바이트 정수bigint : 8바이트 정수실수 타입double : 8바이트 실수decimal(A, B) : 소수점을 B개 가지고 있는 전체 A 자릿수 실수문자열 타입char(A) : A글자가 들어갈 수 있는 문자열varchar(A) : 최대 A글자가 들어갈 수 있는 문자열날짜, 시간 타입data : 날짜, yyyy-MM-dd 형식으로 들어간다.time : 시간, HH:mm:ss 형식으로 들어간다.datetime : 날짜와 시간을 합친 형식, yyyy-MM-dd HH:mm:ss 형식으로 들어간다.테이블의 데이터 조작하기DML (Data Manipulation Language) : 데이터를 조작하기 위한 SQLCRUD데이터를 넣는다 (생성 - Create) 조회한다 (읽기 - Retrieve or Read)수정한다 (업데이트 - Update)삭제한다 (제거 - Delete)Createinsert into [테이블 이름] (필드1이름, 필드2이름, ...) values (값1, 값2, ...) insert into fruit (name, price, stocked_date) values ('사과', 1000, '2023-01-01');Read select * from [테이블 이름]; select name, price from fruit; # 조건을 통해 필터 적용 select * from [테이블 이름] where [조건]; select * from fruit where name = '사과'; # and, or select * from fruit where name = '사과' and price <= 2000; # beween 예시 (가격이 1000~2000원인 과일) select * from where price between 1000 and 2000; # in 예시 (이름이 사과이거나 수박인 과일) select * from fruit where name in ('사과', '수박'); # not in 예시 (이름이 사과가 아닌 과일) select * from fruit where name not in ('사과');Updateupdate [테이블 이름] set 필드1이름=값1, 필드2이름=값2, ... where [조건]; # 모든 사과의 가격을 2000 -> 1000원으로 변경 update fruit set price=1500 where name = '사과';Deletedelete from [테이블 이름] where [조건]; delete from fruit where name = '사과';<<추가 예정>>과제과제 2과제 31주차 회고스터디가 갖는 가장 큰 장점! 공통의 목표를 갖고 모인 다른 스터디원들과 함께 공부하니까 동기부여가 된다. 혼자였으면 이런 꾸준함이 덜하지 않았을까? 그리고 멘토님도 계셔서 유익했던 라이브세션과 강의를 듣는 동안의 든든함이 스터디에 참여하기 잘했다라는 생각이 들게 한다.그리고 강의 너무 좋다..! 백엔드 개발을 지망하면서 다른 언어를 먼저 접하고, 자바와 스프링을 가장 늦게 배우고 있는 상황이었다. 백엔드 개발의 전반부터 다루고 시작하니 조각조각 알던 지식들이 한 줄기로 모여서 흐름을 잡기에 너무 좋았다. 다만 첫주에 직무 교육과 개인 일정이 겹쳐 제공된 진도를 다 수행하지 못하였는데, 2주차에 시간을 더 내어 보완하도록 할 것이다. SQL은 최근 정처기 실기에서 주요 문법 위주로 빠르게 훑었었는데 직접 실습하니까 복습도 되고 더 기억에도 남는 것 같다. 그리고 자바 공부가 더 필요하다는 것을 느껴 약간 미뤄두었던 '이것이 자바다' 완독을 곧 다시 시작할 것 같다.. 2주차엔 더더 화이팅! 😀