inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 스터디 1기] BE 1주차 회고

mieum
0

첫번째 발자국

 

인프런 워밍업 클럽 스터디에 참여하여 일주일을 보낸 후 쓰는 첫번째 회고록.

 


Section 1 - 생애 최초 API 만들기

JVM

JRE

JDK

 

빌드 : 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 SW 가공물(Artifact, 독립적인 하나의 파일)로 변환시키는 과정

실행 : 작성한 코드를 컴파일을 거쳐 작동시켜보는 것(독립 SW 가공물이 나올수도 있고, 나오지 않을 수도 있음)

빌드 과정 자동화와 외부 라이브러리 관리를 위해 빌드 툴이 사용되며, 자주 사용되는 자바 빌드툴에는 maven, gradle이 있다.

 

어노테이션

 

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

클라이언트 : 서버에 어떤 기능을 요청하는 프로그램. 또는 그 프로그램을 실행시키고 있는 컴퓨터

HTTP : 컴퓨터가 네트워크를 통해 다른 컴퓨터와 데이터를 주고받을 때 사용되는 통신 규약(중 하나)

 

요청에 대한 HTTP 응답

응답에는 추가 정보(바디)를 담을 수도 있음

 

API

 

@RestController

: 주어진 클래스를 Controller(API의 입구)로 등록한다 -> 현재 클래스를 API의 진입 지점으로 만들어줌

@GetMapping("/add")

: 아래 함수를 HTTP Method가 GET이고 HTTP Path가 /add인 API로 지정한다.

@RequestParam

: 주어지는 쿼리를 함수 파라미터에 넣는다 -> 같은 이름을 가진 쿼리의 값이 함수의 argument로 들어온다

@RequestBody

: HTTP Body 안에 담긴 JSON을 DTO 객체로 변환 (DTO : 정보를 전달하는 역할의 객체)

 

Section 2 - Database 조작하기

Database의 필요성

: API를 통해 생성된 정보는 단기 기억장치인 RAM에 기록되는데, RAM에 기록된 정보는 서버가 종료되면 사라지기 때문에 DISK에 장기 저장하기 위해 DB를 사용한다.

 

Database : 데이터를 구조화해서 저장하는 것

RDB(Relational DB) - MySQL : 데이터를 표처럼 구조화해서 저장하는 DB

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

-> MySQL을 사용

 

DDL(Data Definition Language) : 데이터를 정의하는 언어

(특정 데이터베이스 안으로 들어간 후)

create table [테이블 이름] (

[필드1 이름] [타입] [부가조건],

[필드2 이름] [타입] [부가조건],

...

primary key ([필드이름])

);

DML(Data Manipulation Language) : 데이터를 조작하는 언어

-> CRUD

데이터 넣기

INSERT INTO [테이블 이름] (필드1이름, 필드2이름, ...)

VALUDES(값1, 값2, ...)

데이터 조회하기

SELECT * FROM [테이블 이름];

SELECT * FROM [테이블 이름] WHERE [조건];

데이터 업데이트하기

UPDATE [테이블 이름] SET 필드1이름=값, 필드2이름=값, ...

WHERE [조건];

데이터 삭제하기

DELETE FROM [테이블 이름] WHERE [조건];

Spring에서 Database 사용하기

사람이 아닌 스프링 서버가 MySQL 서버에 접근하게 하는 것

application.yml 만들고 설정

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

API 변경

 

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

클린 코드가 중요한 이유

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

-> 개발자는 요구사항을 구현하기 위해 코드를 읽고 작성한다.

-> 코드를 읽는 것은 필수적이고 피할 수 없으므로, 코드만 보고도 의미를 명확하게 파악할 수 있도록 코드를 작성해야 한다.

클린 코드

Controller의 함수 1개를 역할에 따라 분리

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

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

  3. SQL을 통해 실제 DB와의 통신을 담당한다. -> Repository의 역할로 분리

 

3가지 역할로 구분된 구조

* controller는 service를 사용하고, service는 repostory를 사용함

** DTO는 계층 간의 정보를 전달하는 역할(여러 계층을 왔다갔다 함)

-> 이런 구조를 Layered Architecture라고 한다!


과제

과제3

https://shimmer-exoplanet-946.notion.site/3-07f12f6102e24a509e57519f890b43ec?pvs=4
자바의 람다식과 익명 클래스에 대해 공부해보는 과제였다. 강의를 들으면서 람다식이라는 개념을 처음 접했는데 과제를 통해 따로 공부할 수 있어서 좋았다. 수업을 들을 때도 익명 클래스 부분에서 버벅였는데, 과제를 진행하며 블로그 글을 읽어도 완전히 이해한 것 같지 자바에 대한 공부가 추가로 필요하겠다고 느꼈다.

 


 

회고

인프런 워밍업 클럽 스터디에 참여한지 벌써 일주일이 지났다. 이번주에 다른 일들이 많이 겹쳐 내 생각보다 더 힘들었지만, 혼자서 공부하는 것보다 이점이 훨씬 많았다.

진도표에 매일 공부할 분량이 체계적으로 정해져 있어 내가 별도로 학습 계획을 짜지 않아도 계획적으로 공부할 수 있었다. 여러명이 함께 강의를 수강하는 스터디 방식이라 강의 듣는 것을 미루지 않고 진도표에 맞춰 학습할 동기부여가 되었다. 추가적으로 주어지는 과제를 통해 배운 내용에 대해 스스로 학습하고 정리할 수 있는 것도 좋았다.

강의 내용도 매우 흥미로웠다. 자바와 스프링에 대한 기초 지식부터, 백엔드 개발에 필요한 서버 관련 내용까지 차근차근 정리할 수 있었다. 또한 API 설계 및 개발 과정을 실습으로 진행하며 각 기능이 어떻게 동작하고 구현되는지 직접 코딩을 하며 익혔다.

다른 일들이 겹쳐 과제를 많이 놓치기도 하고 실습 중 자바에 대한 이해가 부족하다는 것을 느껴 조금 아쉬운 1주차였지만, 2주차부터는 좀 더 많은 시간을 투자하고 자바에 대한 학습도 병행하며 더 충실한 일주일을 보낼 수 있도록 노력할 것이다.

백엔드 인프런 워밍업 클럽 스터디 1기

답변 0