[책 읽기]

 블로그 - 기억보다 기록을

 깃허브 - http://bit.ly/fr-springboot

 


 * 이 책에서 개선하려고 한 포인트

* 코드
 - DB에 들어갈 date 필드 처리방식
 - Setter 메서드로 도배된 Entity 클래스들
 - @Autowired로 도배된 Spring DI 코드
 - System.out.println()으로 이루어진 테스트 코드

* 운영 환경
 - 배포된 서버와의 DB연결
 - 배포 서버의 리눅스 기본 설정
 - DB의 여러 설정들
 - 직접 CI/CI 환경을 구축하는 방법
 - 무중단 서비스를 위한 배포 방법
 - Nginx의 설치 및 설정
 - AWS RDS 필수 설정
 - AWS EC2의 Security Group, EIP 등 기본설정
 - Travis CI의 기본 설정

 


  • 따로 알아봐야 할 내용들
    • Eclipse와 intelliJ 중 Java 개발에 더 좋은 것에 대한 의견
    • IntelliJ 사용방법 및 단축키
    • mavenCentral, jcenter
    • 빌드 도구, Gradle, maven 차이점
    • TDD, DDD
    • lombok
    • assertJ
    • ORM, SQL Mapper 구분
    • JPA dirty Checking
    • JPA Auditing, JDK 8 이전의 Date와 Calendar 클래스의 문제점, 그리고 개선된 LocalDate
    • JPA, Hibernate, Spring Data JPA의 관계
    • Spring Data Jpa를 이용하여 관계형 데이터베이스를 객체지향적으로 관리하는 방법
    • 서버 템플릿 엔진과 클라이언트 템플릿 엔진
    • 서버 사이드 렌더링, 클라이언트 사이드 렌더링
    • 템플릿 엔진 종류 및 차이점
    • 스프링 부트 및 모듈 사용 시 기본 폴더 경로
    • CDN

 


 * 정리본

2020/05/27 - [Edu/SpringBoot] - [SpringBoot] IntelliJ에서 SpringBoot시작하기

2020/05/27 - [Edu/SpringBoot] - [SpringBoot] UnitTest 환경 만들기

2020/05/28 - [Edu/SpringBoot] - [SpringBoot] lombok 설정 및 테스트

2020/05/28 - [Edu/SpringBoot] - [SpringBoot] Spring Data JPA 설정

2020/05/28 - [Edu/SpringBoot] - [SpringBoot] 설정파일 yaml로 변경하기

2020/05/28 - [Edu/SpringBoot] - [SpringBoot] Posts API 만들기

2020/05/28 - [Edu/SpringBoot] - [SpringBoot] JPA Auditing

2020/05/28 - [Edu/SpringBoot] - [SpringBoot] Mustache

2020/05/29 - [Edu/SpringBoot] - [SpringBoot] 게시글 등록

2020/05/29 - [Edu/SpringBoot] - [SpringBoot] 게시글 전체 조회

2020/05/29 - [Edu/SpringBoot] - [SpringBoot] 게시글 수정

2020/05/29 - [Edu/SpringBoot] - [SpringBoot] 게시글 삭제

2020/05/31 - [Edu/SpringBoot] - [SpringBoot] Spring Security & OAuth 2.0 로그인

2020/05/31 - [Edu/SpringBoot] - [SpringBoot] OAuth2 Google Login

2020/05/31 - [Edu/SpringBoot] - [SpringBoot] 로그인 & 포스팅 권한 테스트

2020/05/31 - [Edu/SpringBoot] - [SpringBoot] 어노테이션 기반 세션 처리 ArgumentResolver

2020/06/01 - [Edu/SpringBoot] - [SpringBoot] 세션 저장소로 DB이용하기

2020/06/01 - [Edu/SpringBoot] - [SpringBoot] OAuth2 Naver Login

2020/06/02 - [Edu/SpringBoot] - [SpringBoot] 기존 테스트에 시큐리티 적용

 


 

 * 정오표를 통해 책에 의도대로 따라가기

Git 정오표

 

 * 이 책은 JDK 1.8Gradle 4.8을 기준으로 작성되었다는 것을 확인 해야 함

 * 내 프로젝트 생성 시 환경을 맞추고 시작해야 책에서 의도한 대로 따라갈 수 있음

 * 책 대로 했는데 안되면 "나는 이길이 아닌가보다" 라는 생각을 갖게 됨..

 * 서비스 로직 구현할 때 dto -> Service -> Controller 순으로 따라하는게 이해가 쉬움

 

p.71 lombok Issue

intelliJ 설치 시 Gradle 5버전으로 사용되고 있어서 Gradle 4다운드레이드 필요

 

[Gradle 버전 확인하기 gradle-wrapper.properties]

 

Gradle 이슈 대처 방법

 

요약: 현재 프로젝트의 Terminal을 열어 아래 명령어를 복사해서 붙이면 Gradle 다운그레이드할 수 있음

gradlew wrapper --gradle-version 4.10.2

 

p.100 PostsApiController.save() Test Issue

save메서드를 보면 @putMapping(...)라고 되어 있는데 내용을 보면 Post 내용이기 때문에 @PostMapping으로 변경

 

 

 

 

 

p.111 PostsApiController.update() 취소 기능 Issue

PostsUpdateRequestDto 클래스 작성

 

 

 

 

 

Posts 클래스 내에 update() 작성

 

 

 

 

 

p.176 .ignore 파일에 application-oauth.properties 제외 했는데도 commit 할 때 계속 뜨는 경우

application-oauth.properties 파일이 이미 tracked 되고 있는 상태에서
.ignore 파일을 업데이트 할 경우 제대로 적용이 안되고
commit할 때 계속 나오는 경우가 존재한다.
해결책은 캐시를 비워 .ignore 파일이 제대로 적용되도록 한다.

 

 

 

 

 

p.194 권한 변경 후 글 등록 시

1. Application 실행
2. OAuth를 이용하여 구글 로그인 ( h2에 데이터가 들어가는 시점 )
3. h2-console에서 권한 수정 udate usr set rold = "USER"; ( 이때 세션에는 아직 GUEST로 저장되어 있음 )
4. 세션 정보를 최신화 시키기 위해서 로그아웃 후 다시 로그인해서 게시글 등록 시도

 

p.326 Travis CI .travis.yml 설정 후 build 이슈

./gradlew: Permission denied git에 permission을 업데이트 해줘야 travis가 실행할 수 있다.

 

 

 

 

 

.travis.yml에 before_install을 추가하여 permission을 바꾸는 방법

 

 

 

 

 

Git update를 통해 직접 permission을 바꾸는 방법

 

 

 

 

 

p. 338 S3 region 확인

AWS S3 대시보드 -> 생성한 bucket 클릭 -> 속성 -> 정적 웹 사이트 호스팅 클릭 시 엔드 포인트에서 확인 가능

 

p. 394 무중단 배포 테스트 후 게시물 등록 테스트

오류가 당연한 것이 security에서 처음 로그인한 상태가 GUEST이기 때문이다. USER로 변경 해줘야 게시물 등록을 할 수 있다.

 

 


[구현 설계]

  • @GetMapping("/") String index(Model model, @LoginUser SessionUser user)

String index(Model model, @LoginUser SessionUser user)

  • @PostMapping("/api/v1/posts") Long save(PostsSaveRequstDto)

Long save(PostsSaveRequstDto)

  • @GetMapping("/api/v1/posts/{id}") PostsResponseDto findById(Long id)

PostsResponseDto findById(Long id)

  • @PutMapping("/api/v1/posts/{id}") Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto requestDto)

Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto requestDto)

 

  • @DeleteMapping("/api/v1/posts/{id}") Long delete(@PathVariable Long id)

Long delete(@PathVariable Long id)

 

'' 카테고리의 다른 글

[책] 자바 성능 튜닝 이야기  (0) 2019.07.07

+ Recent posts