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

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

인프런 워밍업 클럽1기 첫번째 회고록

 

최근 스프링과 자바를 독학하고 있었는데, 강의를 듣기 위해 인프런 사이트에 접속했을 때 눈에 들어온 것이 바로 워밍업 클럽 스터디 모집 게시글이었다. 공통의 목표를 가진 사람들과 함께 공부하면 혼자 공부할 때 보다 의욕이 생길 것 같아 고민하지 않고 바로 신청했다.

강의 커리큘럼에 스프링 프로젝트를 개발은 물론 배포까지 포함되어 있다는 점이 특히 마음에 들었다. 간단한 프로젝트의 배포를 해 본 적이 있지만 여러 블로그들을 참고하며 이 방법이 맞는지 확신은 없는 상태에서 일단 돌아간다!! 뭔가 된다!! 라는 느낌의 배포였기 때문에… 이번 스터디를 통해 스프링 프로젝트의 전체적인 개발 흐름을 파악하는 것이 목표이다.

 


Section 0 - 소개와 준비

강의 소개와 자료를 포함해 강의에 대한 전반적인 설명이 담긴 파트였다.

프로그램 공부를 시작할 때 개발 도구 설치 과정에서 막히기 시작하면 슬며시 포기하고 싶어지는 마음이 들기 마련이다. 웹 개발이나 스프링부트를 처음 접하는 사람들을 위해 프로그램 설치 과정이 상세히 담긴 영상이 준비되어 있었다. 천천히 따라하면 해당 강의에서 사용하는 프로그래밍 도구(Java, IntelliJ, PostMan, MySQL, git)를 손쉽게 설치할 수 있을 것이다.

 

 

Section 1 - 생애 최초 API 만들기

 

Java를 공부하기 전에 알아두면 좋을 것들

스프링 프로젝트를 본격적으로 시작하기에 앞서 Java에 대한 영상이 준비되어 있었다.

첫 번째 영상에서는 Java의 JDK, JRE, JVM에 대한 설명이 담겨있었다.

  • JDK: Java Development Kit = JRE + 개발을 위한 도구(컴파일러, 디버그 도구)

  • JRE: Java Runtime Environment = JVM + 실행에 필요한 라이브러리

  • JVM: Java Virtual Machine = 자바 가상머신, 바이너리 코드를 읽고 검증하고 실행함

두 번째 영상에서는 빌드가 무엇인지, Java의 대표적인 빌드 도구에는 어떤 것이 있는지 알 수 있었다.

  • 빌드: 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적 SW로 변환시키는 과정

  • Java 빌드 도구: ANT, Maven, Gradle

  • 해당 강의에서는 Gradle을 사용한다

 

서버 실행과 어노테이션

본격적인 스프링 강의는 스프링 프로젝트의 서버를 실행시켜 보는 것으로 시작되었다. @SpringApplication 어노테이션과 main 메소드에 대해 알아보았으며, 1주차 과제로 어노테이션에 대한 추가적인 공부를 수행하였다.

[인프런 워밍업 클럽1기 BE] Java 커스텀 어노테이션 만들기

 

네트워크

다음으로 네트워크에 대해 배운다. 서버란, 어떠한 기능을 제공하는 프로그램 또는 그 프로그램을 실행시키는 컴퓨터이며 우리는 컴퓨터에 요청을 보내기 위해 인터넷, 네트워크를 사용한다. 백엔드 개발을 위해 네트워크 이론은 꼭 필요한 내용이라는 생각이 들었다.

 

HTTP와 API

컴퓨터간 HTTP와 API 통신 방식에 대해 배운다.

  1. 컴퓨터 간 통신은 HTTP라는 표준화된 규약을 통해 이루어진다.

  2. HTTP 요청의 핵심은 method와 path이다.

  3. 요청에서 데이터를 전달하는 방식에는 쿼리와 바디 방식이 있다.

  4. HTTP 응답의 핵심은 상태코드이다.

  5. 클라이언트와 서버는 HTTP를 주고받으며 기능하고, 이때 정해진 규칙이 API이다.

 

API 개발하기

  • 2개의 수를 전달 받아 덧셈, 곱셈 결과를 응답하는 API

  • 사용자를 저장, 조회, 수정, 삭제하는 CRUD API

위와 같은 활동을 통해 API를 만드는 방법을 배웠다. 처음에는 파라미터로 요청을 받고 응답하던 코드에 DTO를 도입해보면서 DTO의 사용 이유와 방법을 배울 수 있어 좋았다. 또한 과제2를 통해 추가적인 GET, POST API를 구현해보면서 복습할 수 있어 도움이 되었다.

과제 2 - API 만들기(GET, POST)

 

 

Section 2 - 생애 최초 Database 조작하기

 

Database의 필요성

Section1의 활동으로 만든 API에는 문제점이 있었는데, 바로 서버를 종료하면 저장했던 데이터가 사라진다는 점이었다. 서버가 실행된 후의 API 동작 결과는 RAM(메모리)에 쓰여지기 때문에 서버는 Disk(장기기록장치)에 데이터를 저장해줘야 한다. 이때 Database를 사용해 데이터를 저장할 수 있다.

Database는 데이터를 구조화 시켜 저장하며, 그 중 Relational Database는 데이터를 표처럼 구조화 시켜 저장한다. 우리가 사용할 MySQL은 대표적인 RDB이다. 데이터베이스를 조작하기 위해서 SQL을 사용해야 한다.

 

MySQL 사용하기

MySQL을 사용할 때 Workbench로 접속했었는데, 인텔리제이에서 바로 MySQL에 접근할 수 있다는 것을 알게 되었다. MySQL의 데이터 저장 구조를 포함해 데이터베이스 생성, 테이블 생성 및 삭제 명령어, 데이터 CRUD 명령어를 복습할 수 있어 좋았다.

 

스프링으로 Database 접근하기

Spring 서버에서 MySQL에 접근하기 위해 관련 설정을 해주는 파일이 필요하다. properties 파일 방식도 있지만 개인적으로 yml 방식이 읽기 쉬워서 선호하는데, 강의도 yml으로 진행되었다. 자바 데이터베이스 커넥터에 대한 클래스인 JdbcTemplate로 SQL을 날리는 방식을 배울 수 있었다.

 

예외 처리

존재하지 않는 사용자에 대해 요청이 올 경우에도 성공이라는 의미의 200 상태 코드가 전달되는 문제가 있었다. 따라서 사용자가 있는지 확인하는 코드를 추가해 만약 사용자가 없다면 예외를 던지도록 수정해 500 Error를 보내는 방식을 배웠다.

 

 

Section 3 - 역할 분리

 

클린코드와 리팩토링

<Clean Code> 가이드

  • 함수: 최대한 작게 만들고 한 가지 일만 수행하는 것이 좋다

  • 클래스: 작아야 하며 하나의 책임만 가져야 한다

     

 

앞서 구현한 코드는 Controller에서 모든 동작을 수행하며 3가지 역할을 가지고 있었다.

  1. API의 진입 지점으로 HTTP Body를 객체로 변환한다

  2. 유저의 유무를 확인해 예외 처리를 한다

  3. SQL을 통해 실제 DB와 통신을 담당한다

 

이렇게 하나의 기능이 한번에 구현되어 있으면 다음과 같은 문제점이 있다.

  1. 동시에 여러 명이 수정할 수 없다

  2. 읽고 이해하기 어렵다

  3. 한 부분을 수정하면 전체에 영향이 갈 수 있다

  4. 너무 큰 기능이라 테스트가 어렵다

  5. 유지 보수성이 떨어진다

 

Controller의 역할을 Service, Repository 클래스로 분리해주었다. 클래스가 각자의 역할을 가지고 쌓인 구조를 Layered Architecture이라고 하며, DTO는 계층간 정보를 전달하는 역할을 한다.

 


계획표를 처음 보았을 때엔 여유롭게 수강 할 수 있을 것이라고 생각했는데, 다른 일정도 생겨서 생각보다 바쁘게 듣고 있다. 시간이 날 때마다 미리 강의를 들어야 할 것 같다.

 

 

댓글을 작성해보세요.