본문 바로가기
프로그래밍/SpringBoot

스프링부트를 이용한 웹서비스 제작 따라하기(3) - 백엔드편

by mrvan 2019. 1. 30.

이 글은 jojoldu라는 개발자분이 만드신

3) 스프링부트로 웹 서비스 출시하기 - 3. SpringBoot & Handlebars로 화면 만들기를 따라하면서 생긴 궁금점을 적는 일기장입니다!



Handlebars(Handlebars.js)

자바스크립트의 템플릿 엔진 중하나이며, Mustache(수염)를 기반으로 구현한 템플릿 인자 - {{ }} Bracket을 이용하여 data를 표현하는 것을 의미한다. 이를 이용하면 html 페이지에서 HTML + Bracket의 구성으로 디자이너와 개발자가 협업할 때도 디자이너에게도 이해하기 쉬운구조로써 협업을 하는데도 도움이 된다.

1. 문법이 다른 템플릿엔진보다 간단하다.

2. 로직 코드를 사용할 수 없어 View의 역할과 서버의 역할을 명확하게 제한할 수 있다.

3, Handlebars.js와 Handlebars.java 2가지가 다 있어, 하나의 문법으로 클라이언트 템플릿/서버 템플릿을 모두 사용할 수 있다.

4. Handlebars의 기본 경로는 src/main/resources/templates이다.(prefix:src/main/resource/templates, suffix: .hbs)    


※build.gradle에 handlebars 의존성을 추가하고도 handlebars가 인식이 안된다면 프로젝트에 import가 안된 것이다. 이때는 수동으로 import를 실시하자(IDE마다 다름)


매핑 어노테이션

Spring 4.3 이후에는 @RequestMapping을 대체할 수 있는 어노테이션이 추가 되었다.

@GetMapping = @RequestMapping(value="/", method = RequestMethod.GET) 과 동일하다.


Controller와 Service의 역할 분리

비지니스 로직 & 트랜잭션 관리는 모두 Service에서 관리하고, View와 연동되는 부분은 Controller에서 담당하도록 구성한다.


트랜잭션

일반적으로 DB데이터를 등록/수정/삭제 하는 Service메소드는 @Transactional을 필수적으로 가져갑니다.

->해당 어노테이션(@Transactional)은 메소드내에 Exception이 발생하면 해당 메소드에서 이루어진 모든 DB작업을 초기화 한다.(모든 처리가 정상적으로 됐을때만 커밋을 진행)


1. 상세 설명 : 2개 이상의 쿼리를 하나의 커넥션으로 묶어 DB에 전송하고 이 과정에서 어떠한 에러가 발생할 경우 자동으로 모든 과정을 원래 상태로 돌려놓는다.(All or Nothing)

(1) 하나 이상의 쿼리에서 동일한 Connection 객체를 공유한다.

- java에서 DB로 연결할 때는 java.sql.Connection이란 객체를 이용하는데 이 Connection 객체에는 SetAutoCommit(자동커밋)이라는 메소드가 존재한다. 이 메서드와 연결된 autoCommit 객체는 true라는 기본값을 가지고 있으며 한번의 연결 이후 자동으로 커넥션을커밋해 종료시켜준다. 만약 트랜잭션을 이용하려면 이 자동커밋을 false로 바꾸고 수동커밋으로 변경해야만 한다.

이때, 스프링의 트랜잭션 기술을 사용하게 되면 다이나믹 프록시와 AOP라는 기술을 통해 세분화하여 트랜잭션을 컨트롤할 수 있게 한다. 어노테이션 기술로 @Transactional이 있다.


2. vs 프로시져 : 둘다 같은 맥락이긴 하지만 프로시져는 DB상에서 처리, 트랜잭션은 Java상에서 처리 


출처 : http://springmvc.egloos.com/495798