김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. MyBatis 소개 MyBatis는 더 많은 기능을 제공하는 SQL Mapper 이다. MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다는 점이다. 비교 SQL 여러줄 동적 쿼리 MyBatis 설정 build.grad...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 테스트 - 데이터베이스 연동 테스트 케이스는 src/test 에 있기 때문에, 실행하면 src/test 에 있는 application.properties 파일이 우선순위를 가지고 실행된다. 테스트 케이스에서도 데이터베이스에 접속할 수 있게 test의 application.properties 의 ...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. JdbcTemplate 소개와 설정 장점 JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있는데, 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 그리고 별도의 복잡한 설정 없이 바로 사용할 수 있다. JdbcTemplate은 템플릿 콜백 패턴...
김영한님의 스프링 DB 2편 을 공부하여 정리한 글입니다. 데이터 접근 기술 소개 SQLMapper JdbcTemplate MyBatis SQL Mapper 주요기능 개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다. JDBC를 직접 사용할 때 발생하는 여러가지 중복을 제거해주고, 기타 개발자에게 여러가지 편리한 기능을 제공한...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 런타임 예외 적용 Interface Exception Repositoty Service 데이터 접근 예외 직접 만들기 데이터베이스 오류 코드 서비스 계층에서는 예외 복구를 위해 키 중복 오류를 확인할 수 있어야 한다. MyDuplicateKeyException Test Reposi...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 예외 계층 Throwable : 최상위 예외이다. 하위에 Exception 과 Error 가 있다. Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. Exception : 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 지금까지의 문제점들 애플리케이션 구조 프레젠테이션 계층 UI와 관련된 처리 담당 웹 요청과 응답 사용자 요청을 검증 주 사용 기술: 서블릿과 HTTP 같은 웹 기술, 스프링 MVC 서비스 계층 비즈니스 로직을 담당 주 사용 기술: 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 트랜잭션 - 개념 이해 데이터를 저장할 때 데이터베이스에 저장하는 이유는 무엇일까? 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. 커넥션 풀 이해 데이터베이스 커넥션을 매번 획득 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 소모되는 일이다. 고객이 애플리케이션을 사용할 때, SQL을 실행하는 시간 뿐만 아니라 커넥션을 새로 만드는 시간이 추가되기 때문에 결과적으로 응답 속도에 영향을 준다. 이것은 사용자에게...
김영한님의 스프링 DB 1편 을 공부하여 정리한 글입니다. JDBC 이해 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. DB 변경시 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다.
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 파일 업로드 소개 HTML Form을 통한 파일 업로드를 이해하려면 먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 한다. HTML 폼 전송 방식 application/x-www-form-urlencoded multipart/form-data application/x-www-form...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 스프링 타입 컨버터 소개 Controller HTTP 요청 파라미터는 모두 문자로 처리 숫자 타입으로 변환하는 과정을 거쳐야한다. @RequestParam 을 사용하면 스프링이 중간에서 타입을 변환해준다. 타입 컨버터 - Converter 타입 컨버터를 사용하려면 org.springfra...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. API 예외 처리 - 시작 HTML 페이지의 경우는 오류페이지만 있다면 대부분 문제를 해결할 수 있다. API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. ApiExceptionController API를 요청하면, 정상의 경우 API로 JSON ...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 서블릿 예외 처리 - 시작 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception(예외) 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main 이라는 이름의 쓰레드가 ...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 서블릿 필터 - 소개 로그인을 하지않아도 직접 URL을 치면 접근할수 있다. 컨트롤러에 로그인 여부를 하나하나 작성할 수있지만 코드를 수정해야 할 경우 너무 귀찮아진다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사(cross-cutting concern) 라고 한...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 회원 가입 Member MemberRepository Controller 로그인 기능 LoginService LoginForm Controller 로그인 처리하기 - 쿠키 사용 로그인을 유지하기 위해 쿠키를 사용한다. 쿠키 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 ...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. Bean Validation - 시작 Bean Validation 애노테이션 적용 @NotBlank : 빈값 + 공백만 있는 경우를 허용하지 않는다. @NotNull : null 을 허용하지 않는다. @Range(min = 1000, max = 1000000) : 범위 안의 값이어야 한다. @...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 검증 직접 처리 - 개발 Controller Form 글로벌 오류 메세지 Safe Navigation Operator errors?. 은 errors 가 null 일때 NullPointerException 이 발생하는 대신, null 을 반환하는 문법이다. th:if 에서 null 은 실패...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 스프링 메시지 소스 사용 메시지가 없는 경우에는 NoSuchMessageException 이 발생한다. 메시지가 없어도 기본 메시지( defaultMessage )를 사용하면 기본 메시지가 반환된다. Locale 에 맞추어 구체적인 것이 있으면 구체적인 것을 찾고, 없으면 디폴트를 찾는다. ...
김영한님의 스프링 MVC 2편 을 공부하여 정리한 글입니다. 입력 폼 처리 th:object 에서 사용할 객체를 지정한다. 선택 변수 식( *{ } )을 적용할 수 있다. th:field="*{ }" th:field 는 id , name , value 속성을 모두 자동으로 만들어준다. ${item.itemName} 은 *{itmeName}과 같다. ...