목록분류 전체보기 (518)
개발놀이터
이번 포스팅은 TCP와 UDP가 무엇인지 각각의 특징은 어떤것이 있는지 차이점은 어떤게 차이점인지 그래서 이 둘은 어느상황에서 쓰는지에 대한 내용을 적어보도록 하겠습니다. 우선 TCP와 UDP는 TCP/IP의 전송 계층에서 사용되는 프로토콜입니다. 각각의 정의에 대해서 먼저 알아보도록 하겠습니다. TCP TCP를 해석하면 전송을 제어하는 프로토콜이라는 뜻입니다. 일반적으로 TCP와 IP를 함께 사용하는데 IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리하게 됩니다. 여기서 패킷이란 인터넷 내에서 데이터를 보내기 위한 경로배정을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송을 하는데 이때, 이 조각을 패킷이라고 합니다. TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환..
Q. www.google.com 을 검색하면 어떻게 되나요? A. 웹 브라우저는 캐싱된 DNS 기록들을 통해 해당 도메인주소와 대응하는 IP주소를 확인합니다. 이후 웹브라우저가 HTTP를 사용하여 DNS에게 입력된 도메인 주소를 요청합니다. DNS는 웹브라우저에게 찾는 사이트의 IP주소를 응답합니다. 이후 웹브라우저가 웹서버에게 IP주소를 이용하여 html문서를 요청합니다. 이후 WAS와 데이터베이스에서 우선 웹페이지 작업을 처리합니다. 해당 작업처리 결과를 웹서버로 전송합니다. 이후 웹서버는 웹브라우저에게 html 문서결과를 응답합니다. 웹브라우저는 화면에 웹페이지 내용물을 출력합니다. https://coding-review.tistory.com/237 www.google.com을 검색하면 일어나는 일..
Q. 데이터베이스 정규화란 무엇인가요? A. 정규화란 데이터의 중복방지, 무결성을 충족시키기 위해 데이터베이스를 설계하는 것입니다. 정규화에는 제 1 정규화, 제 2 정규화, 제 3 정규화, BCNF 정규화가 있습니다. 제 1 정규화는 테이블의 컬럼이 하나의 값을 갖도록 테이블을 분해하는 것입니다. 제 2 정규화는 제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다. 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미합니다. 제 3 정규화는 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것입니다. 여기서 이행적 종속은 A -> B, B -> C 가 성립할때 A -> C 가 성립되는 것을 의미합니다. B..
이번 포스팅에선 이해하기 어렵기로 소문난 정규화에 대해서 포스팅해볼 생각입니다. 저도 정규화에 대해서 공부해야겠다고 마음 먹었지만 이렇게 이해하기 힘들었던 적은 없었던 것 같네요. 워낙 말이 베베꼬여져 있으니까 예제와 함께 제가 말로 풀어서 설명해보도록 하겠습니다. 정규화 정규화는 무엇일까요? 우선 정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것입니다. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있습니다. 저는 여기서 한가지 걸리더군요. 무결성은 또 뭔가? 정규화에 대해서 알아보기 전에 무결성을 유지할 수 있다고 하니 무결성에 대해서 조금만 알아보도록 하겠습니다. 무결성 무결성에는 크게 세가지가 있습니다. 개체 무결성, 참조 무..
테이블 작성시에 Constraint를 사용해서 입력하는 자료에 대해서 제약, 즉 규칙을 정해줄 수 있는데요. 이때 정해진 제약에 따라서 데이터가 입력이 됩니다. 제약에 배반된다면 자료 입력이 거부되면서 오류가 납니다. 즉, 데이터 무결성을 지키기 위한 데이터 무결성 제약조건에 대해서 알아볼까 합니다. 데이터 무결성이란 권한이 부여된 계정이나 사람만이 접근 가능하고, 정확하고 완전한 데이터들이 저장되어 있는 상태를 생각하시면 됩니다. 데이터의 무결성을 위해서 데이터베이스에서는 5가지의 제약조건을 제공하고 있습니다. 이제 각각에 대해서 알아보도록 하겠습니다. 1. NOT NULL -구문 형식 NOT NULL은 INSERT 시 즉, 데이터 입력시에 누락이 되어서는 안되는 부분이라는 것입니다. NULL값이 들어..
Q. 트랜잭션의 격리수준에 대해 설명해주세요 A. 여러 트랜잭션이 처리될 때, 특정 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것입니다. 격리 수준으로는 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 이렇게 네가지가 있습니다. Q. 각각에 대해 설명해주세요 (꼬리질문) A. READ UNCOMMITTED는 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있습니다. READ UNCOMMITTED에서는 한쪽에서 커밋을 하지 않고 롤백을 하더라도 다른 트랜잭션에서 이를 참조할 수 있기 때문에 가장 안전성이 낮은 격리수준으로 사용하지 않는 격리수준입니다. READ COMMITTED는 커밋된 내용만 참조할 ..
Q. 트랜잭션에 대해서 설명해주세요 A. 트랜잭션이란 데이터베이스의 상태를 변화시키는 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러개의 연산이 수행될 수 있습니다. Q. 트랜잭션의 ACID에 대해서 설명해주세요 A. ACID는 각각 원자성, 일관성, 고립성, 내구성의 약자입니다. 각각의 뜻으로는 원자성은 트랜잭션의 모든 연산이 완벽히 수행되어야 하며, 한 연산이라도 실패하면 트랜잭션의 전체 연산은 실패하게 된다는 것입니다. 일관성은 트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라 기존에 트랜잭션을 진행하던 데이터베이스로 진행해야 한다는 것입니다. 고립성은 서로 다른 트랜잭션이 동시에 실행될 경우 다른 트랜잭션에 의해 영향을 받지 않고..
Q. 데이터베이스에서 인덱스를 사용하는 이유는 무엇인가요? A. 데이터베이스에서 인덱스를 사용하는 이유는 검색 성능을 향상시키기 위함입니다. 하지만 검색 성능을 실질적으로 향상시키기 위해서는 해당 쿼리가 인덱스를 사용하는지, 카디널리티, Selectivity 같은 요소들이 고려된 인덱스인지 확인해야 합니다. Q. 데이터베이스에서 인덱스를 사용하면 좋은점과 나쁜점은 무엇인가요? A. 인덱스를 사용했을 때 장점으로는 빠른 검색 성능을 들 수 있습니다. 단점으로는 인덱스를 구성하는 비용 즉, INSERT, UPDATE, DELETE 연산시에 인덱스를 형성하기 위한 추가적인 연산이 수행됩니다. 또한, 인덱스를 관리하기 위해 데이터베이스의 10퍼센트에 해당하는 저장공간이 필요합니다. https://coding-r..
DB를 사용하면서 데이터의 양에 다라 실행 결과의 속도가 차이가 납니다. JOIN이나 서브 쿼리 사용 시 곱 연산이 일어나 데이터 양이 증가하기 때문에 WHERE 조건에 필요한 데이터만 추출 후 사용하는 것이 좋다고 합니다. 쿼리의 성능을 높이는데 중요한 것은 인덱스를 적재적소에 사용하는 것입니다. 그렇다면 인덱스란 무엇인지 구조는 어떻게 되는지 사용시 장단점은 무엇인지 등에 대해 지금부터 포스팅 해보도록 하겠습니다. 인덱스 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 여기서 중요한건 '검색 속도'를 향상시키기 위한 자료구조라는 것입니다. 그럼 다른 연산은 향상이 안되는건가? 꼭 그렇지만은 않습니다. 향상은 되지만 추가적인 연산이 ..
Q. N + 1 문제는 무엇이고 이것이 발생하는 이유와 해결 방법에 대해서 설명해주세요. A. 하위 엔티티들이 존재하는 경우 한 쿼리에서 모두 가져오는 것이 아닌, 필요한 곳에서 각각 쿼리가 발생하는 경우를 말합니다. N + 1 문제는 즉시로딩과 지연로딩 둘 다 발생할 수 있는데 즉시 로딩에서 발생하는 이유는 전체 조회를 했을 때, 영속성 컨텍스트가 아닌 데이터베이스에서 직접 데이터를 조회한 다음 즉시로딩 전략이 동작하기 때문입니다. 지연 로딩에서 발생하는 이유는 지연로딩 전략을 사용한 하위 엔티티를 로드할 때 해당 엔티티를 조회하기 위한 추가적인 쿼리가 실행되어 발생합니다. 해결 방법으로는 fetch join이라고 불리는 JPQL의 join fetch를 사용하는 방법이 있으며, 또 다른 방법으로는 @E..