MyBatis Mybatis는 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper이다. 기본적으로 JdbcTemplate이 제공하는 기능을 대부분 제공하며, XML과 동적 쿼리를 매우 편리하게 작성할 수 있다는 장점이 있다. MyBatis vs JdbcTemplate JdbcTemplate과 MyBatis의 코드 차이를 알아보자. JdbcTemplate String sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id"; MyBatis -SQL update item set item_name=#{itemName}, price=#{price}, quantity=#{..
데이터베이스 연동 테스트 데이터 접근 기술은 실제 데이터베이스에 접근해서 데이터를 잘 저장하고 조회할 수 있는지 확인하는 것이 필요하다. 테스트 단에서 데이터베이스 접근을 위한 별도의 설정을 위해 db2test 라는 이름으로 새로운 스키마를 생성하자. Item 테이블 생성 drop table if exists item CASCADE; create table item ( id bigint generated by default as identity, item_name varchar(10), price integer, quantity integer, primary key (id) ); 새로운 테이블을 사용하기 때문에 다시 Item 테이블을 생성하자. application.properties (test) spr..
JdbcTemplate JDBC를 편리하게 사용할 수 있도록 도와주는 JdbcTemplate에 대해서 알아보자. 장점 JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있으며, 별도의 복잡한 설정 없이 바로 사용할 수 있다. 템플릿 콜백 패턴을 사용해서 JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리해준다. 커넥션 획득 및 종료 , statement 준비 및 실행, 결과 반복 루프 작업, 커넥션 동기화, 스프링 예외 변환 등 단점 동적 SQL을 해결하기 어렵다. JdbcTemplate 설정 build.gradle //JdbcTemplate 추가 implementation 'org.springframework.boot:spring-boot-starter-jdbc' //..
프로젝트 구조 다음과 같이 상품 목록을 조회하는 프로젝트 구조를 알아보자. build.gradle plugins { id 'org.springframework.boot' version '2.6.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.spr..
전송 계층 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며, 데이터 통신을 위한 스트림, 흐름 제어 등을 제공한다. 대표적으로 TCP, UDP가 있다. TCP TCP는 연결형, 신뢰성 전송 프로토콜로 두 호스트의 전송 계층 사이에 논리적 연결을 설립한다. 그 후 데이터 전송을 완료하면 연결을 해제하는 방식으로 connection setup(3-way handshaking), data transfer(데이터 전송), connection termination(4-way handshaking)의 세 단계를 거친다. 신뢰성 있는 서비스를 제공하기 때문에 데이터 스트림을 순차적으로 손실없이 전송하는 것(가상 회선)을 보장한다. 이를 가능하게 하는 방법에는 오류제어, 흐름제어, 혼잡제어 등이 있다. ..
OSI 7계층 OSI 7계층은 네트워크 통신을 표준화한 모델로, 통신 시스템을 7단계로 나누어 설명한 것이다. 7계층으로 나눈 이유는 통신이 일어나는 과정에서 단계별로 세분화하여 처리할 수 있기 때문이다. ISO의 OSI (Open System Interconnection) 7계층은 사용하기 복잡해서 인터넷에선 TCP/IP 4계층이 사용되고 있다. 응용 계층 호스트와 Application 간에 서비스 및 인터페이스를 기능을 수행한다. 예를들어 HTTP, FTP, Telnet 등이 있다. 표현 계층 데이터를 송신 측에선 암호화, 수신 측에서 복호화한다. MIME 인코딩이나 암호화 등의 작업이 해당 계층에서 이루어진다. 세션 계층 데이터가 통신하기 위한 논리적인 연결을 하는 계층이다. HTTP는 비연결성으로..
INDEX INDEX는 데이터베이스에서 릴레이션의 검색 성능을 높여주는 대표적인 방법 중 하나이다. 일반적인 RDBMS에선 B+Tree 자료 구조를 사용하여 구현한다. INDEX 방식은 테이블의 컬럼을 별도로 저장하여 검색 시 해당 테이블의 레코드를 FULL SCAN하는 것이 아니라 INDEX 파일을 검색하여 검색 속도를 빠르게 한다. SEARCH-KEY라는 이름의 속성값과 포인터를 통해 검색하여 SELECT 결과를 빠르게 찾아올 수 있다. 클러스터형 인덱스 기본키는 자동으로 클러스터형 인덱스가 생성된다. 해당 컬럼 기준으로 정렬이 된다. 보조 인덱스 보조 인덱스(secondary index)는 별도의 공간에 인덱스가 생성되며 create index 와 같이 index를 생성하거나 고유키(unique)로..
트랜잭션 격리 수준 트랜잭션의 4원칙인 ACID에서 I인 격리성은 트랜잭션 수행 시 서로 동기화 보장을 의미한다. 즉, 트랜잭션의 병렬성에서 서로 격리되어 마치 순차적으로 실행되는 것처럼 동작해야되는 것을 의미한다. 트랜잭션 격리 수준은 다음과 같이 4가지로 나뉜다. 아래로 내려갈 수록 성능이 낮아지고, 격리 수준이 높아진다. (즉, 성능이 나빠지는 만큼 격리성이 높아진다.) READ UNCOMMITTED (커밋되지 않은 읽기) READ COMMITTED (커밋된 읽기) REPEATABLE READ (반복 가능한 읽기) SERIALIZABLE (직렬화 기능) 트랜잭션에 관한 이론은 https://sasca37.tistory.com/204 를 참고하자. 격리 수준 READ_UNCOMMITTED 가장 낮은 ..