스프링 18

[Spring DB2] 데이터 접근 기술 - 스프링 데이터 JPA

스프링 데이터 JPA 주요 기능 공통 인터페이스 기능 JPARepository 인터페이스를 통해서 기본적인 CRUD 기능을 제공 공통화 가능한 기능이 거의 모두 포함되어 있음. 쿼리 메서드 기능 인터페이스에 메서드만 적어두면, 메서드 이름을 분석해서 필요한 JPQL을 만들고 실행해준다. JPQL은 JPA가 SQL로 번역해서 실행한다. 규칙 조회 : find..By, read..By, query..By, get..By ex) findByUsernameAndAgeGreaterThan(String username, int age) COUNT: count..By / 반환 타입은 long EXIST: exists..By / 반환 타입은 boolean 삭제 : delete.. By, remove..By / 반환 타..

Spring 2024.03.21

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 6. 스프링과 문제 해결 - 예외 처리, 반복

체크 예외와 인터페이스 서비스 계층은 가급적 다른 구현 기술에 의존하지 않고 순수한 비즈니스 코드만 존재하는 것이 좋으므로, 예외에 대한 의존도 해결해야 한다. SQLException 같은 체크 예외를 런타임 예외로 전환해서 서비스 계층으로 던지면, 서비스 계층이 이 예외를 무시할 수 있어서 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있다. MemberRepository라는 인터페이스를 도입해서 구현 기술을 쉽게 변경할 수 있게 해야한다. MemberRepository 인터페이스를 도입하여 JdbcMemberRepository나 JpaMemberRepository라는 구현 클래스를 만들어서 사용하고, MemberService에서는 MemberRepository 인터페이스..

Spring 2024.03.09

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 4. 스프링과 문제 해결 - 트랜잭션 - 2

MemberRepository의 코드 수정 (V3) 파라미터로 커넥션을 넘기는 부분을 모두 지우고 private void close(Connection con, Statement stmt, ResultSet rs) { JdbcUtils.closeResultSet(rs); JdbcUtils.closeStatement(stmt); //트랜잭션 동기화를 사용하려면 DataSourceUtils를 사용해야함. DataSourceUtils.releaseConnection(con, dataSource); } private Connection getConnection() throws SQLException { Connection con = DataSourceUtils.getConnection(dataSource); l..

Spring 2024.02.29

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 3. 트랜잭션 이해

트랜잭션 개념 데이터를 데이터베이스에 저장하는 이유는 트랜잭션 때문이다. 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해준다. 계좌 이체에서 A가 B에게 2000원을 보낸다고 했을 때, 두가지 일이 수행되어야 한다. 하나는 A의 잔고가 2000원 줄어드는 것. 또 하나는 B의 잔고가 2000원이 증가하는 것이다. 하지만, 만약 A의 잔고가 2000원 줄어들고, 오류가 나서 B의 잔고가 증가하지 않는다면 심각한 문제가 발생한다. 그래서 이때는 모든 일이 성공적으로 수행되면 커밋, 하나라도 실패하면 롤백되도록 해야한다. 트랜잭션 ACID Atomicity: 원자성. 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다. Consistency: 일관성. 모든 트랜잭션은 ..

Spring 2024.02.27

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 2. 커넥션 풀과 데이터소스 이해

커넥션 풀 이해 데이터베이스 커넥션을 획득할 때 애플리케이션 로직은 DB 드라이버를 통해 커넥션 조회 DB 드라이버는 DB와 TCP/IP 커넥션을 연결. 이 과정에서 TCP/IP 연결을 위한 네트워크 동작이 발생 DB 드라이버는 TCP/IP 커넥션이 연결되면 ID와 PW와 기타 부가 정보를 DB에 전달 DB는 ID와 PW를 통해 내부 인증하고, 내부에 DB 세션을 생성 DB는 커넥션 생성이 완료되었다는 응답을 전송 DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환 이렇게 하면 DB와 애플리케이션 서버는 커넥션을 생성하기 위한 리소스를 매번 사용해야하고, 복잡하고, 시간이 많이 든다. 그래서 커넥션을 미리 생성해두고, 사용하는 커넥션 풀이라는 방법을 사용한다. 애플리케이션을 시작하는 시점에 필요한 ..

Spring 2024.02.23

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 1.JDBC 이해

JDBC의 등장 이유 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법이 모두 달라서 원래 사용하면 데이터베이스 기술에서 다른 기술로 변경하면 데이터베이스 사용 코드도 함께 변경해야하고, 개발자도 각각의 데이터베이스 기술을 새로 학습하여야 한다. -> JDBC라는 자바 표준이 등장. JDBC는 자바에서 데이터 베이스에 접속할 수 있도록 하는 자바 API이다. java.sql.Connection(연결), java.sql.Statement(SQL을 담은 내용), java.sql.ResultSet(SQL 요청 응답)의 인터페이스를 정의해두었고, 각각의 DB 회사에서 자신의 DB에 맞도록 구현해서 라이브러리로 제공한다. (MySQL JDBC 드라이버, Oracel JDBC ..

Spring 2024.02.20

스프링으로 예외처리와 반복 문제 해결

서비스 계층은 특정 기술에 의존하지 않고, 순수하게 유지하는 것이 좋은데 그러려면 예외에 대한 의존도 해결해야 한다. 서비스 계층에서 처리할 수 없는 예외에 대한 의존을 제거하려면 체크 예외를 런타임 예외로 전환해서 서비스 계층에 던져야 한다. 그러면 서비스 계층에서 무시할 수 있기 때문에, 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있다. 인터페이스 인터페이스를 도입해서 구현 기술의 버전이 바뀌면 쉽게 변경할 수 있도록 할 수 있다. 하지만 인터페이스 구현체가 체크 예외를 던지려면, 인터페이스 메서드에 먼저 체크 예외를 던지는 부분이 있어야 한다. 인터페이스가 특정 구현 기술에 종속적인 체크 예외를 사용하게 되면 순수한 인터페이스를 만들 수 없다. 인터페이스를 만드는 ..

Spring 2024.02.19

자바의 예외

Object: 예외도 객체. 모든 객체의 최상의 부모는 Object이다. Throwable: 최상위 예외. Error 메모리 부족, 스택오버플로우 JVM이나 하드웨어 등 시스템의 문제로 발생하는 것. 애플리케이션 내 코드로 해결할 수 없다. 상위 예외를 catch로 잡으면 그 하위 예외까지 잡는다. 따라서 상위 예외인 Throwable도 잡으면 Error도 함께 잡을 수 있기 때문에 잡으면 안된다. Exception부터 필요한 예외라고 생각하고 잡으면 된다. Exception 사용자의 잘못된 조작이나 개발자의 코딩 로직 실수로 인해 발생하는 프로그램 오류 예외처리 코드를 통해 프로그램을 종료하지 않고 다시 정상 실행상태가 되도록 할 수 있다. Checked Exception과 Unchecked Excep..

Java 2024.02.14

스프링으로 트랜잭션 문제 해결

프레젠테이션 계층(컨트롤러), 서비스 계층, 데이터베이스 접근 계층 중 가장 중요한 것은 비즈니스 로직을 담고 있는 서비스 계층이다. 서비스 계층은 가능한 순수한 자바 언어로 이루어져 변경이 자주 일어나지 않도록 해야 한다. 하지만 트랜잭션에서 배우고 실습했던 코드들은 SQLException과 같은 JDBC에 속하는 오류를 담고 있고, MemberRepositoryV1이라는 구체 클래스에 의존되어 있다. 따라서 컨트롤러나 데이터베이스 접근 계층의 변경이 일어나면 서비스 계층도 바꿔야 한다. 트랜잭션은 서비스 계층에서 구현되어야 하는데 트랜잭션 코드를 위한 try catch finally 같은 코드들의 중복도 많다. 그리고 JDBC와 JPA의 트랜잭션 구현 코드도 다르다. 기술을 변경하게 되면 서비스 계층..

Spring 2024.02.13

Spring Toy Project-1

Mat & Mut이라는 이름으로 커뮤니티 형태를 만들어보고 있다. 토이프로젝트를 하면서 기억해둘 것 th:text -> 요소의 텍스트 내용을 설정하는데 사용한다. ex) th:text="${item.itemName}" th:value -> input이나 select의 값을 설정하는데 사용한다. ex) th:value="${user.name}" th:object -> form이나 반복에서 전달받을 객체나 입력을 담을 객체를 설정하는데 사용한다. th:field -> th:object에서 객체를 설정한 것을 바탕으로 member가 가진 변수 name이나 age 등을 쉽게 설정할 수 있다. /*th:object 사용X*/ /*th:object 사용*/ 검증에서 BindingResult는 @ModelAttrib..

Spring 2024.01.31
728x90