전체 게시물 (200) 썸네일형 리스트형 [Spring] JdbcTemplate과 TransactionTemplate, 그리고 @Transactional 본 글은 다크모드에 최적화되어 있습니다. 스프링에는 데이터 접근 계층(Repository)에서 사용하는 JdbcTemplate과 서비스 계층(Service)에서 사용하는 TransactionTemplated 이 존재합니다. 특별한 기능을 제공하는 것은 아니고 템플릿 콜백 패턴을 사용하여 반복되는 코드를 제거해 줍니다. JdbcTemplate JdbcTemplate은 데이터 접근 계층에서 DB에 접근할 때 반복되는 코드를 제거해 줍니다. 반복되는 코드란 아래의 목록들을 말합니다. 커넥션 조회 및 동기화 PreparedStatement 생성 및 파라미터 바인딩 쿼리 실행 ResultSet으로 결과 바인딩 예외 발생 시 스프링 예외 변환기(DataAccessException) 실행 리소스 종료 위의 목록들 중.. [Spring] 트랜잭션 매니저 구현체를 bean으로 등록해야할까? 트랜잭션의 경우 서비스 계층의 비즈니스 로직에서 수행한다. 서비스 계층의 경우 트랜잭션 매니저(PlatformTransactionManager)를 사용하고 데이터 접근 계층에서는 트랜잭션 동기화 매니저(DataSourceUtils)를 사용한다. 데이터 접근 계층은 트랜잭션 동기화 매니저가 관리하는 커넥션을 꺼내어 사용하는데, 트랜잭션 동기화 매니저에 커넥션을 저장하는 것은 서비스 계층의 트랜잭션 매니저가 수행한다. 서비스 계층 서비스 계층에서 트랜션을 실행하여 커넥션을 만들고 이 커넥션을 트랜잭션 동기화 매니저에 저장시킨다. 스프링에서 사용하는 트랜잭션 매니저는 PlatformTransactionManager이다. 트랜잭션 매니저의 구현체로는 DataSourceTransactionManager, JpaT.. [Spring] 스프링 프레임워크 동작 과정, 서블릿, 핸들러, 어댑터, 뷰리졸버 김영한 님 MVC1 강의 정리본입니다. 전체 구조 1. 핸들러 매핑 정보 클라이언트(사용자)가 웹페이지에 접속을 하면 Front Controller가 해당 요청을 받는다. 가장 먼저 사용자가 접속한 URL을 처리할 수 있는 handler(핸들러)를 찾는다. 핸들러 매핑 정보에는 URL과 handler가 매핑되어 있다. 즉 URL 별로 handler가 여러 개 존재한다. ex) localhost:8080/front-controller/v5/v4/members/new-form로 접속하면 MemberFormControllerV4 핸들러가 해당 요청 URL을 처리하기 위해 사용된다. // 핸들러 매핑 정보를 담는 Map private final Map handlerMappingMap = new HashMap().. [JPA] Spring Data Jpa 쿼리문, ClassCastException 예외 jpa로 쿼리문을 작성하는데 자꾸 예외가 터졌는데 조금 헤맸다. 잘못된 쿼리문 Optional existsByBookNameAndUserIdAndIsReturn (String bookName, Long userId, boolean isReturn); 난 위의 쿼리문이 다음과 같은 SQL문을 기대했고 LoanHistory 객체가 반환될 것이라 생각했다. SELECT * FROM loan_history WHERE book_name = ? AND user_id = ? AND is_return = ? 근데 아래와 같이 ClassCastException 예외가 터졌다. Boolean 타입이 LoanHistory 타입으로 타입 변환이 안 된다고 한다. Spring Data Jpa에서 exists 쿼리문은 boole.. [JPA] Identity전략, JdbcSQLFeatureNotSupportedException jpa에서 기본키 전략을 사용할 때 아래 코드를 사용할 것이다 @GeneratedValue(strategy = GenerationType.IDENTITY) 근데 기본키 전략을 사용할 때 숫자형 타입을 사용해야 한다. String을 사용하지 말자 @Id @Column(name = "id", length = 10) @GeneratedValue(strategy = GenerationType.IDENTITY) private String id; 기본키로 String 타입을 지정했었는데 아래의 오류가 발생했다. ddl에 문제가 있음을 알 수 있다. 위의 오류에 대해서 검색해보니 기본키 전략을 사용할 때 숫자 타입 Long을 사용해야 한다고 한다. https://www.inflearn.com/questions/382.. [Spring, JAVA] LocalDateTime <-> Timestamp 변환 회원가입 할 때 회원 정보에 계정 생성 날짜를 넣기 위해 DB에는 Timestamp를 서버에는 LocalDateTime 형식을 사용하였다. Timestamp -> LocalDateTime Timestamp 클래스에 아래 메서드가 정의되어 있다. public LocalDateTime toLocalDateTime() { return LocalDateTime.of(getYear() + 1900, getMonth() + 1, getDate(), getHours(), getMinutes(), getSeconds(), getNanos()); } LocalDateTime -> Timestamp Timestamp 클래스에 아래 메서드가 정의되어 있다. public static Timestamp valueOf(Local.. [Spring] 메일 전송 1편, JavaMailSender 본 글은 스프링부트의 구글 smtp 설정 방법입니다. 1. 앱 비밀번호 생성 비밀번호를 기억하고 있어야 한다. 2번 사진을 보면 사용 방법에 비밀번호를 교체하라고 나오는데 절대로 교체해서는 안된다. 저거 따라 했다가 계속 오류 나서 시간만 날렸다. 생성된 비밀번호를 메모장이든 어디든 간에 저장하자. 2. 스프링부트 설정 application.properties에 다음 정보를 저장한다. 구글 이메일하고 앱 비밀번호만 본인의 것으로 수정하면 된다. 아래 정보를 입력하면 자동으로 JavaMailSender의 구현체인 JavaMailSenderImpl 클래스가 bean으로 등록된다. # JavaMailSender 자동으로 빈 등록 spring.mail.host=smtp.gmail.com spring.mail.p.. [Spring-Error] html 글자 깨짐, 메시지 국제화 연습 삼아 프로젝트를 만들어 보고 있는데 따로 메시지 파일(추후 국제화를 위한..)을 만들어서 html에 적용했는데 한글 적용이 안 됐다. 오류 발생 코드 @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages").. 이전 1 ··· 20 21 22 23 24 25 다음