/freelec-springboot-webservice

이동욱 개발자님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 기반으로 작성됩니다.

Primary LanguageJava

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

목차

01장 인텔리제이로 스프링 부트 시작하기

이번 장에서는 다음을 배웠습니다.

  1. 인텔리제이를 비롯한 각종 IDE를 관리하는 툴박스 소개
  2. 인텔리제이의 설치와 기본 사용법
  3. mavenCentral, jcenter 비교
  4. 스프링 부트 프로젝트와 그레이들 연동 방법
  5. 인텔리제이에서 깃허브 사용하는 방법

02장 스프링 부트에서 테스트 코드를 작성하자

이번 장에서는 다음을 배웠습니다.

  1. TDD와 단위 테스트란
  2. 스프링 부트 환경에서 테스트 코드를 작성하는 방법
  3. 자바의 필수 유틸 롬복의 사용법

아직까지 직접 손으로 테스트하고, 눈으로 검증하는 것이 더 편할 수 있습니다.
그럼에도 꼭 익혀야 하는 기술이 테스트코드 입니다.
많은 서비스 회사에서 테스트 코드의 중요성을 언급한다는 것을 꼭 떠올려주세요.
아직까지는 테스트 코드로 코드를 검증하는 것이 어색하시겠지만, 이 책의 후반부까지 잘 따라온다면,
분명 익숙해질 수 있습니다.
다음 장 부터는 스프링 부트에서 데이터베이스를 어떻게 사용하는지 배워 보겠습니다.

03장 스프링 부트에서 JPA로 데이터베이스 다뤄보자

이번 장에서는 다음을 배웠습니다.

  1. JPA / Hibernate / Spring Data Jpa의 관계
  2. Spring data Jpa를 이용하여 관계형 데이터베이스를 객체지향적으로 관리하는 방법
  3. JPA의 더티 체킹을 이용하면 Update 쿼리 없이 테이블 수정이 가능하다는 것
  4. JPA Auditing을 이용하여 등록/수정 시간을 자동화하는 방법

MyBatis나 iBatis를 사용하시던 분들은 어색할 수 있습니다만 ORM은 데이터베이스를 사용하는
서비스를 객체지향적으로 구현하는데 큰 도움을 주는 도구입니다. 많은 서비스 회사에서 실제로
스프링 부트와 JPA를 조합해서 쓰고 있습니다. 서비스 회사 이직을 희망하는 독자라면 꼭 실습을
진행해 보길 바랍니다.

3.4 Spring Web Layer (p101 ~ p102)

1. Web Layer  
    흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemaker 등의 뷰 템플릿 영역이다.  
    이외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice) 등    
    외부 요청과 응답에 대한 전반적인 영역을 이야기한다.  
    
2. Service Layer  
    @Service에 사용되는 서비스 영역이다.  
    일반적으로 Controller와 Dao의 중간 영역에서 사용된다.  
    @Transactional이 사용되어야 하는 영역이기도 하다.   
    
3. Repository Layer  
    Database와 같이 데이터 저장소에 접근하는 영역이다.   
    Dao(Data Access Object)영역으로 이해하면 쉽다.   
    
4. Dtos   
    Dto(Data Transfer Object)는 계층 간에 데이터 교환을 위한 객체를 말한다.   
    Dtos는 이들의 영역을 의미한다.   
    예를 들어 뷰 템플릿 엔진에서 사용될 객체나 Repository Layer에서 결과로 넘겨준  
    객체 등이 이들을 말한다.   
    
5. Domain Model   
    도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고,  
    공유할 수 있도록 단순화시킨 것을 도메인 모델이라 한다.   
    예를 들어, 택시 앱이라고 하면 배차, 탑승, 요금 등이 모두 도메인이 될 수 있다.   
    @Entity가 사용된 영역 역시 도메인 모델이라고 이해하면 된다.   
    다만, 무조건 데이터베이스의 테이블과 관계가 있어야하만 하는 것은 아니다.   
    VO처럼 값 객체들도 이 영역에 해당하기 때문이다.   

04장 머스테치로 화면 구성하기

이번 장에서는 다음을 배웠습니다.

  1. 서버 템플릿 엔진과 클라이언트 템플릿 엔진의 차이
  2. 머스테치의 기본 사용 방법
  3. 스프링 부트에서의 화면 처리 방식
  4. js/css 선언 위치를 다르게 하여 웹사이트의 로딩 속도를 향상하는 방법
  5. js 객체를 이용하여 브라우저의 전역 변수 충돌 문제를 회피하는 방법

백엔드 개발자라 하더라도 어드민 서비스 혹은 통계 서비스를 만들 일이 많습니다.
그럴 때 화면 개발은 백엔드 개발자가 진행해야 되니 한번은 다뤄보는 것이 많은 도움이 됩니다.

꼭 필자의 선택인 머스테치가 아니더라도 Thymeleaf나 Free-marker 등 본인의 기호에 맞춰 이번 장을 다시 한번
진행해보는 것도 좋은 공부 방법입니다.

05장 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

06장 AWS 서버 환경을 만들어보자 - AWS EC2

07장 AWS에 데이터베이스 환경을 만들어보자 - AWS RDS

08장 EC2 서버에 프로젝트를 배포해 보자

09장 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화

10장 24시간 365일 중단 없는 서비스를 만들자

11장 1인 개발 시 도움이 될 도구와 조언들

각 장마다 필요한 주석 추가

도구 정의

Gradle

Gradle은 프로젝트를 위한 범용 빌드 도구.

1. Gradle은 Groovy를 이용한 빌드 자종화 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며,
   현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다.
   Java, C/C++, 파이썬 등과 같은 여러 언어를 지원한다.

왜 Gradle인가?

우선, Java는 비교적 일찍부터 "빌드 도구"에 의한 프로젝트 관리가 보급되어 있었다.

Apache Ant라는 빌드 도구가 등장하고, 후에 더욱 강력한 Apache Maven이 등장하였으며, 현 시점에서도
"Java 빌드 도구의 사실상의 표준"이라고 할 수 있다.

이러한 툴에서 "이것이 거의 표준"이라고 정착하면, 그렇게 간단히 바뀌는 것은 아니지만 빌드 도구의 세계에서
그 예외적인 사건이 일어나고 있다.
이 Maven의 아성을 무너뜨리고있는 강력한 라이벌이 "Gradle"이라는 소프트웨어다.

Gradle은 Groovy라는 언어를 기반으로 만들어진 빌드 도구다.
Groovy는 Java 가상머신에서 실행되는 스크립트 언어이며, 소스 코드를 그대로 실행한다. 또한 Java와 호환되며,  
JVM에서 동작하지만, Java와 달리 소스코드를 컴파일을 할 필요는 없다. Groovy는 스크립트 언어이며,   
소스 코드를 그대로 실행한다. 또한 Java와 호환되고, Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다.    
문법도 Java에 아주 가까워, Java를 보다 사용하기 쉽게 한 것으로 느낄 수 있다. 어떤 사람들은 Groovy는     
Java의 방언 중 하나라고 생각하는 사람도 있을 정도이다.    

이 "간편하게 사용할 수 있는 Java"라고 할 수 있는 Groovy를 사용하여 빌드 처리를 작성하고, 실행하는 것이 Gradle이다.   

기존에 이미 Maven을 이용하고 있는 사람이라면 느낄 수 있겠지만, Maven은 XML 기반의 빌드 처리를 작성한다.     
간단한 내용이라면 상관 없지만, 복잡한 내용을 작성하게 되면 XML 기반 의한 묘사는 상당히 어려워 진다.      
Java 프로그래머인데, 빌드 관리만을 위해 다른 언어를 사용하지 않으면 안된다는 것은 어쩐지 납득할 수 없는 느낌도 든다.   

Gradle라면, Java와 거의 비슷한 코드를 써서 빌드 처리를 관리 할 수 있다.      
이런 면이 Java 프로그래머로 압도적으로 받아들이 기 쉬운지도 모른다.    

출처: https://araikuma.tistory.com/460 [프로그램 개발 지식 공유]   

Gradle wrapper

이미 존재하는 프로젝트를 새로운 환경에 설치할 때 별도의 설치나 설정 없이 바로 빌드하기 위해 사용된다.

1. Java 혹은 Gradle 자체도 설치할 필요가 없으며, 로컬로 설치된 경우도 마찬가지다.
   따라서 항상 wrapper를 사용할것을 권장하고있다.

2. wrapper는 사용자가 Gradle이 설치되어 있지 않아도, Gradle tasks를 실행할 수 있도록 해주는 
   작은 script, jar 및 등록 정보 파일이다.

3. wrapper를 생성하면, 사용자가 프로젝트를 만든 사람과 동일한 버전의 Gradle을 사용할 수 있다.

빌드 자동화도구

1. 빌드 자동화의 본질적 목적은 소프트웨어 개발자가 반복해서 하는 코딩을 자 짜여진 프로세스를 통해 자동으로 실행하여
   믿을 수 있는 결과물도 생산해 낼 수 있는 일련의 작업방식 및 방법을 말한다.  
   
   지속적인 통합과도 일맥상통되는 의미다. 수없이 반복해서 최종 결과물을 만들어내야 하는 소프투웨어 개발업무에서  
   빠질 수 없는 개념적 이해가 되었다. 특히 오늘날의 복잡하고 광범위한 협업적 개발 과정에서는 광정마다 있을 수 있는  
   인간적 실수의 가능성을 최소한으로 줄여야 한다.