전체 글 (96) 썸네일형 리스트형 스프링 DB 1편 - 데이터 접근 핵심 원리 (6) 체크 예외와 인터페이스 서비스 계층은 가급적 특정 구현 기술에 의존하지 않고, 순수하게 유지하는 것이 좋다. 이렇게 하려면 예외에 대한 의존도 함께 해결해야 한다. 서비스가 처리할 수 없는 SQLException에 대한 의존을 제거하려면?? -> 리포지토리가 던지는 SQLException 체크 예외를 런타임 예외로 전환해서 서비스 계층에 던진다. 인터페이스 도입 MemberRepository 인터페이스를 도입해서 MemberService가 MemberRepository 인터페이스에만 의존하게 한다. 이렇게 하면 DI를 사용해서 MemberService 코드의 변경 없이 구현 기술을 변경할 수 있다. package hello.jdbc.repository; import hello.jdbc.domain.Mem.. 스프링 DB 1편 - 데이터 접근 핵심 원리 (5) 예외 계층 Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object이므로 예외의 최상위 부모도 Object이다. Throwable : 최상위 예외 이다. Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 애플리케이션 로직에서는 Throwable 예외도 잡으면 안되는데, Error 예외도 함께 잡을 수 있기 때문이다. 애플리케이션 로직은 이런 이유로 Exception 부터 필요한 예외로 생각하고 잡으면 된다. Exception : 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. Exception 과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다.. 스프링 DB 1편 - 데이터 접근 핵심 원리 (4) 트랜잭션 문제점들 여러가지 애플리케이션 구조가 있지만, 가장 단순하면서 많이 사용하는 방법은 역할에 따라 3가지 계층으로 나누는 것이다. 프레젠테이션 계층 UI와 관련된 처리 담당 웹 요청과 응답 사용자 요청을 검증 사용 기술: 서블릿과 HTTP 같은 웹 기술 서비스 계층 비즈니스 로직을 담당 사용 기술: 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이터 접근 계층 실제 데이터베이스에 접근하는 코드 주 사용 기술: JDBC, JPA 순수한 서비스 계층 여기서 가장 중요한 계층은 핵심 비즈니스 로직이 들어있는 서비스 계층이다. 시간이 흘러서 UI와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경해도, 비즈니스 로직은 최대한 변경없이 유지되어야 한다. 이렇게 하려면 서비스 계층을.. 스프링 DB 1편 - 데이터 접근 핵심 원리 (3) 트랜잭션 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 예를들어 계좌이체라는 거래는 2가지 작업이 합쳐져서 하나의 작업처럼 동작해야 한다. 1.A의 잔고를 10000원 감소 2.B의 잔고를 10000원 증가 시킨다면 데이터베이스가 제공하는 트랙잭션을 기능을 사용한다면 1,2 둘다 함께 성공해야 저장하고 중간에 하나라도 실패하면 거래 전의 상태로 돌아갈 수 있다. 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 커밋(commit) 이라 하고, 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것을 롤백(Rollback) 이라 한다. 트랜잭션 ACID 트랜잭션은 ACID라 하는 원자성, 일관성, 격리성, 지속성을 보장해야 한다. 원자성: 트랜잭션 내에서 실행한 작업들은 마치 하.. 스프링 DB 1편 - 데이터 접근 핵심 원리 (2) 커넥션풀과 데이터소스 이해 커넥션 풀 이해 데이터베이스 커넥션을 획득할 때는 복잡한 과정을 거친다. 1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID,PW와 기타 부가정보를 DB에 전달한다. 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. 5. DB는 커넥션 생성이 완료 되었다는 응답을 보낸다. 6. DB 드라이버 커넥션 객체를 생성해서 클라이언트에 반환한다. 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모되는 일이다. 이런 문제를 해결하기 위해 커넥션 풀이라는 방법이 있다. 커넥션풀은 커넥션을 관리하는 풀이다. 애플리케이.. 스프링 DB 1편 - 데이터 접근 핵심 원리 (1) JDBC 이해 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 이러한 방법은 2가지 큰 문제가 있다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함께 변경해야한다. 2. 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로.. 이클립스에서 Gradle 프로젝트 셋팅 이클립스에서 그레이들 환경을 셋팅해봤다 이클립스 상단 Help -> Eclipse Marketplace 클릭 File -> New -> Other Gradle -> Gradle Project 최초 생성 화면 show the welcome.... 은 체크 해제 프로젝트가 생성되었다. Gradle 이란? 나는 회사에서 일할때는 maven 만 사용해서 gradle은 사용해본적이 없었다. 하지만 공부할때 인강을 들으면서 gradle을 사용하는데 maven과 gradle 차이도 궁금하고 왜 gradle을 사용하는지 알고 싶어 gradle에 대해 검색해봤다. Gradle 이란? Groovy 기반의 오픈소스 빌드 자동화 툴 Ant -> Maven -> Gradle 순으로 발달 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구 xml의 구조적 틀을 벗어나 코딩에 의한 간결한 정의 가능 프로젝트를 설정 주입 방식으로 정의 Ant XML 기반으로 작성한다. 생명주기를 갖지 않아 각각의 결과물에 대한 의존관계 등을 정의해야한다. 간단하고 사용하기 쉽다 Maven XML 기반으로 작.. 이전 1 ··· 4 5 6 7 8 9 10 ··· 12 다음