@ResponseBody를 controller에 붙여주면 뷰 리졸버( viewResolver )를 통해 뷰 템플릿을 반환하는 것이 아니라 HTTP의 BODY에 문자 내용을 직접 반환할 수 있다.html의 body tag가 아니라 http의 body 부분이라는 점에 주의
스프링 데이터 JPA 주요 기능 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리다. 'JpaRepository' 인터페이스를 통해서 기본적인 CRUD 기능을 제공하며 공통화가 가능한 기능을 모두 포함하고 있다. 다양한 기능을 제공하지만
📝 JPA(Java Persistence API) > 자바 진영의 ORM 기술 표준이다. 그렇다면 ORM이란 무엇일까? Object-relational mapping(객체 관계 매핑)의 줄임말인데 객체는 객체대로 설계하고 관계형 데이터베이스는 따로 설계하는 것을 말한
위의 자바 예외 계층 그림을 보면 가장 최상위에는 Object가 있다. 여기서 중요한 점은 예외도 객체이기 때문에 예외의 최상위 부모도 'Object'다.예외 중에서 가장 최상위 예외는 Throwable이고 그 하위에 'Exception'과 'Error'가 있다. 'E
🎉 트랜잭션 템플릿 그 전에는 트랜잭션 템플릿을 사용했다. 트랜잭션 템플릿을 사용해서 반복되는 트랜잭션 관련 코드를 줄일 수 있었고 코드가 보다 간결하고 효율적이게 바뀌는 것을 확인할 수 있었다. 트랜잭션 템플릿 사용 코드 하지만 이 코드에서도 개선해야할 문제점
📒 트랜잭션 템플릿 적용 웹 애플리케이션을 만들다보면 트랜잭션을 시작하고 비즈니스 로직을 실행한다. 그리고 제대로 실행된다면 커밋하고 예외가 발생해서 실패하면 롤백하는 동일한 과정을 만들게 되는데 동일하게 반복되는 코드를 매번 작성하는 것은 상당히 비효율적이라고 할
스프링이 제공하는 'PlatformTransactionManager'는 크게 두가지 역할을 한다. 첫번째는 트랜잭션을 추상화하는 것이고 그 다음으로는 리소스를 동기화하는 것이다.리소스 동기화트랜잭션을 유지하려면 트랜잭션이 시작될 때부터 끝까지 같은 데이터베이스의 커넥션
DB 락 기본 개념개발자A가 트랜잭션을 시작하고 데이터를 수정하고 있다고 가정한다. A가 열심히 데이터를 수정하고 있고 아직 커밋은 하지 않은 상태다. 여기서 개발자 A의 수정사항을 알지 못하는 개발자 B가 동일한 데이터를 수정한다. 이런 상황이 발생하면 서로 엉뚱한
Transaction 데이터베이스에서 데이터를 제대로 처리하는 것을 트랜잭션이라고 한다. 만약 A가 B에게 5000원을 계좌이체한다고 한다면 A의 통장 잔고에서 5000원이 감소하고 B의 통장 잔고가 5000원 증가하는 과정이 데이터베이스에서 정확하게 발생해야 하는 것
🎨 Validation을 사용한 유효성 검증 > javax.validation.constraints 패키지에 있는 검증 어노테이션을 사용해서 객체 값에 대한 유효성 검증을 해보려고 한다. 🎨 build.gradle > build.gradle에 spring-bo
MyBatis는 JdbcTemplate이 제공하는 대부분의 기능을 제공한다.SQL을 XML에 편리하게 작성할 수 있고 동적쿼리 사용이 수월하다는 장점이 있다.
이전 글에서는 트랜잭션과 롤백을 사용해서 매번 테스트 할 때 쌓이는 데이터를 초기화 하는 방법에 대해 정리했다. 이번에는 스프링이 제공하는 @Transactional 어노테이션을 사용해서 보다 간편하게 트랜잭션과 트랜잭션 롤백을 하는 과정을 살펴본다.
테스트 환경에서 데이터베이스에 남아있는 데이터를 깔끔하게 제거하고 매번 새롭게 테스트를 실행하기 위해서는 트랜잭션을 롤백하면된다.트랜잭션 시작 -> 테스트 실행 -> 트랜잭션 롤백의 순서로 실행한다.
JdbcTemplate의 주요 기능 🎨 JdbcTemplate > 순서 기반 파라미터 바인딩 지원 🎨 NamedParameterJdbcTemplate > 이름 기반 파라미터 바인딩을 지원하기 때문에 순서상관 없이 이름만 동일하면 된다. 🎨 SimpleJdb
DTO(Data Transfer Object)데이터 전송 객체를 말한다. 다른 기능은 없으며 데이터를 전달하는 용도로만 사용하는 객체를 뜻한다.
데이터베이스 커넥션 획득하기 > 데이터베이스 커넥션을 획득할때는 위와 같은 과정을 거치는데 매우 복잡하다. 이렇게 커넥션을 매번 생성하면 클라이언트에서 요청이올 때 SQL을 실행하는 시간 뿐만 아니라 커넥션을 새로 만드는 시간까지 더해져서 응답 속도에 많은 영향을 미
생성자 주입수정자 주입(Setter)필드 주입일반 메서드 주입생성자 호출 시점에 딱 1번만 호출되며 반드시 값이 할당되어야 하고 할당된 값이 변경되어서는 안되는 경우에 사용한다.스프링 빈에 OrderServiceImpl이 등록될 때 @Autowired가 붙은 생성자를
무상태(stateless)로 설계싱글톤 패턴이나 스프링의 싱글톤 컨테이너를 사용하는 방식으로 설계할 때는 주의해야할 점이 있다. 하나의 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하지 않게 무상태(stateless)로 설계해야 한다.공유