우아한 형제들 개발자 이동욱씨가 출간한 " 스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 바탕으로
혼자서 간단한 서비스 플랫폼을 구현해보기로 마음을 먹었다
이 책을 바탕으로 하는 만큼 기초적인 프로젝트이지만 차츰 스프링에 대한 실력이 늘수록 프로젝트를 리뉴얼하고 업그레이드 하여 좋은 결과물을 만들고 싶다.
이 책을 중간까지 읽은 지금 이 책에 대한 전반적인 느낌은 웹 개발 초보자의 입장에서 기초적인 지식까지 알려주는 초보자가 읽기에는 너무 좋은 책이라고 생각된다. 또한 회사에서 배운 Mybatis가 아닌 ORM 방식의 JPA를 알려준다
이는 이 책을 읽을수록 더욱 빠져드는 이유로도 작용한다. 대부분의 대기업에서 Mybatis가 아닌 JPA를 사용하고있어 JPA는 어떤식으로 구현되는지 궁금했었고 Maven 방식이 아닌 Gradle 방식으로 프로젝트를 빌드하기 때문에 좋은 배움의 기회가 되는 책이라고 생각된다.
build.gradle 파일이다
Maven과 다르지만 충분히 쉽게 이해가 되는 코드이다 특히나 dependencies에 라이브러리들의 버전을 안써줘도 된다는점에서 Maven보다 오히려 더 편한 느낌이 있다고 생각한다.
Entity이다.
테이블과 링크될 클래스임을 나타내고 클래스의 카멜케이스 이름을 언더스코어 네이밍으로 테이블이름을 매칭시킨다.
DB와 직접적으로 연관있는 곳이라서 JPA의 핵심인 곳이라고 생각한다.
DB와 매핑시킬 class 위에 @Entity라는 어노테이션을 사용한다.
테이블을 조회하는 select문이다
@Query 어노테이션을 통해 DB와 매핑시키고 쿼리 실행문을 작성하고 그 밑에 메소드와 타입을 쓴다
페이지를 관리하는 Controller이다
@Controller 어노테이션을 사용해서 컨트롤러 기능을 할 수 있게끔 한다.
@GetMapping을 통해서 url과 매칭을 시켜준다
서비스를 통해서 기존에 선언했던 select문 메서드를 호출해준다
@RestController
동적인 요청을 할때 쓰는 컨트롤러로써 ajax통신이나 api를 구현할때 많이 쓰인다
자바 1.8부터 지원하는 LocalDateTime을 통해 함수가 실행될때 즉각적으로 시간을 주입하는 클래스이다 이렇게 따로 클래스를 선언하는 이유는 다양한 Entity에서 사용할 수 있게끔 하기 위해서이다
특히나 @mapperSuperclass는 JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들 (createdDate,modifiedDate)도 칼럼으로 인식하도록 하는 중요한 어노테이션이다.
서비스단 코드이다
@RequiredArgsConstructor로 final이 붙은 모든 필드 값에 bean을 주입한다
@Transactional 어노테이션을 통해서 트랜잭션 처리를 하는데 이 어노테이션을 사용하는 이유는 말로 설명하기 힘들지만 간단히 말해서 데이터 베이스의 기본원칙들인 일관성,원자성,고립성,지속성들을 지켜주기 위해서 사용한다 또한 트랜잭션 어노테이션을 사용하지 않는다면 데이터를 트랜잭션하는 중간 처리 과정에서 데이터의 일관성이 깨져버리고 롤백해야 되는 경우가 발생하기 때문에 이 어노테이션을 선언해서 문제를 해결한다. 참 스프링 개발자는 대단한거 같다
DB에 게시글 등록 실행화면이다
게시판 글 조회하는 화면이다
종합적으로 배울게 참 많고 좋은 책이라고 느껴지면서 아직 절반도 못했기 때문에 앞으로의 내용들과 결과물들이 궁금하고 추가적으로 글을 더 작성할 계획이다.
소감
처음 써보는 블로그 글이기때문에 읽는사람 입장에서 읽기 힘들거라고 생각하며 조금 더 글 연습을 열심히 해서 좋은 글을 많이 써보고 싶다 이상 다음 스프링 부트로 시작하는 웹 서비스 #2를 기대해 본다.