Spring 24

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

JPA는 ORM 데이터 접근 기술을 제공한다. JdbcTemplate이나 MyBatis같은 SQL 매퍼 기술은 개발자가 SQL을 직접 작성해야 하지만, JPA는 SQL도 JPA가 대신 작성해주고, 처리해준다. ORM 개념 SQL 중심적인 개발의 문제 무한 반복하는 select, update, insert, ... 코드를 계속해서 작성해야한다. 만약 필드가 추가되면 모든 쿼리들을 수정해야하는 번거로움이 있다. 객체를 관계형 데이터베이스에 저장하려면 객체를 SQL로 변환해서 데이터베이스에 조회하거나 넣어야 한다. 그런데 객체를 SQL로 변환하는 것은 개발자가 하는 것이다. 또, 객체에는 상속이 있지만, 관계형 데이터베이스에는 상속이 없다. 그래서 조회할 때는 두 테이블을 조인해야하고, 넣을 때는 데이터를 분..

Spring 2024.03.19

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

JdbcTemplate - 이름 지정 파라미터 String sql = "update item set item_name=?,price=?, quantity=? where id=? 원래 이런 sql 코드였는데 String sql = "update item set item_name=?,quantity=?,price=? where id=? 이렇게 바뀌면 quantity와 price의 데이터 바인딩 순서가 바뀐다. 그러면 바인딩 코드도 바꿔야 하는 문제가 발생한다. 그래서 파라미터를 순서대로 바인딩하는 것이 아니라 이름을 지정해서 파라미터를 바인딩하는 'NamedParameterJdbcTemplate'라는 기능을 제공한다. /** * NamedParameterJdbcTemplate * SqlParameterSou..

Spring 2024.03.14

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

SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate는 JDBC를 매우 편리하게 사용할 수 있도록 도와주어 좋은 선택지다. 장점 설정의 편리함 JdbcTemplate는 'spring-jdbc' 라이브러리에 포함되어 있는데 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본적으로 사용되는 라이브러리라서 별도의 설정이 필요없다. 반복 문제 해결 JdbcTemplate는 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 반복되는 작업을 대신 처리해준다. 대신해주는 반복되는 작업들 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프 실행 커넥션, statement, resultset 종료 트랜잭션을 위한 커넥션 동기화 예외 발생시 스프링 예외 변환기 실 개발..

Spring 2024.03.14

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

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

Spring 2024.02.27

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

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

Spring 2024.02.19

트랜잭션

트랜잭션 이름 그대로 번역하면 거래 -> 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것이다. 예를 들어 A가 B에게 5000원을 송금하면 A의 계좌에서 5000원이 빠지고, B의 계좌에 5000원이 추가되어야 한다. 이 두가지 작업 모두가 성공적으로 이루어져야 문제가 없다. 데이터베이스에서도 모든 작업이 정상적으로 성공하여 반영되는 것을 '커밋(Commit)'이라 하고 하나라도 실패해서 거래 이전으로 돌리는 것을 '롤백(Rollback)'이라 한다. 트랜잭션 ACID Atomicity(원자성) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 실패해야 한다. 일관성(Consistency) : 모든 트랜잭션은 일관성있는 데이터 베이스 상태를 유지해야..

Spring 2024.02.08

커넥션 풀

DB 드라이버를 사용하면 매번 데이터베이스를 사용할 때마다 TCP/IP 커넥션을 맺어야 한다. 그래서 커넥션을 미리 생성해두고 사용하는 커넥션 풀이라는 방법을 사용한다. 애플리케이션이 시작할 때 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 보관한다. 커넥션 풀에 들어가 있는 커넥션은 TCP/IP로 데이터베이스와 연결되어 있는 상태라서 언제든지 즉시 SQL을 데이터베이스에 전달할 수 있다. 어플리케이션 로직은 이미 생성되어있는 커넥션을 객체 참조로 가져다쓰기만 하면 된다. 커넥션을 사용하고 나면 커넥션을 종료하는 것이 아니라 살아있는 상태로 커넥션 풀에 반환한다. DataSource 커넥션을 DB 드라이버로 얻다가 커넥션 풀 중 하나인 hikariCP로 바꾸려 하면, 커넥션을 획득하는 어플리케이션 코드..

Spring 2024.02.01

JDBC

클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 데이터베이스를 사용한다. 커넥션 연결 SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션으로 전달 결과 응답: SQL을 수행하고 결과 응답. JDBC를 직접 코딩할 일은 웬만하면 없다. Sql Mapper나 ORM 기술을 사용하기 때문에 하지만 JDBC를 이해할 필요는 있다. @Slf4j public class DBConnectionUtil { public static Connection getConnection() { try { Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); //라이브러리에 있는 ..

Spring 2024.01.31

스프링 인터셉터

스프링 인터셉터 스프링 인터셉터는 서블릿 필터와 비슷한 기능을 제공하지만 훨씬 더 많은 기능을 제공한다 스프링 인터셉터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 호출됨. 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 된다. 스프링 MVC의 시작점이 디스패처 서블릿이다. 스프링 인터셉터 제한 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 //로그인 사용자 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터(적절하지 않은 요청이라 판단, 컨트롤러 호출X) //비 로그인 사용 스프링 인터셉터 체인 H..

Spring 2024.01.09
728x90