∞. 기술 면접 61

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 키워드는 두 개의 쿼리문에 대한 결과를 통합해서 하나의 테이블로 보여주게 ..

04. 기술 면접 - 데이터베이스 - 조인 (Join)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 조인 (Join) - 조인이란 - 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것 - 회원(Member) 테이블과 게시글(Board) 테이블이 있을 때 어떤 회원이 작성한 게시글을 가지고 오기 위해 두 테이블을 조합하여 가져와야 할 때 사용된다 - 조인의 필요성 - 관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미 있는 데이터의 집합으로 테이블이 구성되고, 각 테이블끼리는 관계(Relationship) 를 갖게 된다 - 이와 같은 특징으로 관계형 데이터베이스는 저장 공간이 효율성이 향상되게 된다. - 다른 한편으로는 서로 관계있는 데이터가 여러 테이블로 나뉘어 ..

03. 기술 면접 - 데이터베이스 - 트랜잭션 (Transaction)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 트랜잭션이란? - 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합이다 - 예를 들어, A계좌에서 B계좌로 일정 금액을 이체한다고 가정하자. 1. A계좌의 잔액을 확인한다 2. A계좌의 금액에서 이체할 금액을 빼고 다시 저장한다 3. B계좌의 잔액을 확인한다 4. B계좌의 금액에서 이체할 금액을 더하고 다시 저장한다 - 이러한 과정들이 모두 합쳐져 계좌이체라는 하나의 작업단위를 구성한다. - 하나의 트랜잭션은 commit 되거나, rollback 된다 - commit 연산 - 한 개의 논리적인 단위(트랜잭션)에 대한 작업이 성공적으로 끝나 데이터베이스가 다시 일관된 ..

01. 기술면접 - 데이터베이스 - 데이터베이스 {커넥션} 풀 (DBCP, DataBase Connection Pool)

공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다 데이터베이스 풀 - Connection Pool - 클라이언트의 요청에 따라 각 어플리케이션의 스레드에서 데이터베이스에 접근하기 위해서는 Connection 이 필요하다 - Connection Poll 은 이런 Connection 을 여러 개 생성해 두어 저장해 놓은 공간(캐시), 또는 이 공간의 Connection 을 필요할 대 꺼내 쓰고 반환하는 기법을 말한다 - DB 에 접근하는 단계 1. 웹 컨테이너(Tomcat)가 실행되면서 DB 와 연결된 Connection 객체들을 미리 생성하여 pool 에 저장한다 2. DB 에 요청 시, pool 에서 Connection 객체를 가져와 DB 에 접근한..