전체 글

hoya

    @Transaction에 대하여

    스프링으로 프로젝트를 하면서 Service 관련 클래스를 작성할 때 빠짐없이 등장하는 어노테이션이 @Transaction입니다. 해당 어노테이션의 역할은 말 그대로 서비스 레이어에서 db에 접근할 때 트랙잭션 처리를 해주는 것입니다. 그렇다면 Transaction 어노테이션이 등장하게 된 배경과 어떠한 코드를 내부 로직으로 지니고 있을까요? Transaction Annotation 등장 배경 가장 흔하게 많이 사용하는 어플리케이션 구조는 다음과 같습니다. Controller (프레젠테이션 계층) - Service(서비스 계층) - Repository(데이터 접근 계층) - DB서버 위 계층 중에 가장 중요한 곳은 핵심 비즈니스 로직이 담겨있는 서비스 계층입니다. 시간이 지나면 컨트롤러와 관련된 UI 부분..

    Transaction(트랜잭션)이란

    DB 활용에 있어서 빠져서는 안될 주제가 트랜젹선이 아닐까 생각이 듭니다. 그만큼 DB를 활용하는데 있어서 꼭 알고 있어야 하는 필수 개념이 아닐까 합니다. 트랜잭션에 대해 알아보기 이전에 DB를 쓰는 이유는 뭘까요? 사실 데이터를 저장한다면 단순히 파일에 저장해도 되는데, 왜 굳이 데이터베이스에 저장하는 걸까요? 가장 대표적인 이유는 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문입니다! Transaction 트랜잭션의 사전적 정의는 다음과 같습니다. 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적인 단위로, 사용자가 시스템에 대한 요구 시 시스템이 응답하기 위한 상태변환 과정의 작업 단위이다. 트랜잭션은 커밋되거나 롤백된다. 간단하게 말해서 하나의 작업단위라고 생각하시면 ..

    스프링 검증 BindingResult에 대하여

    BindingResult 스프링 검증하면 뺴놓을 수 없는 것이 BindingResult입니다. BindingResult는 스프링이 제공하는 검증 오류를 보관하는 객체입니다. 또한 Erros 인터페이스를 상속합니다. BindingResult를 쓸 떄 주의점은 검증 대상인 @ModelAttribute 바로 뒤에 작성해야 하는 것입니다. @PostMapping("/add") public String addItemV6(@Validated @ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { if (bindingResult.hasErrors()) { log.info("er..

    스프링 빈 스코프란?

    빈 스코프란? 빈 스코프는 스프링 빈이 존재할 수 있는 범위를 뜻합니다. 기본적으로 싱글톤 타입으로 생성됩니다. 싱글톤 타입 말고도 프로토 타입과 같은 다양한 스코프들이 존재합니다. 각각의 스코프에 대해서 자세히 알아보도록 하겠습니다. 싱글톤 및 프로토타입 스코프 싱글톤 스코프는 빈에 대한 요청들이 오면 항상 같은 인스턴스의 스프링 빈을 반환합니다. 하지만 프로토 타입 스코프는 요청들이 오면 빈을 생성하고 필요한 의존관계를 주입한 뒤에 반환하고 더 이상 스프링 컨테이너가 관리하지 않습니다. 다시 말해서 각각의 요청마다 새로운 빈을 생성하고 반환한다는 뜻이됩니다. 여기서 잠깐 짚고 넘어가야 되는 부분은 스프링 컨테이너가 관리하지 않는다는 의미는 뭘까요? 자바 객체들을 관리하는 공간인 스프링 컨테이너는 개발..