반응형

INDEX란?

RDBMS에서 검색 속도를 높이기 위한 데이터베이스 객체입니다.

INDEX는 색인입니다. 특정 TABLE의 칼럼을 색인화 하여 검색할 때 TABLE의 레코드를 전부 다 확인하는 것이 아니라

색인화 되어있는 INDEX파일을 검색하여 검색 속도를 빠르게 합니다.

 

 

INDEX 사용 이유는?

SQL 서버에서 테이블을 만들고 데이터를 추가, 수정 , 삭제할 때 데이터의 레코드는 내부적으로 아무런 순서 없이 저장이 됩니다. 데이터 저장 영역에서는 인덱스가 없는 테이블의 데이터를 찾을 때 무조건 전체 데이터 베이스를 처음부터 끝까지 다 읽어서 검색조건에 맞게 찾게됩니다. 이런 식의 검색 방법을 Full Scan이라고 하는데, 양이 엄청나게 많은 테이블에서 데이터를 불러올 때 Full Scan을 하게 되면 처리 성능이 떨어집니다. 

고로 Index는 데이터를 검색할 때 빠르게 찾기 위해 사용된다.

 

INDEX의 장단점

장점 - 

  • 무조건은 아니지만 검색 속도를 향상할 수 있습니다.
    • 인덱스를 생성 시에는 where절과 join, order by 등과 관련된 칼럼 중 사용빈도가 높고 키값의 선별도가 좋은 칼럼에 사용해야 합니다. 반대로 사용빈도가 낮고 칼럼의 선별도가 좋지 않은 (값이 True /False 같은 것들) 칼럼의 경우에는 인덱스를 사용하지 않는 것이 좋습니다
    • 테이블이 작거나 자주 갱신이 필요한 칼럼들에도 사용하지 않는 것이 좋습니다.

단점 - 

  • DB의 10% 정도의 공간이 요구됩니다.
  • 인덱스를 생성하는 시간이 크게 요구됩니다.
  • DB의 변경 작업이 잦으면 성능이 저하됩니다.
반응형
반응형

데이터베이스 트리거

트리거 ( Trigger )는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미합니다.

트리거는 DML의 데이터 상태 관리를 자동화하는 데 사용됩니다.

EX ) 데이터의 입력, 수정, 삭제 되었을때의 로그를 기록하기 위한 처리, 데이터의 무결성을 검사 등등

 

간단하게 야구선수에 관련된 정보를 담는 Table이 있다고 가정했을 때

A라는 선수는 AA라는 팀에 소속되어 있다가 BB라는 팀으로 이전을 하게 되었습니다.

우리는 A라는 선수의 팀을 BB로 바꿔야 하는데 AA라는 팀에 있었다는 이력도 가지고 있어야 한다면,

A가 BB팀으로 이전했다는 것을 UPDATE 해야 하고 또 기존에 AA라는 팀에 있었다는 것을 INSERT 해야 하는데

이걸 TABLE에 트리거를 걸어둔다면 INSERT부분이 자동으로 실행되는 것입니다.

 

 

 

트리거의 장점

  • 데이터 무결성의 강화 (참조 무결성)
  • 업무처리 자동화
    • 트리거를 사용하면 트랜잭션에 의해 자동으로 다른 명령을 일으킴으로써 업무처리를 자동화할 수 있습니다.
    • 중간에 사용자가 개입하지 않고 구현된 규칙대로 알아서 실행된다는 것입니다.

트리거의 단점

  • 트리거를 과도하게 사용한다면 복잡한 상호 의존성을 야기할 수 있습니다. 
    • 예를 들어 하나의 트리거가 활성화되어 이 트리거 내의 SQL문이 수행되고, 그 결과로 인하여 다른 트리거가 활성화되어 그 트리거의 SQL문이 수행될 수 있습니다.( 트리거의 연쇄 )
반응형

'DB' 카테고리의 다른 글

[DB] SQL Constraint란?  (0) 2020.09.02
[DB] Index의 의미와 장단점  (0) 2020.09.02
[DB] Procedure 프로시저 개요 및 장단점  (1) 2020.09.01
[DB] DBMS란 무엇일까요?  (0) 2020.08.27
[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?  (0) 2020.08.27
반응형

저장 프로시저 (Stored Procedure)

프로시저란 SQL Server에서 제공하는 프로그래밍 기능입니다.

쿼리문을 마치 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용됩니다.

여러 개의 칼럼을 조회하고 여러 개의 테이블을 조인하고 거기에 조건까지 넣어줌으로써 하나의 쿼리를 만드는데

엄청나게 긴 쿼리문이 생기게 됩니다.

이러한 여러개의 쿼리를 사용할 때마다 긴 쿼리문을 써야 한다면 엄청나게 불편할 텐데 이를 프로시저에 저장하고

저장된 프로시저를 호출하여 프로그래밍을 하는것이 훨씬 효율적입니다.

 

 

 

저장 프로시저의 장점

저장 프로시저를 사용하게되면 여러 가지 장점들이 있습니다.

  1.  하나의 요청으로 여러 SQL문을 실행 할 수 있습니다.
  2. 네트워크 소요 시간을 줄일 수 있습니다.
    • 만약 동일한 쿼리를 1000번 2000번 호출하는 것보다 SP를 이용해서 구현한다면 SP를 호출할 때 한 번만 네트워크를 경유하기 때문에 네트워크 소요시간을 줄이고 성능을 개선할 수 있습니다.
  3. 개발 업무를 구분해 개발 할 수 있습니다.
    • 순수한 애플리케이션만 개발하는 조직과 DBMS 관련 코드를 개발하는 조직이 따로 있다면, DBMS 개발하는 조직에서는 데이터베이스 관련 처리하는 SP를 만들어 API처럼 제공하고 애플리케이션 개발자는 SP를 호출해서 사용하는 형식으로 역할을 구분하여 개발이 가능합니다.

 

저장 프로시저의 단점

저장 프로시저의 장점에 대해 알아보았다면 이제 단점에 대해서도 알아볼 필요가 있습니다.

  1. 처리 성능이 낮습니다.
    • 문자나 숫자 연산에 저장 프로시저를 사용한다면 오히려 C나 JAVA보다 느린 성능을 보여줍니다.
  2. 디버깅이 어렵습니다.
  3. DB 확장이 매우 힘듭니다.
    • 서비스 사용자가 많아져 서버수를 늘려야할 때, DB 수를 늘리는 것이 더 어렵습니다.
      • 서비스 확장을 위해 서버수를 늘릴경우 DB 수를 늘리는 것보다 WAS의 수를 늘리는 것이 더 효율적이기 때문에 대부분의 개발에서 DB에는 최소의 부담만 주고 대부분의 로직은 WAS에서 처리할 수 있게 합니다.

 

반응형

'DB' 카테고리의 다른 글

[DB] SQL Constraint란?  (0) 2020.09.02
[DB] Index의 의미와 장단점  (0) 2020.09.02
[DB] Trigger 트리거 개요 및 장단점  (0) 2020.09.01
[DB] DBMS란 무엇일까요?  (0) 2020.08.27
[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?  (0) 2020.08.27
반응형

이 글을 보고 계신다면 아마 애드센스 승인을 받으신 뒤 일 겁니다.

구글 애드센스는 자동으로 광고를 넣어주는 서비스를 하고 있는데 저도 몇 달 그렇게 사용해보니

불편한 점도 있었고 뭔가 매번 광고 위치도 달라지는 것 같고 

어떨 때는 광고가 나오고 또 어떨때는 광고가 나오지 않는다는 것을 알고 난 뒤,

저는 수동으로 광고를 달았습니다.

 

글 내용 안에서 수동 광고는 다들 아시겠지만

기본 모드 클릭 후 html로 들어가서 광고 코드를 원하는 곳에 붙여 놓는 것입니다.

그렇다면 우리가 만약 블로그 좌, 우측이나 다른 곳에 광고를 넣고 싶다면 어떻게 해야 할까요?

 


1. 애드센스 원하는 위치에 광고 넣기

    1-1. 원하는 위치를 찾습니다. 

제 메인화면입니다. 저는 우측 최근 글 위에 광고와

전체 글 목록 바로 위에 광고를 두고 싶었습니다.

그래서 블로그 관리 - 꾸미기 - 스킨 편집에 들어간 뒤, 

html 편집에 들어갑니다.

그러면 우측에 여러 가지 코드들이 들어가 있을 텐데요.

여기서 Ctrl+f 를 눌러줍니다.

컨트롤+F키는 원하는 글자를 찾아주는데

일단 저는 최근 글 위에 올려두고 싶으니까 '최근글'을 검색합니다.

<!-- 최근글 -->이라는 주석 위에 우리는 복사해두었던 코드를 붙여 넣으시면 됩니다.

나머지도 마찬가지로 원하는 위치 근처에 있는 글자들을 확인 한 뒤

Ctrl +F로 위치를 찾아 찾은 곳 바로 위에 애드센스 광고 코드를 붙여 넣으시면 됩니다.

반응형
반응형

 자바를 이용한 간단한 구구단게임을 만들어 봅시다.

 

1번

쉬운 구구단게임 만들기

1. 컴퓨터가 1~9까지의 숫자 2개를 랜덤으로 생성합니다.

2. 생성한 숫자 2개의 곱셈을 미리합니다.

3. 사람에게 랜덤 생선된 2개 숫자의 곱셈을 물어봅니다.

4. 만약 사람의 정답과 컴퓨터의 정답이 같다면,

정답이라 출력하고 그게 아니라면 오답이라는 문구와 문제,정답을 함께 출력합니다.

1번 풀이 바로가기

2번

1번 + 오답일때만 문제를 반복생성하도록 합니다.

1. 컴퓨터가 1~9까지의 숫자 2개를 랜덤으로 생성합니다.

2. 생성한 숫자 2개의 곱셈을 미리합니다.

3. 사람에게 랜덤 생선된 2개 숫자의 곱셈을 물어봅니다.

4. 만약 사람의 정답과 컴퓨터의 정답이 같다면,

정답이라 출력하고 그게 아니라면 오답이라는 문구와 문제,정답을 함께 출력합니다.

5. 만약 오답을 제출할 경우, 새로운 문제를 냅니다.(재귀함수는 사용하지 않습니다)

 

2번 풀이 바로가기

 

3번

1번 + 5번의 문제만 생성된다.  5개의 문제가 완료되면 점수로 환산해서 나온다.

1. 컴퓨터가 1~9까지의 숫자 2개를 랜덤으로 생성합니다.

2. 생성한 숫자 2개의 곱셈을 미리합니다.

3. 사람에게 랜덤 생선된 2개 숫자의 곱셈을 물어봅니다.

4. 정답/오답을 출력합니다.

5. 5번의 문제를 내준 뒤, 사람이 맞춘 문제들을 점수화해서 점수를 출력합니다.

3번 풀이 바로가기

 

 

 

 

 

 

 

 

 

 

 

 

<1번 정답>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package jan_1.selftest;
 
import java.util.Random;
import java.util.Scanner;
 
public class MulGame {
    int x; // 랜덤으로 생성 할 숫자 
    int y;
    int z;  // 사람이 적을 답
    int answer; // 계산된 답
    Scanner scan = new Scanner(System.in); // 정답을 받아냄
    Random random = new Random(); // 랜덤숫자 생성
    
    MulGame(){
        System.out.println("구구단 게임을 시작합니다.");
        makeMul();
    }
    
    void makeMul(){
        x = random.nextInt(9)+1;
        y = random.nextInt(9)+1;
        answer = x*y; // 시스템 정답 저장
        System.out.println(x+"X"+y+"= ?");
        z = scan.nextInt(); // 사람이 적은 정답 저장
        if(z == answer) { 
            System.out.println("정답입니다!");
        }else {
            System.out.println("오답입니다!");
        }
    }
    
    public static void main(String[] args) {
        MulGame mulgame = new MulGame();
    }
}
 

<2번정답>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package jan_1.selftest;
 
import java.util.Random;
import java.util.Scanner;
 
public class MulGame {
    int x; // 랜덤으로 생성 할 숫자 
    int y;
    int z;  // 사람이 적을 답
    int answer; // 계산된 답
    Scanner scan = new Scanner(System.in); // 정답을 받아냄
    Random random = new Random(); // 랜덤숫자 생성
    
    MulGame(){
        System.out.println("구구단 게임을 시작합니다.");
        makeMul();
    }
    
     public void makeMul(){
        while(true) {
            x = random.nextInt(9)+1;
            y = random.nextInt(9)+1;
            answer = x*y; // 시스템 정답 저장
            System.out.println(x+"X"+y+"= ?");
            z = scan.nextInt(); // 사람이 적은 정답 저장
            if(z == answer) { 
                System.out.println("정답입니다!");
                break;
            }else {
                System.out.println("오답입니다! \n"
                        +x+"X"+y+"의 값은 "+answer+" 입니다.\n"
                                + "새로운 게임을 시작합니다");
            }
        }
    }
    
    public static void main(String[] args) {
        MulGame mulgame = new MulGame();
    }
}
 

 

 

<3번 정답>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package jan_1.selftest;
 
import java.util.Random;
import java.util.Scanner;
 
public class MulGame {
    int x; // 랜덤으로 생성 할 숫자 
    int y;
    int z;  // 사람이 적을 답
    int answer; // 계산된 답
    int i; // 문제반복
    int score; // 점수
    Scanner scan = new Scanner(System.in); // 정답을 받아냄
    Random random = new Random(); // 랜덤숫자 생성
    
    MulGame(){
        System.out.println("구구단 게임을 시작합니다.");
        makeMul();
    }
    
     public void makeMul(){
        while(i < 5) {
            i++;
            x = random.nextInt(9)+1;
            y = random.nextInt(9)+1;
            answer = x*y; // 시스템 정답 저장
            System.out.println(x+"X"+y+"= ?");
            z = scan.nextInt(); // 사람이 적은 정답 저장
            if(z == answer) { 
                System.out.println("정답입니다!");
                score +=  20;
            }else {
                System.out.println("오답입니다!");
            }
        }
        if(score == 100) {
            System.out.println("만점입니다! 대단합니다!");
        }else {
            System.out.println("최종점수는 100점 만점 중 "+score+" 점입니다."
                    + "\n아쉽게만점을 받지 못했습니다.\n"
                    + "분발하세요!");
        }
    }
    
    public static void main(String[] args) {
        MulGame mulgame = new MulGame();
    }
}
 
반응형
반응형

전세계에서 사랑받고 있는 검색엔진인 Google에 티스토리 블로그나 워드프레스를 등록하여 더 많은 방문자 유입을 기대할 수 있습니다. 가장 먼저 구글 웹마스터도구( 구글서치콘솔 )를 등록 해야합니다.

  1. 티스토리 서치콘솔 등록하기
  2. 워드프레스 서치콘솔 등록하기
  3. 서치콘솔 꼭 등록해야하나?

 티스토리 서치콘솔 등록하기

여기를 눌러주세요

클릭하시게 되면 구글서치콘솔 (Google Search Console) 홈페이지로 이동합니다.

시작하기

이렇게 생긴버튼을 클릭 후, 

좌측상단 속성추가를 클릭한 뒤, 속성 유형 선택이 나오면 “URL접두어”라고 적혀있는쪽에 자신의 블로그 URL을 적어주세요.

소유권확인에 관한 페이지가 뜨는데 

다른확인방법 – HTML 태그를 클릭해, 하단부분 메타태그를 복사해주세요.

자신의 티스토리 블로그 관리페이지 메뉴부분에 스킨편집을 누르신 후에,

우측상단 html편집을 눌러주세요.

우측 <head> 와 </head> 사이에 복사한 메타태그를 붙여주면 끝이납니다.

<!—-> 주석을 사용하여 구분이 가능합니다.

다시 구글서치콘솔 페이지로 돌아와, 좌측메뉴 색인-Sitemap을 클릭해, 새로운 사이트맵을 추가해줍니다.

rss를 하나 제출해 주신 뒤, 만들어둔 sitemap을 제출하시면 끝이 납니다.

사이트맵 만들러 가기


 워드프레스 구글서치콘솔 등록하기

저번 사이트맵 만들기와 다르게 워드프레스의 서치콘솔 등록이

티스토리 서치콘솔 등록보다 쉽지 않습니다.

하지만 더 어렵지도 않고 방법은 비슷한데요.

티스토리 방법과 같이 서치콘솔 홈페이지에 들어간 뒤,

HTML 메타태그를 받습니다.

그리고 플러그인에 들어가서

Insert Headers and Footers 라는 플러그 인은 다운받습니다.

설치가 완료된 후, 좌측 설정 – insert Headers and Footers를 클릭합니다.

이렇게 받은 HTML 메타태그를 상단 HEADER 부분에 복사 – 붙여넣기를 한 뒤 하단부분 저장을 눌러주시면 끝이 납니다.

Tips) HTML 주석인 <!– 내용 –> 을 이용하여 특정메타태그가 어떤 메타태그인지 적어주시면 나중에 메타태그 정리할때 편리합니다.


 구글/네이버 서치콘솔 꼭 필요할까요?

구글서치콘솔은 구글에서 무료로 제공하는 서비스로, 사용자가

사이트의 구글 검색결과 인지도를 모니터링 하고 관리하도록 도와 줍니다.

예를들어,

현재 내 사이트의 총 노출수, 클릭수 평균 CTR, 평균 게재순위 등을 알 수 있습니다.

평균 게재순위는 구글 SEO만 알맞게 잘 쓰신다면 차근차근 올라가는 것으로 보입니다.

( ??? : 한달전에 평균게재순위 70위 )

또한 이처럼 색인생성범위에 오류가 없는지 , 유효한지 확인도 가능합니다.

만약 색인이 생성되지않고 sitemap제출이 되어있지 않다면,

자신의 블로그의 글이 노출되기까지 상당한 시간이 걸리는 것으로 알고있습니다.

네이버 웹마스터도구 같은경우,

2019년도 기준으로 네이버에서는 네이버블로그를 제외한 다른 신규 티스토리블로그나

워드프레스의 유입이 힘들어졌다고 들었습니다.

자세한 사항은 저도 확인해 봐야 알겠지만

기존부터 꾸준히 포스팅해오던 블로그가 아닌이상 더이상 네이버 유입은 힘들것 같습니다.

( 추후 알아보는데로 정확한 포스팅 예정입니다 🙂 )

이만 여기까지 구글서치콘솔 등록하는법을 포스팅했습니다.

반응형
반응형

오늘은 블로그가 조금 더 검색에 최적화되게 만들어주는 sitemap 을 생성하는법을 알려드리려고합니다.

XML 사이트 맵은 웹 사이트의 중요한 페이지를 나열하여 구글 또는 네이버가 모든 페이지를 찾아서 크롤링 할 수 있도록하며 웹 사이트 구조를 이해하는 데 도움을줍니다.

안해도 언젠가는 크롤링 되고 검색이 되겠지만 저희는 하루라도 일찍

블로그가 노출되길 원하니 사이트맵을 꼭 만들어주도록 합시다!

  1. 티스토리 사이트맵 만들기
  2. 워드프레스 사이트맵 만들기

티스토리 sitemap 만들기

가장 우선  여기 를 클릭 해 사이트맵을 만들어주는 사이트로 이동해주세요.

여기 사이트말고도 사이트맵을 만들어 주는 사이트가 많지만, 제가 알고 있기로 여기만

https:// 를 지원해주는것으로 알고있습니다.

(혹시라도 다른곳도 지원해준다면 알려주세요)

2020년 03월 02일 추가 ) 현재 더 많은 사이트맵 사이트들이 https를 지원한다고 합니다 🙂

이곳에 본인의 블로그 주소를 입력 후 , Create Sitemap을 바로 클릭하지마시고

하단 Frequency – priority메뉴 가장 상단부분 Monthly Frequency 이 부분을 ===>  Always Frequency 로 설정해주세요.

그 뒤에 Create Sitemap을 누르시면 됩니다.

사이트맵이 만들어지는데 까지 걸리는 시간은 생각보다 오래걸립니다.

더욱이 블로그에 이미 게시되어있는 글들이 많다면 더욱 오래걸리구요.

저같은경우 100개의 글이 넘는 블로그는 30분이 넘게 걸렸습니다…ㅠㅠ

완료가 다 된 후, 좌측하단에 XML sitemap Download를 클릭해 자신의 사이트맵을 저장합니다.

파일의 기본이름인 sitemap.xml 은 절대 변경하지 말아주세요!

이렇게 sitemap파일을 만들고 나면

이제 블로그로 돌아와 <비공개>로 글작성을 하나 해주세요.

그 글안에 다운받은 sitemap.xml을 첨부해주신 뒤, 저장해주세요.

2020년 03월 02일 ) 티스토리 간혹 첨부가 안되거나 하단의 링크주소를 복사했는데 주소가 티스토리가 아닌, 카카오로 나온다면 글쓰기 양식을 구버전으로 잠시 변경 후에 사이트맵 등록을 하셔야합니다

앞으로 sitemap을 제출하실때에는,

이 파일의 링크주소를 복사 해 제출하시면 됩니다. 

구글서치콘솔 등록하러가기


워드프레스로 사이트맵 만들기

티스토리와 다르게 워드프레스는 간단하게 플러그인 설치 만드로도

사이트맵을 따로 만들어서 포스팅 후 url을 제출한다거나 하지않아도 됩니다.

플러그인 “Yoast SEO”를 설치한 뒤, 활성화를 시켜주세요.

그 다음 좌측 메뉴에 있는 SEO를 클릭한 뒤, General – > Features로 들어가시면 됩니다.

중간에 XML sitemap이라고 적혀있는게 보이시나요?

그 옆에 물음표를 클릭하시면,

See the XML sitemap 이라고 적혀있는 곳을 클릭하면 새로운 창으로 이동하게 되는데

그 새로운 창 사이트 주소가 앞으로 사용하게될 사이트맵 주소입니다!

티스토리에 비해서 훨씬 쉽죠~?

여담이지만 확실히 티스토리보다 워드프레스가 더 어려운부분도 많지만

플러그인들이 다양해서 이러한 작업할때에는 워드프레스가 더 편한것 같아요!

혹시라도 티스토리하시는분들중에 워드프레스를 해 보고싶으신분이 계신다면

언제든 편하게 연락주세요 🙂

반응형
반응형

API란?

API의 정의와 인터페이스의 정의를 위키백과에서 살펴보도록 하겠습니다.

  • API(Application Programming Interface)의 약자입니다.
  • API는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

Interface 란?

  • 인터페이스(interface)는 컴퓨터 시스템끼리 정보를 교한하는 공유 경계를 의미한다, 터치 스크린과 같은 일부 컴퓨터 하드웨어 장치들은 인터페이스를 통해 데이터를 송수신 할 수 있으며, 마우스나 마이크론 폰가 같은 장치들은 오직 시스템에 데이터를 전송만 하는 인터페이스를 제공한다.

간단하게 이야기하자면 인터페이스는 사물과 사물 또는 사물과 사람사이에서 상호간의 소통을 위해 만들어진 매개체나 규약이라고 생각하면 됩니다.

 

결국 API는 어떤 프로그램에서 데이터를 주고 받기 위한 방법입니다.

예를들어 League Of Legend라는 게임의 api를 예로들어 설명하겠습니다.

(요즘 LOL.. 다들 아시죠?)

LOL은 따로 Developer 사이트가 존재합니다.

 

이러한 라이엇 디벨로퍼 사이트에서 어떠한 방식으로 데이터를 제공하는지, 어떻게 요청해야하는지에 대한 규격들을 

API라고 하는것입니다.

 

 

반응형

+ Recent posts