inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

ejej
1

1주차 4/29 - 5/3

image



Section 1 생애 최초 API 만들기

목표

  1. 스프링 프로젝트를 설정해 시작하고 실행할 수 있다.

  2. 서버란 무엇인지, 네트워크와 HTTP, API는 무엇인지, JSON은 무엇인지 등 서버 개발에 필요한 다양한 개념을 이해한다.

  3. 스프링 부트를 이용해 간단한 GET API, POST API를 만들 수 있다.

@SpringBootApplication과 서버

@SpringBootApplication = 어노테이션

네트워크란 무엇인가?

HTTP와 API란 무엇인가?

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 스펙

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 스펙

  1. HTTP Method : GET

  2. HTTP Path : /user

  3. 쿼리 : 없음

  4. 결과 반환

    [{'
    	"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

MySQL 명령어

데이터베이스 생성, 조회, 삭제

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의 데이터 타입

정수 타입

실수 타입

문자열 타입

날짜, 시간 타입

테이블의 데이터 조작하기

Update

update [테이블 이름] set 필드1이름=값1, 필드2이름=값2, ... where [조건];
# 모든 사과의 가격을 2000 -> 1000원으로 변경
update fruit set price=1500 where name = '사과';

Delete

delete from [테이블 이름] where [조건];
delete from fruit where name = '사과';


Section 3 역할의 분리와 스프링 컨테이너

목표

  1. 좋은 코드가 왜 중요한지 이해하고, 원래 있던 Controller 코드를 보다 좋은 코드로 리팩토링한다.

  2. 스프링 컨테이너와 스프링 빈이 무엇인지 이해한다.

  3. 스프링 컨테이너가 왜 필요한지, 좋은 코드와 어떻게 연관이 있는지 이해한다.

  4. 스프링 빈을 다루는 여러 방법을 이해한다.

Clean Code와 Controller-Service-Repository 3단 분리

Clean Code 중

Controller가 하고 있던 역할 분리

  1. API의 진입 지점으로써 HTTP Body를 객체로 변환하고 있다. → Controller의 역할

  2. 현재 유저가 있는지, 없는지 등을 확인하고 예외 처리를 해준다. → Service의 역할

  3. SQL을 사용해 실제 DB와의 통신을 담당한다. → Repository의 역할

코드 리팩토링 예시 - UPDATE API

// Controller
@PutMapping("/user")
public void updateUser(@RequestBody UserUpdateRequest request) {
    userService.updateUser(request);
}

// Service
public void updateUser(UserUpdateRequest request) {
    if (userRepository.isUserNotExist(request.getId())) {
        throw new IllegalArgumentException();
    }

    userRepository.updateUserName(request.getName(), request.getId());
}

// Repository
public boolean isUserNotExist(long id) {
    String readSql = "SELECT * FROM user WHERE id = ?";
    return jdbcTemplate.query(readSql, (rs, rowNum) -> 0, id).isEmpty();
}

public void updateUserName(String name, long id) {
    String sql = "UPDATE user SET name = ? WHERE id = ?";
    jdbcTemplate.update(sql, name, id);
}

과제

과제 2

과제 3


1주차 회고

스터디가 갖는 가장 큰 장점! 공통의 목표를 갖고 모인 다른 스터디원들과 함께 공부하니까 동기부여가 된다. 혼자였으면 이런 꾸준함이 덜하지 않았을까? 그리고 멘토님도 계셔서 유익했던 라이브세션과 강의를 듣는 동안의 든든함이 스터디에 참여하기 잘했다라는 생각이 들게 한다.

그리고 강의 너무 좋다..! 백엔드 개발을 지망하면서 다른 언어를 먼저 접하고, 자바와 스프링을 가장 늦게 배우고 있는 상황이었다. 백엔드 개발의 전반부터 다루고 시작하니 조각조각 알던 지식들이 한 줄기로 모여서 흐름을 잡기에 너무 좋았다. 다만 첫주에 직무 교육과 개인 일정이 겹쳐 제공된 진도를 다 수행하지 못하였는데, 2주차에 시간을 더 내어 보완하도록 할 것이다. SQL은 최근 정처기 실기에서 주요 문법 위주로 빠르게 훑었었는데 직접 실습하니까 복습도 되고 더 기억에도 남는 것 같다. 그리고 자바 공부가 더 필요하다는 것을 느껴 약간 미뤄두었던 '이것이 자바다' 완독을 곧 다시 시작할 것 같다.. 2주차엔 더더 화이팅! 😀

백엔드 인프런워밍업클럽 백엔드

답변 0