목록

2019년 3월 1일 금요일

프로그래밍 공부하기 좋은 사이트 모음






프로그래밍 공부하기 좋은 사이트 모음!










1. 부스트코스



가장 최근에 알게 된 사이트.

안드로이드 앱을 만드는 강좌를 하나 봤는데
한 강좌 안에,
단계마다 세부 단계가 있고,
세부 단계마다 강의 영상이 또 여러개로 나누어져있다.
스크롤을 안내렸으면 강의가 여러개인지 모르고 넘어갔을 듯.






수학, 영어, 비즈니스 등
부가적으로 학습할 수 있는 강좌도 있다.










2. 오픈튜토리얼스 - 생활코딩



아마 가장 많이 알고있는 사이트 중 하나일 듯.
한 때, 
생활코딩의 운영자 egoing 님을 어떻게 모를 수 있냐는 소리를 들었다...






지옥에서 온 Git ㅎㅎ










3. 인프런



서비스하는 강의가 총 450개가 넘는다.
무료도 많고, 유료도 많다.

희한한건, 내가 못 찾는건지
카테고리 별로 강좌를 탐색하기 위한 '분야별 강좌' 메뉴를 만나기가 힘들다.
로그인을 안하면 '분야별 강좌' 메뉴가 없다가
로그인을 하면 메뉴가 '분야별 강좌' 메뉴가 똥! 생긴다거나,
(그것도 어떤 강의를 클릭해서 페이지로 갔을 경우)

홈에서 분야별로 강좌를 찾아보려면,
검색창을 통해 검색을 하면 카테고리를 볼 수 있다.






과정마다 강의 수, 총 소요 시간 등
한눈에 볼 수 있어서 학습을 계획하기 편하다.










4. 프로그래머스



예전에 헬로월드라는 이름으로 접속했던걸로 기억하는데
언젠가부터 프로그래머스로 바뀌었다.
동영상 강의와 간단한 테스트 문제로 구성된 강좌들을 서비스한다.
프로그래밍 대회, 개발자 채용, 프로필 등록 후 입사제안 받기 등
예전에는 없던 메뉴가 많이 생긴걸 보면 운영을 확장시키는 중인가?






코딩 문제가 레벨별로 마련되어 있다.
예전에 알고리즘 문제 풀겠다고 돈 내고 단기 학원을 다니고
월 정액을 내고 코딩 문제 사이트를 이용하거나 했는데...










5. w3schools



프론트엔드 공부 시 참고하기 좋은 사이트.
Try it Yourself 로
바로 코드를 테스트해 볼 수 있다.






웹 페이지를 만들다가
모르는게 생기면 검색하러 자주 들어갔었다.










6. 프리 코드 캠프



예전에 웹 디자인을 하던 친구가 알려준 사이트다.
과정마다 미션으로 구성되어,
간단한 문제를 하나씩 풀어가면서 학습할 수 있다.
여기도 프론트엔드 공부하기에 좋다.






문제가 주어지고, 코드를 바꾸거나 추가해서
미션을 해결하면 다음 문제로 넘어갈 수 있다.






[데이터베이스] 21. 해싱(Hashing), 해싱 함수(Hash Function), 해시 테이블(Hash Table)






1. 해싱(Hashing) 

  • 해시 테이블을 이용한 탐색을 말한다.
  • Hash Table 이라는 기억공간을 할당하고, 해시 함수를 이용하여 레코드 키에 대한 Hash Table 내의 Home Address를 계산한 후 주어진 레코드를 해당 기억장소에 저장하거나 검색 작업을 수행하는 방식이다.
  • DAM(직접접근방식, ) 파일을 구성할 때 해싱이 사용되며 접근 속도는 빠르지만 기억 공간이 많이 요구된다.
  • 여러가지 검색 방식 중 속도가 가장 빠르다.
  • 삽입, 삭제 작업의 빈도가 많을 때 유리한 방식이다.
  • 키-주소 변환 방법이라고도 한다.




2. 해시 함수(Hash Function)

  • 데이터의 효율적인 관리를 위해 길고 복잡한 문자열을 간단한 문자열로 맵핑하는 알고리즘으로 키 값을 해시 값(인덱스)로 변환한다.




3. 해시 테이블(Hash Table)

  • 해시 함수를 통해 얻은 해시 값을 인덱스, 주소로 삼아 데이터의 값을 키와 함께 저장하는 자료구조를 해시 테이블이라고 한다.
  • 키 값의 연산에 의해 직접 접근이 가능한 구조이다.
  • 레코드를 1개 이상 보관할 수 있는 Home Bucket 들로 구성한 기억 공간이다.
  • 보조기억장치에 구성할 수도 있고 주기억장치에 구성할 수도 있다.




  • 버킷(Bucket) : 하나의 주소를 갖는 파일의 한 구역을 의미하며, 버킷의 크기는 같은 주소에 포함될 수 있는 레코드 수를 의미한다.
  • 슬롯(Slot) : 1개의 레코드를 저장할 수 있는 공간으로 n개의 슬롯이 모여 하나의 버킷을 형성한다.
  • 충돌 현상(Collision) : 서로 다른 2개 이상의 레코드가 같은 주소를 가지는 현상.
  • Synonym : 같은 Home Address를 갖는 레코드들의 집합이다.
  • Overflow : 계산된 Home Address의 버킷 내에 저장할 기억 공간이 없는 상태로, 버킷을 구성하는 슬롯이 여러 개일 때는 Collision은 발생해도 Overflow는 발생하지 않을 수 있다.






2019년 2월 27일 수요일

[데이터베이스] 20. 파일 구조(파일의 분류, 순차 파일, 색인 순차 파일)






  • 파일은 편성에 의해 순차 파일(Sequential File), 색인 순차 파일(Indexed Sequential) File), 직접 파일(Direct/Random File)로 분류할 수 있다.


1. 순차 파일(Sequential File) = 순서 파일


1-1. 순차 파일이란?
  • 입력되는 데이터들을 논리적인 순서에 따라 물리적 연속 공간에 순서대로 기록하는 방식이다.
  • 급여 관리와 같이 변동 사항이 크지 않고 기간별로 일괄 처리를 주로 하는 경우에 적합하다.
  • 주로 순차 접근이 가능한 자기 테이프에서 사용된다.


1-2. 순차 파일의 장단점
  • 장점
- 기록 밀도가 높아서 기억 공간을 효율적으로 사용할 수 있다.
- 레코드가 키 순서대로 편성되어 취급이 용이하다.
- 매체 변환이 쉬워서 어떠한 매체에도 적용할 수 있다.
- 레코드를 기록할 때 사용한 키 순서대로 레코드를 처리하는 경우, 다른 편성법보다 처리 속도가 빠르다.

  • 단점
- 파일에 새로운 레코드를 삽입, 삭제, 수정하는 경우 파일 전체를 복사해야 하므로 시간이 많이 걸린다.
- 데이터 검색 시 처음부터 순차적으로 하기 떄문에 검색 효율이 낮다.



2. 색인 순차 파일(Indexed Sequential) File)


2-1. 색인 순차 파일이란?
  • 순차 처리와 랜덤 처리가 모두 가능하도록 레코드들을 키 값 순으로 정렬하여 기록하고, 레코드의 키 항목만을 모은 색인을 구성하여 편성하는 방식이다.
  • 색인을 이용한 순차적인 접근 방식을 제공하여 ISAM(Index Sequential Access Method)이라고도 한다.
  • 레코드를 참조할 때는 색인을 탐색한 후 색인이 가리키는 주소(포인터)를 사용하여 직접 참조할 수 있다.
  • 일반적으로 자기 디스크에 많이 사용되며 자기 테이프에서는 사용할 수 없다.


2-2. 색인 순차 파일의 구성
  • 기본 구역(Prime Area) : 실제 레코드들을 기록하는 부분으로, 각 레코드는 키 값 순으로 저장된다.
  • 색인 구역(Index Area) : 기본 구역에 있는 레코드들의 위치를 찾아가는 색인이 기록되는 부분으로 트랙 색인 구역, 실린더 색인 구역, 마스터 색인 구여으로 구분할 수 있다.
  • 오버플로 구역(Overflow Area) : 기본 구역에 빈 공간이 없어서 새로운 레코드의 삽입이 불가능 할 때를 대비하여 예비적으로 확보해 둔 부분이다.
- 실린더 오버플로 구역(Cylinder Overflow Area) : 각 실린더 마다 만들어지는 오버플로 구역으로 해당 실린더의 기본 구역에서 오버플로된 데이터를 기록한다.
- 독립 오버플로 구역(Independent Overflow Area) : 실린더 오버플로 구역에 더 이상 오버플로 된 데이터를 기록할 수 없을 때 사용할 수 있는 예비 공간으로, 실린더 오버플로 구역과는 별도로 만들어진다.


2-3. 색인 순차파일의 장단점
  • 장점
- 순차 처리와 랜덤 처리가 모두 가능하므로 목적에 따라 융통성 있게 처리할 수 있다.
- 효율적인 검색이 가능하고 레코드의 삽입, 삭제, 갱신이 용이하다.

  • 단점
- 색인 구역과 오버플로 구역을 구성하기 위한 추가 기억 공간이 필요하다.
- 파일이 정렬되어 있어야 하므로 추가, 삭제가 많으면 효율이 떨어진다.
- 색인을 이용한 액세를 하기 때문에 액세스 시간이 랜덤 편성 파일보다 느리다.



3. 직접 파일(Direct/Random File)


3-1. 직접 파일이란?
  • 데이터 레코드를 액세스할 경우 그 레코드가 보관되어 있는 주소를 직접 지정하는 방법이다.


3-2. 직접 파일의 장단점
  • 장점
- 접근 시간이 빠르다
- 레코드의 추가, 삭제의 경우 파일 전체의 복사가 필요 없다.

  • 단점
- 데이터 레코드와 그 보관장소의 대응이 어렵다.
- 기억 공간 효율이 저하되고, 연속적, 전체적인 검색이 거의 불가능하다.






2019년 2월 22일 금요일

[데이터베이스] 19. 분산 데이터베이스(분산 데이터베이스의 정의, 목표, 장단점)







1. 분산 데이터베이스란?

  • 논리적으로 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 연결된 여러개의 컴퓨터 사이트에 분산되어 있는 데이터베이스이다.




2. 분산 데이터베이스의 목표

  • 위치 투명성(Location Transparency) : 액세스하려는 데이터베이스의 실제 위치를 알 필요없이 단지 데이터베이스의 논리적인 명칭만으로 액세스할 수 있음을 뜻한다.
  • 중복 투명성(Replication Transparency) : 동일 데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행함을 뜻한다.
  • 병행 투명성(Concurrency Transparency) : 분산 데이터베이스와 관련된 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않음을 뜻한다.
  • 장애 투명성(Failure Transparency) : 트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 불구하고 트랜잭션을 정확하게 처리함을 뜻한다.




3. 분산 데이터베이스의 장단점


3-1. 장점
  • 지역 자치성이 높다.
  • 자료의 공유성이 향상된다.
  • 시스템 성이 향상된다.
  • 분산 제어가 가능하다.
  • 효용성 및 융통성이 높다.
  • 신뢰성 및 가용성이 높다.
  • 점증적 시스템 용량 확장이 용이하다.



3-2. 단점
  • DBMS가 수행할 기능이 복잡하다.
  • 데이터베이스 설계가 어렵다.
  • 소프트웨어 개발 비용이 증가한다.
  • 처리 비용이 증가한다.
  • 잠재적 오류가 증가한다.





[데이터베이스] 18. DB의 보안과 무결성(Integrity and Security)







1. 무결성과 보안(Integrity and Security)

  • 보안 : 권한이 없는 사용자로부터 데이터베이스를 보호하는 것.
  • 무결성 : 은 권한이 있는 사용자로부터 데이터베이스를 보호하는 것.
  • 보안은 데이터베이스 사용자들이 데이터베이스를 사용하고자 할 때 언제든지 사용할 수 있도록 보장하는 것이며 무결성은 정확하게 사용할 수 있도록 보장하는 것을 말한다.



2. 보안(Security)


2-1 DB 보안의 의미
  • 데이터베이스 사용자들은 일반적으로 서로 다른 객체에 대하여 다른 접근 권리 또는 권한을 갖게된다.
  • 데이터베이스의 일부분 또는 전체에 대해서 권한이 없는 사용자가 액세스를 수행하는 것을 금지하기 위해 사용되는 기술이다.


2-2. 보안의 목표
  • 정보 보호
  • 정보 인증
  • 사용자 인증


2-3. 암호화 기법
  • 개인의 암호 방식(Private Key Encryption) = 비밀키 암호 방식
- 동일한 키로 데이터를 암호화하고 복호화한다.
- 비밀키는 제3자에게는 노출시키지 않고 데이터베이스 사용 권한이 있는 사용자만 나눠 가진다.
- 대칭 암호 방식 또는 단일키 암호화 기법이라고도 한다.
- 대표적으로 DES(Data Encryption Standard)가 있다.
- DES는 56Bit의 16개 키를 이용하여 64Bit의 평문 블록을 16회의 암호 계산 단계를 거쳐 64Bit의 암호문을 얻는다.
- 장점 : 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고 파일 크기가 작다.
- 단점 : 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아진다.


  • 공개키 암호 방식(Public Key Encryption)
- 서로 다른 키로 데이터를 암호화하고 복호화한다.
- 데이터를 암호화할 때 사용하는 키(공개키, Public Key)는 데이터베이스 사용자에게 공개하고, 복호화할 때의 키(비밀키, Secret Key)는 관리자가 비밀리에 관리하는 방법이다.
- 비대칭 암호 방식이라고도 한다.
- 대표적으로 RSA(Rivest Shamir Adleman)가 있다.
- 장점 : 키의 분배가 용이하고, 관리해야 할 키의 개수가 적다.
- 단점 : 암호화/복호화 속도가 느리며 알고리즘이 복잡하고 파일 크기가 크다.



3. 무결성(Integrity)


3-1. 무결성의 의미
  • 데이터베이스에 들어있는 통합 데이터의 정확성을 보장하기 위해 정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약조건이다.



3-2. 무결성의 종류
  • 널 무결성 : 관계의 특정 속성 값이 NULL이 될 수 없도록 하는 규정.
  • 키 무결성 : 하나의 테이블에는 적어도 하나의 키가 존재해야 한다는 규정.
  • 개체 무결성 : 기본 테이블의 기본키를 구성하는 어떤 속성도 NULL 값을 가질 수 없다는 규정.
  • 관계 무결성 : 릴레이션에 어느 한 튜플의 삽입 가능 여부 또는, 한 릴레이션과 다른 릴레이션의 튜플들 사이의 관계에 대한 적절성 여부를 지정한 규정.
  • 참조 무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 한다는 규정.
  • 도메인 무결성 : 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다는 규정.





[데이터베이스] 17. 자료의 탐색(순차 탐색, 이진 탐색, ...)







1. 탐색의 종류

  • 기억 공간에 저장된 특정 레코드를 찾아내기 위해서는 탐색하는 과정이 필요하다.


1-1. 순차 탐색(Sequencial Search)
  • 선형 검색(Linear Search) = 순차 검색(Sequential Search)
  • 순서화되어 있지 않은 경우 사용하며 첫번째 레코드 키 값부터 차례대로 비교하여 검색한다.



1-2. 이진 탐색(Binary Search)
  • 제어 검색의 일종이다.
  • 반드시 순서화된 파일이어야 검색할 수 있다.
  • 탐색 효율이 좋으며 탐색 시간이 적게 소요된다.
  • 전체 파일을 두 개의 서브 파일로 분리해 가면서 Key 레코드를 검색하기 때문에 검색회수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.
  • 찾고자 하는 Key 값을 파일의 중간 레코드 Key 값과 비교하면서 검색한다.
  • 중간 레코드 번호(m) : m=(첫번째 레코드 번호+마지막 레코드 번호)/2



1-3. 보간 탐색
  • 찾으려는 레코드가 있을 법한 부분의 키를 택하여 검색하는 방법이다.



1-4. 피보나치 탐색(Fibonacci Search)
  • 피보나치 수열에 따라 다음에 비교할 대상을 선정하여 검색하는 방식으로 중간 레코드 번호를 계산하기 위해 가감산만을 이용하기 때문에 효율이 우수하다.



1-5. 블록 탐색(Block Search)
  • 데이터 영역을 블록으로 나누고 각 블록마다 최대 레코드 키 값을 Index에 저장한 뒤 이것을 이용하여 찾고자 하는 레코드가 어느 블록에 속하는지를 검색하는 방법이다.







2019년 2월 20일 수요일

[데이터베이스] 16. 자료구조 - 자료의 정렬(정렬의 구분, 종류)







1. 정렬이란?

  • 파일을 구성하는 각 레코드들을 특정 키 항목을 기준으로 오름차순(Ascending) 또는 내림차순(Descending)으로 다시 배열하는 작업이다.


1-1. 내부 정렬
  • 소량의 데이터를 주기억장치에만 기억시켜 정렬하는 방식이다.
  • 내부 정렬의 종류로는 삽입 정렬, 버블 정렬, 선택 정렬, 퀵 정렬, 히프 정렬, 셸 정렬, 2-Way Merge 정렬 등이 있다.




1-2. 외부 정렬
  • 대량의 데이터를 보조기억장치에 기억시켜 정렬하는 방식으로 대부분 병합 정렬(Merge Sort) 기법으로 처리한다.
  • 외부 정렬의 종료로는 밸런스 병합 정렬, 캐스케이드 병합 정렬, 폴리 파즈 병합 정렬 등이 있다.





2. 주요 정렬


2-1. 삽입 정렬
  • 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬하는 방식이다.
  • 정렬이 완료된 영역의 다음에 위치한 데이터가 그 다음 정렬의 대상이다.


5  3  8  1  2
오름차순 정렬 시
먼저, 3을 5와 비교하여 삽입할 위치 찾기


3  5  8  1  2  ··· 1회전 결과(3, 5 정렬 완료)


 3  5  8  1  2
8을 정렬된 영역 중 삽입할 위치 찾기


3  5  8  1  2  ··· 2회전 결과(3, 5, 8 정렬 완료)


3  5  8  1  2
1을 정렬된 영역 중 삽입할 위치 찾기


1  3  5  8  2  ··· 3회전 결과(1, 3, 5, 8 정렬 완료)


1  3  5  8  2
2를 정렬된 영역 중 삽입할 위치 찾기


2  3  5  8  ··· 4회전 결과
  



2-2. 버블 정렬
  • 주어진 파일에서 인접한 2개의 레코드 키 값을 비교하여 크기에 따라 레코드 위치를 서료 교환하는 정렬 방식이다.


8  5  6  2  4 
오름차순 정렬 시
먼저, 5와 8 비교


8  6  2  4
5  6  8  2  4
5  6  2  8  4
                   5  6  2  4  8  ··· 1회전 결과


5  6  2  4  8
다시 첫번째, 두번째 비교


6  2  4  8
5  2  6  4  8
5  2  4  6  8
                   5  2  4  6  8  ··· 2회전 결과


5  2  4  6  8
다시 첫번째, 두번째 비교


5  4  6  8
2  4  5  6  8
2  4  5  6  8
                   2  4  5  6  8  ··· 3회전 결과




2-3. 선택 정렬
  • n개의 레코드 중, 최소값을 찾아 첫번째 레코드 위치에 놓고 나머지 레코드 중에서 다시 최소값을 찾아 두번째 레코드 위치에 놓는 방식을 반복하여 정렬하는 방식이다.



  9  4  5  11  8 
오름차순 정렬 시
먼저, 9와 4 비교

4  9  11  8
9  5  11  8
 9  5  11  8
                   4  9  5  11  8  ··· 1회전 결과


9  5  11  8
두번째, 세번째 비교


5  9  11  8
4  5  9  11  8
                   4  5  9  11  8  ··· 2회전 결과


4  5  9  11  8
세번째, 네번째 비교


4  5  9  11  8
                  4  5  8  11  9 ··· 3회전 결과


4  5  8  11  9
네번째, 마지막 비교


                  4  5  8  9  11  ··· 4회전 결과