본문 바로가기
Hello_World/IT도서

[책리뷰] 스프링 부트와 AWS로 혼자 구현하는 웹서비스

by 비전공자 기록광 2022. 7. 24.
반응형

작년에 취준하면서 빠르게 훑었었던 책인데 다시 보니 진짜 목차 하나하나 버릴 것이 없어
한번 처음부터 끝까지 실습하며 복습하기로 했다.

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 | 이동욱 | 프리렉 - 교보문고 (kyobobook.co.kr)

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 교보문고

인텔리제이, JPA, JUnit 테스트, 그레이들 | 이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현합니다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링 시큐리티를 활용한 소셜 로그인 등으

www.kyobobook.co.kr



목차는 이렇다.

01장 인텔리제이로 스프링 부트 시작하기
_1.1 인텔리제이 소개
_1.2 인텔리제이 설치하기
_1.3 인텔리제이 커뮤니티에서 프로젝트 생성하기
_1.4 그레이들 프로젝트를 스프링 부트 프로젝트로 변경하기
_1.5 인텔리제이에서 깃과 깃허브 사용하기

02장 스프링 부트에서 테스트 코드를 작성하자
_2.1 테스트 코드 소개
_2.2 Hello Controller 테스트 코드 작성하기
_2.3 롬복 소개 및 설치하기
_2.4 Hello Controller 코드를 롬복으로 전환하기

03장 스프링 부트에서 JPA로 데이터베이스 다뤄보자
_3.1 JPA 소개
__Spring Data JPA
__실무에서 JPA
__요구사항 분석
_3.2 프로젝트에 Spring Data Jpa 적용하기
_3.3 Spring Data JPA 테스트 코드 작성하기
_3.4 등록/수정/조회 API 만들기
_3.5 JPA Auditing으로 생성시간/수정시간 자동화하기
__LocalDate 사용
__JPA Auditing 테스트 코드 작성하기

04장 머스테치로 화면 구성하기
_4.1 서버 템플릿 엔진과 머스테치 소개
__머스테치란
__머스테치 플러그인 설치
_4.2 기본 페이지 만들기
_4.3 게시글 등록 화면 만들기
_4.4 전체 조회 화면 만들기
_4.5 게시글 수정, 삭제 화면 만들기
__게시글 수정
__게시글 삭제

05장 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기
_5.1 스프링 시큐리티와 스프링 시큐리티 Oauth2 클라이언트
_5.2 구글 서비스 등록
_5.3 구글 로그인 연동하기
__스프링 시큐리티 설정
__로그인 테스트
_5.4 어노테이션 기반으로 개선하기
_5.5 세션 저장소로 데이터베이스 사용하기
_5.6 네이버 로그인
__네이버 API 등록
__스프링 시큐리티 설정 등록
_5.7 기존 테스트에 시큐리티 적용하기

06장 AWS 서버 환경을 만들어보자 - AWS EC2
_6.1 AWS 회원 가입
_6.2 EC2 인스턴스 생성하기
_6.3 EC2 서버에 접속하기
_6.4 아마존 리눅스 1 서버 생성 시 꼭 해야 할 설정들

07장 AWS에 데이터베이스 환경을 만들어보자 - AWS RDS
_7.1 RDS 인스턴스 생성하기
_7.2 RDS 운영환경에 맞는 파라미터 설정하기
_7.3 내 PC에서 RDS에서 접속해 보기
__Database 플러그인 설치
_7.4 EC2에서 RDS에서 접근 확인

08장 EC2 서버에 프로젝트를 배포해 보자
_8.1 EC2에 프로젝트 Clone 받기
_8.2 배포 스크립트 만들기
_8.3 외부 Security 파일 등록하기
_8.4 스프링 부트 프로젝트로 RDS 접근하기
__RDS 테이블 생성
__프로젝트 설정
__EC2 설정
_8.5 EC2에서 소셜 로그인하기

09장 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화
_9.1 CI & CD 소개
_9.2 Travis CI 연동하기
__Travis CI 웹 서비스 설정
__프로젝트 설정
_9.3 Travis CI와 AWS S3 연동하기
__AWS Key 발급
__Travis CI에 키 등록
__S3 버킷 생성
__.travis.yml 추가
_9.4 Travis CI와 AWS S3, CodeDeploy 연동하기
__EC2에 IAM 역할 추가하기
__CodeDeploy 에이전트 설치
__CodeDeploy를 위한 권한 생성
__CodeDeploy 생성
__Travis CI, S3, CodeDeploy 연동
_9.5 배포 자동화 구성
__deploy.sh 파일 추가
__.travis.yml 파일 수정
__appspec.yml 파일 수정
__실제 배포 과정 체험
_9.6 CodeDeploy 로그 확인

10장 24시간 365일 중단 없는 서비스를 만들자
_10.1 무중단 배포 소개
_10.2 엔진엑스 설치와 스프링 부트 연동하기
_10.3 무중단 배포 스크립트 만들기
__profile API 추가
__real1, real2 profile 생성
__엔진엑스 설정 수정
__배포 스크립트들 작성
_10.4 무중단 배포 테스트

11장 1인 개발 시 도움이 될 도구와 조언들
_11.1 추천 도구 소개
__댓글
__외부 서비스 연동
__방문자 분석
__CDN
__이메일 마케팅
_11.2 1인 개발 팁
_11.3 마무리


딱 자바 + 스프링부트를 쓰는 신입 백엔드 개발자 / 취준생이 공부하기 좋은 것들만 모아뒀다.

베스트셀러인 이유가 있다.

 

한 2주간 주말위주로 다시 공부했는데 역시 다시 보기 잘했다고 느꼈다.


😲 다시 짚고 넘어갈 것 📌

Chap 2 테스트코드
✅ TDD : 테스트 주도 개발

xeridia 제공

✅ 단위 테스트 코드
- 장점

  • 코드를 수정할 때마다 서버를 켰다 껐다할 필요 없음
  • System.out.println( ) 같은 검증 필요 없이 자동 검증
  • 새 기능 추가될시 기존 기능이 잘 작동되는지 보장
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RunWith(SpringRunner.class)        // Spring boot test와 JUnit 사이 연결자
@WebMvcTest(controllers = HelloController.class)     // Web 위주의 test임 선언 -> Controller만 테스트함
public class HelloControllerTest {
 
    @Autowired
    private MockMvc mvc;        // HTTP 요청, web API test에 사용
 
    @Test
    public void hello가_리턴됨() throws Exception {
        String hello = "hello";
 
        mvc.perform(get("/hello"))              // get 요청 검증
                .andExpect(status().isOk())                // http 요청 결과 상태 검증 -> 200 OK?
                .andExpect(content().string(hello));        // 요청 응답 내용 검증
    }
}
cs


- given-when-then

  • given : 준비 > Mock 객체 준비
  • when : 테스트 실행
  • then : 테스트 결과 검증


Chap 3 JPA
- JPA와 Spring Data JPA

  • JPA ← Hibernate ← Spring Data JPA

- Spirng Data JPA

  • 구현체 교체의 용이성
  • 저장소 교체의 용이성

- Service의 역할

  • 트랜잭션
  • 도메인관 순서 보장
  • 비즈니스 로직 처리
비즈니스 처리 담당은 Service가 아닌 Domain
Entity 클래스는 DB와 소통하는 핵심 클래스로 controller에서 사용할 dto와 역할 분리 필요
View Layer ↔ DB Layer


- 더티 체킹 (dirty checking)
: 영속성 컨텍스트 안의 엔티티를 대상으로 일어나는 변경 감지

💡 JPA EntityManager 활성화 상태로 트랜잭션 안에서 가져온 데이터는 영속성 컨텍스트가 유지된 상태
해당 데이터 값 변경하면 트랜잭션 끝나는 시점에 해당 테이블에 update

Entity 객체 값 변경시 별도의 Update 쿼리 요청 필요 없음

 

-JPA Auditing : Entity 생성시간, 수정시간 자동화 (상위 클래스)

 

1
2
3
4
5
6
7
8
9
10
11
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
 
    @CreatedDate
    private LocalDate createdDate;
 
    @LastModifiedDate
    private LocalDateTime modifiedDate;
}
cs

 

Chap 5 스프링 시큐리티 & OAuth2

- SecurityConfig : 스프링 시큐리티 설정 + OAuth2.0 설정 > http로 들어오는 요청 처리

- CustomOAuth2UserService : OAuth2 로그인 성공시 userService > customOAuth2UserService에서 기능하도록 연결

 

-@LoginUser : 어노테이션 클래스로 관리하며 중복되는 코드 제거

 

- LoginUserArgumentResolver : 조건에 맞는 경우 메소드가 있다면 파라미터로 넘김

  • supportsParameter : 들어온 파라미터를 resolver가 지원하는지 판단 t/f
  • resolveArgument : 파라미터에 전달할 객체 생성

- WebConfig : LoginUserArgumentResolver를 스프링에서 인식할 수 있도록 추가 설정

 

Chap 10 Nginx

-Nginx 구동 과정

1) 사용자가 서비스 주소로 접속 (80 / 443)

2) nginx는 사용자의 요청을 받아 현재 연결된 스프링 부트1로 요청 전달 (8081)

3) 스프링부트2는 nginx와 연결된 상태 X

4) 배포가 끝나고 스프링부트2가 아직 정상 구동 중이면 nginx reload 명령어를 통해 8082를 보게 함

5) 또 다시 배포가 필요하다면 스프링부트1로 배포

6) 배포가 끝났다면 nginx가 스프링부트1을 보게 변경하고 nginx reload 명령어 실행

7) 이후 요청부터 nginx가 스프링부트1로 요청 전달

 


이 책의 아쉬운 점이라면 상세 설명이 조금 부족하다는 점이다.

아예 스프링부트 + JPA + AWS 등이 처음인 사람에게는 추천하지 않고

조금이라도 접해본 초급자에게 추천한다.

반응형

댓글