분류 전체보기 (132) 썸네일형 리스트형 [DB] 트랜잭션(Transaction) 이란? 데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 여러 가지 이유가 있지만, 가장 대표적인 것은 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문입니다. 트랜잭션을 이름 그대로 번역하면 거래라는 뜻입니다. 즉, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 의미합니다. 예를 들어 A의 돈 10만원을 B에게 계좌이체 한다고 해 봅시다. 그럼 아래와 같이 동작해야 합니다. 1. A의 잔고를 10만원 감소2. B의 잔고를 10만원 증가 1번과 2번 작업은 하나의 작업처럼 동작해야 합니다. 만약 1번은 성공했는데 2번에서 문제가 발생하여 계좌이체에 실패하면 아주 큰 문제가 발생하겠죠. 데이터베이스의 트랜잭션 기능을 사용하면 1번과 2번이 둘 다.. [DB] DataSource 란? 커넥션 획득 방법커넥션을 얻는 방법은 JDBC DriverManager를 직접 사용하거나, 커넥션 풀을 사용하는 등 다양한 방법이 있습니다. 여기서 문제가 존재합니다. JDBC DriverManager를 통해 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경한다고 하면 애플리케이션 코드도 함께 변경해야 하게 되는 것이죠. 위와 같은 문제를 해결하기 위해서 자바에서 javax.sql.DataSource 라는 인터페이스를 제공합니다.DataSourceDatasource는 커넥션을 획득하는 방법을 추상화하는 인터페이스입니다. Datasource 에는 여러 기능이 있지만, 핵심 기능은 커넥션 조회 라고 할 수 있습니다. public interface DataSource { Connection getCon.. [DB] 커넥션 풀이란? (Connection pool) 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거칩니다.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회합니다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결합니다. 즉, 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생하게 됩니다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달합니다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성합니다.DB는 커넥션 생성이 완료되었다는 응답을 보내고, DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환합니다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모되는 일입니다. DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥.. [DB] JDBC 실습 (구현 및 테스트) 아래 포스팅에서 만든 H2 DataBase를 사용해서 실습을 진행할 예정입니다.https://silver-programmer.tistory.com/entry/JDBC%EB%9E%80 JDBC란?서버에서는 데이터를 데이터베이스에 저장하고 있습니다. 그리고 데이터베이스에는 MySQL, Oracle과 같이 다양한 종류가 있죠. 여기서 문제가 발생합니다. 첫째로, 특정 데이터베이스를 사용하다silver-programmer.tistory.com 테이블 생성 및 DTO 정의schema.sql아래처럼 task라는 테이블을 생성합니다. task 테이블의 필드는 task_id, category, priority로 구성했습니다.DROP TABLE IF EXISTS task CASCADE;CREATE TABLE task (.. [DB] JDBC란? 서버에서는 데이터를 데이터베이스에 저장하고 있습니다. 그리고 데이터베이스에는 MySQL, Oracle과 같이 다양한 종류가 있죠. 여기서 문제가 발생합니다. 첫째로, 특정 데이터베이스를 사용하다가 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함꼐 변경해야 합니다. 그리고, 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그 결과를 응답받는 방법을 새로 학습해야 됩니다. 위와 같은 문제를 해결하기 위해 JDBC라는 자바 표준이 등장합니다. 위키 백과를 보면 JDBC를 아래와 같이 정의합니다.JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC 는 데이터베이스에서 자료를 쿼.. [클린 코드] 12장. 창발성 창발성 설계로 깔끔한 코드를 구현하자. 설계 규칙은 아래와 같이 4가지가 있다. (중요도 순) 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 1. 모든 테스트를 실행하라 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 높아진다. 즉, 테스트 케이스를 작성하면 설계 품질이 높아진다. 테스트 케이스를 만들고 계속 돌림으로써 낮은 결합도와 높은 응집력이라는 객체 지향 방법론 목표를 달성할 수 있다. 리팩토링 (2~4번 규칙) 테스트 케이스를 모두 작성했다면, 이제는 코드와 클래스를 정리할 수 있다. 테스트 케이스가 있기 때문에, 코드를 정리하면서 시스템이 깨질까 걱정할 필요가 없다. 2. 중복을 없애라 공통적인 코드를 새 메서드로 추출하여 중복.. [클린 코드] 10장. 클래스 1. 클래스는 작아야 한다! 클래스가 맡은 책임이 적어야 한다. 클래스 이름은 해당 클래스 책임을 기술해야 한다. 클래스 이름을 짓기 어렵다면, 클래스 책임이 너무 많아서일 것이다. 1-1. 단일 책임 원칙 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다. 작은 클래스는 각자 맡은 책임이 하나이고, 변경할 이유가 하나며, 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다. 1-2. 응집도 클래스는 인스턴스 변수의 수가 작아야 하고, 메서드는 인스턴스 변수를 하나 이상 사용해야 한다. 메서드가 변수를 많이 사용할수록 클래스의 응집도는 높다. 응집도를 유지하면 작은 클래스가 여러 개 나온다. 몇몇 메서드만이 인스턴스 변수를 많이 사용하는 경우가 발생한다면, 클래스를 쪼개야 하는 신호이다! 1-3. .. [클린 코드] 9장. 단위 테스트 1. TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서, 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 위 규칙을 따르면 실제 코드를 사실상 전부 테스트하는 테스트 케이스가 나온다. 2. 깨끗한 테스트 코드 유지하기 깨끗한 테스트 코드란? 가독성, 가독성, 가독성!! 테스트 코드는 실제 코드 못지않게 중요하다. 실제 코드 못지않게 깨끗하게 짜야한다. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트이다. 테스트 케이스가 있으면 변경이 두렵지 않다. 테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 2-1.. 이전 1 2 3 4 5 6 7 8 ··· 17 다음