∞. 기술 면접/4. 데이터베이스 13

14. 기술면접 - 데이터베이스 - JDBC (Java DataBase Connectivity)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 JDBC 란 JDBC (Java Database Connectivity)는 DB에 접근할 수 있도록 Java 에서 제공하는 API 이다. - JDBC 는 관계형 데이터베이스에 사용되는 SQL 문을 실행하기 위해 자바로 작성된 클래스와 인터페이스로 구성되어 있다 - 특정 데이터베이스나 특정 데이터베이스 매커니즘에 구애 받지 않는 독립적인 인터페이스를 통해 다양한 데이터베이스에 접근하는 코드를 구현(mysql, oracle, mssql 등 추상화를 통해 접근가능)할 수 있도록 제공하는 자바 클래스의 표준 집합이다 - JDBC 클래스는 자바 패키지 java.sql 과 javax.sql 에 포함되어 있다 데..

13. 기술면접 - 데이터베이스 - ORM (Object Relation Mapping)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 ORM 이란 - 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결) 해주는 것을 말한다 영속성 (Persistance) - 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성 - 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다 - 때문에 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 데이터를 영구하게 저장하여 영속성 을 부여한다 영속성 레이어 (Persistence Layer) - 프로그램의 아키텍처에서, 데이터에 영속성을 부여해주는 계층 - JDBC 를 이용하여 직접 구현할 수 있지만 Pe..

12. 기술면접 - 데이터베이스 - 파티셔닝(Partitioning)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 배경 - 서비스의 크기가 점점 커지고 DB에 저장하는 데이터의 규모 또한 대용량화 되면서, 기존에 사용하는 DB 시스템의 용량(storage)의 한계와 성능(performence)의 저하를 가져오게 되었다 - 즉, VLDB(Very Large DBMS) 와 같이 하나의 DBMS 에 너무 큰 table 이 들어가면서 용량과 성능 측면에서 많은 이슈가 발생하게 되었고, 이런 이슈를 해결하기 위한 방법으로 Table 을 `파티션(partition)` 이라는 작은 단위로 나누어 관리하는 `파티셔닝(partitioning) 기법`이 나타나게 되었다 파티셔닝의 개념 - 큰 테이블이나 index를 관리하기 쉬운 ..

11. 기술 면접 - 데이터베이스 - 리플리케이션 (Replication)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 리플리케이션 (Replication) - DB를 이중화, DB 복제 라고 보면 된다 - 정의 리플리케이션(Replication)은 복제를 뜻하며 2대 이상의 DBMS를 나눠서 데이터를 저장하는 방식이며, 사용하기 위한 최소 구성은 Master / Slave 구성을 하여야 됩니다. -> 여러 개의 DB를 권한에 따라 수직적인 구조(Master-Slave)로 구축하는 방식 사용 목적 MySQL 리플리케션(Replication)은 사용목적은 크게 실시간 Data 백업과 여러대의 DB서버의 부하를 분산 시킬수 있습니다 간단 요약 아주 단순한 Database를 구성할때에는 아래의 그림처럼 하나의 서버와 하나의..

10. 기술면접 - 데이터 베이스 - 옵티마이저 (Optimizer)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 옵티마이저 (Optimizer) - 옵티마이저란? - SQL 개발자가 SQL을 작성하여 실행할 때, 옵티마이저는 SQL을 어떻게 실행할 것 인지를 계획하게 된다 - SQL 실행 계획 (Execution Plan)을 수리합하고 SQL 을 실행한다 - 옵티마이저는 SQL의 실행 계획을 수립하고 SQL 을 실행하는 데이터베이스 관리 시스템의 소프트웨어이다 - 동일한 결과가 나오는 SQL 도 어떻게 실행하느냐에 따라서 성능이 달라지기에, SQL 성능에 옵티마이저는 아주 중요한 역할을 한다 옵티마이저 특징 - 옵티마이저는 데이터 딕셔너리(Data Dictionary)에 있는 오브젝트 통계, 시스템 통계 등의 ..

09. 기술면접 - 데이터베이스 - 효과적인 쿼리 저장

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 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..

07. 기술면접 - 데이터베이스 - Statement와 PrepareStatement

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 Statement 와 PreparedStatement SQL 을 실행할 수 있는 객체입니다 Statement 1. 단일로 사용될 때 빠른 속도를 지닙니다. 2. 쿼리에 인자를 부여할 수 없습니다. 3. 매번 컴파일을 수행해야 합니다. PreparedStatement 1. 쿼리에 인자를 부여할 수 있습니다. 2. 처음 프리컴파일 된 후, 이후에는 컴파일을 수행하지 않습니다. 3. 여러번 수행될 때 빠른 속도를 지닙니다. (동일한 쿼리문을 조금씩 바꿔서 여러번 실행해야 할 때 좋다) 과정 1. 준비(Prepare) : 먼저 애플리케이션은 문의(Query) 틀을 만들고 이를 DBMS 로 보낸다. 특정값은 ..

06. 기술면접 - 데이터베이스 - 인덱스 (Index)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 인덱스 (Index) - 인덱스(index)의 원래 뜻은 색인. 데이터베이스에서 조회 및 검색을 더 빠르게 할 수 있는 방법/기술, 혹은 이에 쓰이는 자료구조 자체를 의미하기도 한다 메모리에서 인덱스를 생성하여 파일형태로 저장해놓는다 인덱스를 활용하면 데이터를 조회하는 SELECT 외에도 UPDATE 나 DELETE 의 성능이 함께 향상된다 그러한 이유는 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문이다 인덱스 관리 DBMS는 index 를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다 그렇기 때문에 인덱스가 적용된 컬럼에 INSERT, UPDATE,..

Spring Mybatis SQL Injection

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..

05. 기술 면접 - 데이터베이스 - SQL 인젝션

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 SQL Injection 과 종류 SQL 인젝션이란, 데이터베이스에 전송되는 SQL 쿼리문을 조작하여 데이트를 변조하거나, 허가 되지 않은 정보에 접근하는 공격이다. 주로 개인정보를 빼낼 때 많이 사용되는 기법이다 Error based SQL Injection 논리적 에러를 이용한 SQL Injection password 부분을 주석처리하여 패스워드를 다르게 입력하더라도 해당 계정정보를 조회할 수 있게 된다 Union based SQL Injection Union 명령어를 이용한 SQL Injection SQL 에서 Union 키워드는 두 개의 쿼리문에 대한 결과를 통합해서 하나의 테이블로 보여주게 ..