14. 기술면접 - 데이터베이스 - JDBC (Java DataBase Connectivity)
2021.10.18
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 JDBC 란 JDBC (Java Database Connectivity)는 DB에 접근할 수 있도록 Java 에서 제공하는 API 이다. - JDBC 는 관계형 데이터베이스에 사용되는 SQL 문을 실행하기 위해 자바로 작성된 클래스와 인터페이스로 구성되어 있다 - 특정 데이터베이스나 특정 데이터베이스 매커니즘에 구애 받지 않는 독립적인 인터페이스를 통해 다양한 데이터베이스에 접근하는 코드를 구현(mysql, oracle, mssql 등 추상화를 통해 접근가능)할 수 있도록 제공하는 자바 클래스의 표준 집합이다 - JDBC 클래스는 자바 패키지 java.sql 과 javax.sql 에 포함되어 있다 데..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 ORM 이란 - 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결) 해주는 것을 말한다 영속성 (Persistance) - 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성 - 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다 - 때문에 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 데이터를 영구하게 저장하여 영속성 을 부여한다 영속성 레이어 (Persistence Layer) - 프로그램의 아키텍처에서, 데이터에 영속성을 부여해주는 계층 - JDBC 를 이용하여 직접 구현할 수 있지만 Pe..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 배경 - 서비스의 크기가 점점 커지고 DB에 저장하는 데이터의 규모 또한 대용량화 되면서, 기존에 사용하는 DB 시스템의 용량(storage)의 한계와 성능(performence)의 저하를 가져오게 되었다 - 즉, VLDB(Very Large DBMS) 와 같이 하나의 DBMS 에 너무 큰 table 이 들어가면서 용량과 성능 측면에서 많은 이슈가 발생하게 되었고, 이런 이슈를 해결하기 위한 방법으로 Table 을 `파티션(partition)` 이라는 작은 단위로 나누어 관리하는 `파티셔닝(partitioning) 기법`이 나타나게 되었다 파티셔닝의 개념 - 큰 테이블이나 index를 관리하기 쉬운 ..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 리플리케이션 (Replication) - DB를 이중화, DB 복제 라고 보면 된다 - 정의 리플리케이션(Replication)은 복제를 뜻하며 2대 이상의 DBMS를 나눠서 데이터를 저장하는 방식이며, 사용하기 위한 최소 구성은 Master / Slave 구성을 하여야 됩니다. -> 여러 개의 DB를 권한에 따라 수직적인 구조(Master-Slave)로 구축하는 방식 사용 목적 MySQL 리플리케션(Replication)은 사용목적은 크게 실시간 Data 백업과 여러대의 DB서버의 부하를 분산 시킬수 있습니다 간단 요약 아주 단순한 Database를 구성할때에는 아래의 그림처럼 하나의 서버와 하나의..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 옵티마이저 (Optimizer) - 옵티마이저란? - SQL 개발자가 SQL을 작성하여 실행할 때, 옵티마이저는 SQL을 어떻게 실행할 것 인지를 계획하게 된다 - SQL 실행 계획 (Execution Plan)을 수리합하고 SQL 을 실행한다 - 옵티마이저는 SQL의 실행 계획을 수립하고 SQL 을 실행하는 데이터베이스 관리 시스템의 소프트웨어이다 - 동일한 결과가 나오는 SQL 도 어떻게 실행하느냐에 따라서 성능이 달라지기에, SQL 성능에 옵티마이저는 아주 중요한 역할을 한다 옵티마이저 특징 - 옵티마이저는 데이터 딕셔너리(Data Dictionary)에 있는 오브젝트 통계, 시스템 통계 등의 ..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 1. Select 시 에는 꼭 필요한 컬럼만 불러와야 한다 SELECT * FROM member; SELECT id FROM member; - 많은 필드 값을 불러올수록 DB는 더 많은 로드를 부담하게 되기 때문 - 컬럼 중에 불필요한 값을 가진 필드가 있다면 과감히 제외하고, 꼭 필요한 열만 불러오는 것이 좋다 2. 조건 부여 시, 가급적이면 기존 DB값에 별도의 연산을 걸지 않는 것이 좋다 -- 나쁜 SELECT m.id, ANY_VALUE(m.title) title, COUNT(r.id) r_count FROM movie m INNER JOIN rating r ON m.id = r.movie_i..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 Statement 와 PreparedStatement SQL 을 실행할 수 있는 객체입니다 Statement 1. 단일로 사용될 때 빠른 속도를 지닙니다. 2. 쿼리에 인자를 부여할 수 없습니다. 3. 매번 컴파일을 수행해야 합니다. PreparedStatement 1. 쿼리에 인자를 부여할 수 있습니다. 2. 처음 프리컴파일 된 후, 이후에는 컴파일을 수행하지 않습니다. 3. 여러번 수행될 때 빠른 속도를 지닙니다. (동일한 쿼리문을 조금씩 바꿔서 여러번 실행해야 할 때 좋다) 과정 1. 준비(Prepare) : 먼저 애플리케이션은 문의(Query) 틀을 만들고 이를 DBMS 로 보낸다. 특정값은 ..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 인덱스 (Index) - 인덱스(index)의 원래 뜻은 색인. 데이터베이스에서 조회 및 검색을 더 빠르게 할 수 있는 방법/기술, 혹은 이에 쓰이는 자료구조 자체를 의미하기도 한다 메모리에서 인덱스를 생성하여 파일형태로 저장해놓는다 인덱스를 활용하면 데이터를 조회하는 SELECT 외에도 UPDATE 나 DELETE 의 성능이 함께 향상된다 그러한 이유는 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문이다 인덱스 관리 DBMS는 index 를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다 그렇기 때문에 인덱스가 적용된 컬럼에 INSERT, UPDATE,..
MyBatis 바인딩 기법 MyBatis 에서는 #{} 바인딩과 ${} 바인딩이 있다 #{} 바인딩은 바인딩 값을 "" 로 감싸주어 바인딩을 해준다 [GET] http://localhost:8080/members?name=root@gmail.com [SQL] select * from email = "root@gmail.com" ${} 바인딩은 "" 없이 바로 바인딩을 해준다 [GET] http://localhost:8080/members?name=root@gmail.com [SQL] select * from email = root@gmail.com 위와 같이하면 "" 로 감싸지않아 쿼리문이 날라가게 되어 오류가 발생한다 따라서 ${} 이용해서 요청하려면 아래와 같이 해야 한다 [GET] http://lo..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 SQL Injection 과 종류 SQL 인젝션이란, 데이터베이스에 전송되는 SQL 쿼리문을 조작하여 데이트를 변조하거나, 허가 되지 않은 정보에 접근하는 공격이다. 주로 개인정보를 빼낼 때 많이 사용되는 기법이다 Error based SQL Injection 논리적 에러를 이용한 SQL Injection password 부분을 주석처리하여 패스워드를 다르게 입력하더라도 해당 계정정보를 조회할 수 있게 된다 Union based SQL Injection Union 명령어를 이용한 SQL Injection SQL 에서 Union 키워드는 두 개의 쿼리문에 대한 결과를 통합해서 하나의 테이블로 보여주게 ..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 조인 (Join) - 조인이란 - 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것 - 회원(Member) 테이블과 게시글(Board) 테이블이 있을 때 어떤 회원이 작성한 게시글을 가지고 오기 위해 두 테이블을 조합하여 가져와야 할 때 사용된다 - 조인의 필요성 - 관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미 있는 데이터의 집합으로 테이블이 구성되고, 각 테이블끼리는 관계(Relationship) 를 갖게 된다 - 이와 같은 특징으로 관계형 데이터베이스는 저장 공간이 효율성이 향상되게 된다. - 다른 한편으로는 서로 관계있는 데이터가 여러 테이블로 나뉘어 ..
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 트랜잭션이란? - 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합이다 - 예를 들어, A계좌에서 B계좌로 일정 금액을 이체한다고 가정하자. 1. A계좌의 잔액을 확인한다 2. A계좌의 금액에서 이체할 금액을 빼고 다시 저장한다 3. B계좌의 잔액을 확인한다 4. B계좌의 금액에서 이체할 금액을 더하고 다시 저장한다 - 이러한 과정들이 모두 합쳐져 계좌이체라는 하나의 작업단위를 구성한다. - 하나의 트랜잭션은 commit 되거나, rollback 된다 - commit 연산 - 한 개의 논리적인 단위(트랜잭션)에 대한 작업이 성공적으로 끝나 데이터베이스가 다시 일관된 ..