목록CS 지식 (169)
개발놀이터
이번 시간에는 코딩테스트 준비를 하면서 문제를 풀다가 흥미로운 알고리즘을 발견해서 해당 내용을 포스팅하려고 합니다. 바로바로 '에라토스테네스의 체' 라는건데요. 이번에도 흥미로운 내용이 있으니 한번 둘러보고 가세요! 에라토스테네스의 체란? 에라토스테네스의 체는 말 그대로 어떤 물질을 걸러주는 '체'를 의미합니다. 여기서는 소수를 걸러주는 체가 되겠네요. 소수에 대해서 아주아주 간단하게 설명하고 넘어가도록 하겠습니다. 소수는 1과 자기자신으로밖에 나눠지지 않는 수를 말합니다. 2 3 5 7 ... 이런 숫자들을 말하죠 1과 자기자신으로밖에 나눠지지 않는 수라는 것은 소수를 공부했던 사람이라면 누구나 떠올릴 수 있는 개념입니다. 이것을 코딩으로 구현하려면 어떻게 해야할까요? 정말 우리가 흔히 알고있는 개념으..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bZup8i/btrZbRxCvmX/NmfA94oOlK6ZSOnXzeIAQk/img.png)
시간복잡도 시간복잡도란 내가 만든 코드가 얼마나 효율적인지를 나타내는 척도입니다. 시간복잡도를 계산하면 코드의 어느 부분에서 시간을 많이 잡아먹고 있는지 대략적으로 알 수 있으며 코드를 리팩토링 할 때도 좋은 영향을 미칠 수 있습니다. 문제를 해결하기 위한 알고리즘의 로직을 코드로 구현할 때 시간 복잡도를 고려한다는 것은 무슨 의미일까요? 바로 '입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼마나 걸리는가?'를 고려한다는 의미입니다. 효율적인 알고리즘을 구현한다는 것은 바꾸어 말해 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘을 구성했다는 의미입니다. 그리고 이 시간복잡도는 빅-오 표기법을 사용해 나타냅니다. 빅-오 표기법 빅-오 표기법 말고도 빅-오메가 표기법, 빅..
Q. TCP와 UDP의 차이점에 대해서 설명해주세요 A. TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램 단위로 전송하는 프로토콜입니다. TCP는 연결형 서비스로 가상 회선 방식을 제공합니다. 따라서 전송이 양방향으로 동시에 일어날 수 있는 전이중 방식과 각 연결이 정확히 2개의 종단점을 가지고 있는 점대점 방식을 사용합니다. 또한 흐름 제어와 혼잡 제어와 같은 특징때문에 높은 신뢰성을 보장합니다. UDP는 데이터 수신 여부를 확인하지 않아 신뢰성이 낮지만 TCP보다 속도가 빠르고 1:1 & 1:N & N:N 통신이 가능합니다. 결론적으로 TCP는 파일전송과 같이 신뢰성이 중요한 서비스에 사용되고 UDP는 스트리밍과 같이 연속성이 더 중요한 서비스에서 사용됩니다. https://coding..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Rw15r/btrUugBd29g/CqMtSKEkBUpIP3rIUzyrh1/img.png)
이번 포스팅은 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..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/biGQln/btrUjlocAKx/qeuk1nmVtY1d8NOpNAgSSk/img.png)
이번 포스팅에선 이해하기 어렵기로 소문난 정규화에 대해서 포스팅해볼 생각입니다. 저도 정규화에 대해서 공부해야겠다고 마음 먹었지만 이렇게 이해하기 힘들었던 적은 없었던 것 같네요. 워낙 말이 베베꼬여져 있으니까 예제와 함께 제가 말로 풀어서 설명해보도록 하겠습니다. 정규화 정규화는 무엇일까요? 우선 정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것입니다. 중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있습니다. 저는 여기서 한가지 걸리더군요. 무결성은 또 뭔가? 정규화에 대해서 알아보기 전에 무결성을 유지할 수 있다고 하니 무결성에 대해서 조금만 알아보도록 하겠습니다. 무결성 무결성에는 크게 세가지가 있습니다. 개체 무결성, 참조 무..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ZOPiw/btrUeJYTZzq/gi5PZr5kMq3qrtzh7dS5M0/img.png)
테이블 작성시에 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는 각각 원자성, 일관성, 고립성, 내구성의 약자입니다. 각각의 뜻으로는 원자성은 트랜잭션의 모든 연산이 완벽히 수행되어야 하며, 한 연산이라도 실패하면 트랜잭션의 전체 연산은 실패하게 된다는 것입니다. 일관성은 트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라 기존에 트랜잭션을 진행하던 데이터베이스로 진행해야 한다는 것입니다. 고립성은 서로 다른 트랜잭션이 동시에 실행될 경우 다른 트랜잭션에 의해 영향을 받지 않고..