반응형

이전 포스팅들을 통해 간단하게 Cypher를 이용하여 그래프를 다루는 법을 알아보았다.

 

이번 시간에는 그래프를 표현하는 방법패턴에 대해 알아보도록 한다.

패턴은 하나이상의 노드 or 엣지의 조합으로 나타내며 패턴을 어떻게 작성하는지는 그래프에서 매우 중요한 부분이다.

 

노드(Node)

노드는 괄호()를 이용하여 표현하며 레이블(vlabel), 속성(property), 변수(variable)을 이용하여 더욱 구체화 할 수 있다.

 

1. 기본 노드 패턴

()

괄호 안에 레이블, 속성 등을 표기하지 않는 패턴모든 노드를 의미한다.

 

2. 레이블(vlabel) 추가 노드 패턴

(:person)

노드에 레이블을 표현하고자하면 괄호 안에 (:vlabel_name)으로 표기한다. 위의 예는 person이라는 vlabel을 갖고 있는 노드를 의미한다.

 

3. 변수(variable) 추가 노드 패턴

(v)
(var)
(v:person)

노드에 변수(variable)을 부여하고자 한다면 (variable_name)으로 표기한다. 변수는 알파벳(a~z), 숫자(0~9), 언더바(_)의 조합으로 명명할 수 있다.(숫자로 시작 x) 노드에 변수와 레이블을 동시에 나타내고자 할 때는 (variable_name:vlabel_name)으로 표기한다.

 

4. 속성(property) 추가 노드 패턴

({name: 'Jack'})
(v:person {name: 'Jack'})
(v:person {name: 'Jack', age: 24})

노드 안에 속성(property)를 표현하고자 한다면 ({property_name:property_value})로 표기한다. 값이 문자열(string)인 경우에 작은 따옴표('')로 값을 감싸주어야하며, 속성을 여러개 표현하고자 한다면 콤마(,)를 이용한다.

 

엣지(Edge)

엣지는 2개의 대시(-)와 화살괄호(<,>)를 이용하여 표현하며 레이블(elabel), 속성(property), 변수(variable)을 이용하여 더욱 구체화 할 수 있다. 

 

1. 기본 엣지 패턴

-[]-
-[]->
<-[]-

대괄호([]) 안에 레이블, 속성 등을 표기하지 않는 패턴모든 엣지를 의미한다. 화살괄호를 추가하면 방향을 가진 모든 엣지를 의미한다.

 

2. 레이블(elabel) 추가 엣지 패턴

-[:knows]->

엣지에 레이블을 표현하고자하면 대괄호 안에 -[:elabel_name]-> 으로 표기한다. 위의 예는 know이라는 elabel을 갖고 있는 엣지를 의미한다.

 

3. 변수(variable) 추가 엣지 패턴

-[e]->
-[e:likes]->

엣지에 변수(variable)를 부여하고자 한다면 -[variable_name]->으로 표기한다. 엣지에 변수와 레이블을 동시에 나타내고자 할 때는 -[variable_name:elabel_name]->으로 표기한다.

 

4. 속성(property) 추가 엣지 패턴

-[{why: 'She is lovely'}]->
-[:likes {why: 'She is lovely'}]->
-[e:likes {why: 'She is lovely'}]->

엣지 안에 속성(property)를 표현하고자 한다면 -[{property_name:property_value}]->로 표기한다. 값이 문자열(string)인 경우에 작은 따옴표('')로 값을 감싸주어야하며, 속성을 여러개 표현하고자 한다면 콤마(,)를 이용한다.

 

노드와 엣지 (Nodes & Edges)

패턴은 노드와 엣지를 각각 표현할 수도 있고, 함께 사용하여 표현할 수도 있다.

 

1. 기본 노드&엣지 패턴

()-[]->()

노드와 엣지를 함께 사용하는 패턴의 기본틀은 ()-[]->()이다.

 

2. 레이블(label), 변수(variable), 속성(property) 추가 노드&엣지 패턴

(jack:person {name: 'Jack'})-[k:knows]->(emily:person {name: 'Emily'})

노드와 엣지 각각의 패턴 표현과 마찬가지로 노드&엣지 패턴에서도 레이블, 변수, 속성을 추가하여 패턴을 구체화할 수 있다. 

 

3. 패턴 전체에 변수(variable) 추가 노드&엣지 패턴

p = (:person)-[:knows]->(:person)

변수는 노드와 엣지 각각에도 부여할 수 있지만 패턴 전체를 대상으로도 부여할 수 있다. 패턴 전체에 변수를 부여하고자 한다면 =를 이용한다. 위 예제에서 p는 변수(variable)이고, =을 이용하여 패턴 전체를 대상으로 변수를 적용하였다.

 

Path

패턴 내에서 노드와 엣지의 개수는 지속적으로 증가할 수 있다. 이러한 과정에서 패턴 내 일련 경로의 단위를 path라고 한다.

 

(a)-[]->( )-[]->(c)
(a)-[*2]->(c)

(a)-[]->( )-[]->( )-[]->(d)
(a)-[*3]->(d)

(a)-[]->( )-[]->( )-[]->( )-[]->(e)
(a)-[*4]->(e)

길이가 긴 path의 경우, 가독성을 높이고 작성의 편의성을 위해 축약된 형태로 바꿀 수 있다. 노드 n개가 엣지를 n-1번 거쳐서 간다면 대괄호 내에 별표(*)와 함께 n-1을 표기하면 된다. 위의 첫번째 예제에서 a노드는 c노드까지 2번을거쳐 가므로 대괄호 안에 별표와 함께 2를 표기하여 표기하였다.

 

Flexible Length

패턴을 작성하다보면 상황에 따라 한 질의 내에서 거쳐야 하는 엣지의 수에 동적인 변화를 줘야하는 경우가 생길 수 있다.

 

(a)-[*2..]->(b)
(a)-[*..7]->(b)
(a)-[*3..5]->(b)
(a)-[*]->(b)

path의 길이에 동적인 변화를 부여하고 싶을 때는 대괄호 내에 ..를 표기하면 된다. 위 예제는 차례대로 엣지의 개수를 2개 이상 지닌 path, 7개 이하 지닌 path, 3개 이상 5개 이하 지닌 path, 무한 길이의 path를 뜻한다.

 

이것으로 이번 포스팅에서는 Cypher에서 그래프를 표현하는 방법, 패턴에대해 알아보았다.

 

다음 포스팅에서는 레이블의 상속 방법에대해 다뤄보도록한다.

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

이전 포스팅들을 통해 GDB에 데이터를 적재하고 조회하는 방법까지 알아보았다.

Cypher - 그래프 질의하기

 

Cypher - 그래프 질의하기(Querying Graph)

이전 포스팅들을 통해 GDB에 그래프와 레이블을 생성한 후, 노드&엣지를 생성하였다. Cypher - 노드&엣지 생성/제거하기 Cypher - 노드&엣지 생성/제거하기(CREATE/DELETE Node&Edge) GDB를 사용하기 위해서는

jobdahan-tech.tistory.com

이번에는 GDB에서 적재한 데이터를 수정하는 방법을 알아보도록 한다.

 

그래프 수정(Mnipulating Graph)

기존에 있던 그래프 데이터를 수정하기 위해서는 그래프 조회 때와 마찬가지로 MATCH 절의 패턴을 표기하여 해당 그래프를 찾아낸 뒤에 수정 작업을 해야 한다.

 

그래프를 수정하는 쿼리는 다음과 같다.

MATCH (v:label_name {property: 'property_name'})
SET v.property = 'property_name2'

MATCH 절은 해당 절에 표기된 패턴에 부합하는 그래프 데이터를 찾아낸다. 그리고 SET 절을 이용하여 노드나 엣지의 속성 값을 설정할 수 있다. (기존의 속성 값: property_name -> 새로 설정한 속성 값: property_name2)

 

패턴을 표기하는 방법은 다음 포스팅을 참고한다.

Cypher - 그래프 표현 방법, 패턴(Pattern)

 

Cypher - 그래프 표현 방법, 패턴(Pattern)

이전 포스팅들을 통해 간단하게 Cypher를 이용하여 그래프를 다루는 법을 알아보았다. 이번 시간에는 그래프를 표현하는 방법인 패턴에 대해 알아보도록 한다. 패턴은 하나이상의 노드 or 엣지의

jobdahan-tech.tistory.com

 

예시

이전에 적재한 그래프 정보에서 이름이 '박OO'인 사람의 나이'박OO'이 '이OO'에게 남긴 좋아요 수 속성 값을 새로 설정해보록 한다.

속성 값을 수정하는 질의는 다음과 같다.

MATCH (v:n_user{name:'박OO'})-[r:e_follow{like:0}]->(v2:n_user{name:'이OO'})
SET v.age = 31, r.like = 1;

우선 MATCH절로 '박OO'와 '이OO'의 관계를 나타내는 패턴을 표기하여 원하는 그래프를 찾는다. 그리고 SET절을 이용하여 변수v에 해당하는 사용자 '박OO'의 나이 속성 값을 31변수 r에 해당하는 '박OO'과 '이OO' 팔로우 관계의 좋아요 수속성 값을 1로 변경한다.

 

쿼리의 결과는 다음과 같다.

쿼리를 실행하면 'UPDATE 2' 알림을 통해 속성 값 두가지가 업데이트 됨을 알 수 있다.

 

이제 새로 설정한 속성 값이 잘 변경이 되었는지 조회를 통해 확인하도록 한다.

MATCH (v:n_user{name:'박OO'})-[r:e_follow]->(v2:n_user{name:'이OO'})
RETURN *;

마찬가지로 MATCH절을 통해 '박OO'와 '이OO'의 관계를 나타내는 패턴을 표기하여 원하는 그래프를 찾고, RETURN절을 통해 모든 속성 값들을 조회하여 새로 설정한 값들이 잘 변경되었는지 확인한다.

 

조회의 쿼리를 실행한 결과는 다음과 같다.

위의 결과를 통해 사용자 '박OO'의 나이가 31, '박OO'이 '이OO'에게 남긴 좋아요 수가 1로 변경이 된것을 확인할 수 있다.

 

이것으로 이번 포스팅에서는 Cypher를 이용하여 그래프를 수정하는 방법을 알아보았다.

 

다음 포스팅에서는 이전의 포스팅들에서 많이 언급이 되었던 그래프를 표현하는 방법, 패턴에대해 알아보도록한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

이전 포스팅들을 통해 GDB에 그래프와 레이블을 생성한 후, 노드&엣지를 생성하였다.

Cypher - 노드&엣지 생성/제거하기

 

Cypher - 노드&엣지 생성/제거하기(CREATE/DELETE Node&Edge)

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다. 이전 포스팅들을 통해 그래프와 레이블을 생성하고 삭제하는 방법까지 알아보았다. Cypher - 레이블

jobdahan-tech.tistory.com

이제 GDB에 노드&엣지가 생성이 잘 되었는지 질의를 통해 조회 해보도록 한다.

 

그래프 질의(Querying Graph)

그래프를 대상으로 질의를 한다는 것찾고자 하는 그래프를 패턴으로 표기하여 찾아낸 뒤 해당 그래프 내에서 원하는 정보를 추출해내는 것이다.

 

그래프를 조회하는 쿼리는 다음과 같다.

MATCH (:vlabel_name{property:'property_name'})-[:elabel_name]->(v:vlabel_name)
RETURN v.property;

property
-------------
property_name
(1 row)

MATCH 절해당 절에 표기된 패턴에 부합하는 그래프 데이터를 찾아낸다. 그리고 찾은 그래프에서 반환하고자 하는 요소만RETURN 절에 명시한다.

 

패턴을 표기하는 방법은 다음의 포스팅을 참고하도록 한다.

Cypher - 그래프 표현 방법, 패턴(Pattern)

 

Cypher - 그래프 표현 방법, 패턴(Pattern)

이전 포스팅들을 통해 간단하게 Cypher를 이용하여 그래프를 다루는 법을 알아보았다. 이번 시간에는 그래프를 표현하는 방법인 패턴에 대해 알아보도록 한다. 패턴은 하나이상의 노드 or 엣지의

jobdahan-tech.tistory.com

 

예시

이전 포스팅에서 사용자 정보를 노드, 팔로우 정보를 엣지로 생성하였다.

우선 생성한 노드 정보를 질의해보도록 한다.

-- 모든 속성 정보 조회
MATCH (v:n_user)
RETURN *

-- 노드의 이름 정보만 조회
MATCH (v:n_user)
RETURN v.name

MATCH절로 노드의 패턴에 부합하는 그래프 데이터를 찾은 뒤 RETURN 절로 원하는 요소를 반환한다.

RETURN 절 뒤의 *는 모든 요소(속성)를 반환함을 의미하고 v.name은 v라는 변수를 부여한 n_user레이블 노드의 이름 속성을 반환함을 의미한다.

 

쿼리의 결과는 다음과 같다.

위의 쿼리를 실행하면 노드의 모든 정보가 조회됨을 알 수 있다.

밑의 쿼리를 실행하면 노드의 이름 정보만 조회됨을 알 수 있다.

 

다음으로 엣지 정보를 질의해보도록 한다.

-- 엣지의 모든 속성 정보 조회
MATCH (v:n_user)-[r:e_follow]->(v2:n_user)
RETURN r;

-- 노드&엣지의 모든 속성 정보 조회
MATCH (v:n_user)-[r:e_follow]->(v2:n_user)
RETURN *;

MATCH절로 패턴에 부합하는 그래프 데이터를 찾으므로 RETURN절로 전체 속성을 반환(*)하게 되면 노드와 엣지의 모든 정보가 조회가 된다. 따라서, 엣지의 정보만 질의하기 위해서는 RETURN절에 엣지의 변수 r만 반환해야 한다.

 

쿼리의 결과는 다음과 같다.

위의 쿼리를 실행하면 엣지의 정보만 조회가 된다.

밑의 쿼리를 실행하면 패턴에 부합하는 모든 노드와 엣지의 정보가 조회가 된다.

 

이것으로 이번 포스팅에서는 Cypher를 이용하여 질의를 하는 방법을 알아보았다.

 

다음 포스팅에서는 그래프를 수정하는 방법에대해서 알아보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다.

 

이전 포스팅들을 통해 그래프와 레이블을 생성하고 삭제하는 방법까지 알아보았다.

Cypher - 레이블 생성 & 삭제하기

 

Cypher - 레이블 생성&삭제하기(CREATE/DROP LABEL)

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다. 이전 포스팅에서 그래프를 생성하고 삭제하는 방법까지 알아보았다. Cypher - 그래프 생성&삭제하기

jobdahan-tech.tistory.com

이번 포스팅에서는 노드&엣지를 생성하고 삭제하는 방법을 알아본다.

 

노드&엣지 생성하기(CREATE Node&Edge)

이전 포스팅에서 언급한 바와 같이 GDB는 국내 유일 GDB 기업 비트나인의 AgensGraph를 사용하고, 결과를 보기위한 클라이언트 애플리케이션은 PostgreSQL의 Pgadmin을 사용하도록 한다.

 

노드&엣지를 생성하는 쿼리는 다음과 같다.

CREATE (:vlabel_name {property: 'property_name'});
CREATE (:vlabel_name {property: 'property_name'})-[:elabel_name]->(:vlabel_name {property: 'property_name2'});

CREATE절은 노드&엣지 생성하는 명령이며  생성할 노드 혹은 엣지를 패턴으로 작성하여 사용한다. 패턴을 표현하는 방법에 대해서는 다음의 포스팅을 참고하도록 한다.

 

노드&엣지 제거하기(DELETE Node&Edge)

노드와 엣지를 만들었으니 이제 삭제하는 방법에 대해 알아본다.

 

노드와 엣지를 삭제하는 쿼리는 다음과 같다.

-- Delete Node
MATCH (v:vlabel_name {property:'property_name'})
DELETE v;

-- Delete Edge
MATCH (v:vlabel_name {property:'property_name'})-[r:elabel_name]->(v2:vlabel_name {property:'property_name2'})
DELETE l;

DELETE절은 노드 or 엣지를 제거하는 절이며 MATCH절을 통해 제거하고자 하는 노드 or 엣지를 찾고 DELETE절에 variable을 표기하여 해당 노드 or 엣지를 제거한다. 단, 제거하려는 노드가 다른 노드와 엣지로 연결되어 있다면 해당 엣지를 먼저 제거해야 노드가 제거된다.

 

예시

이전 포스팅에서 GDB 설명 포스팅의 예시 그래프를 이용하여 sns_network라는 이름의 그래프를 만들고, n_user, e_follow라는 레이블을 생성했다. 다음으로 각 노드와 엣지를 생성해야 한다.

위의 그래프에서 노드의 정보 사용자 정보이고 엣지의 정보 팔로우 정보이므로 사용자 정보 테이블을 이용하여 노드를 생성하고 팔로우 정보 테이블을 이용하여 엣지를 생성한다.

-- Create Node
CREATE (:n_user {name:'김OO', gender:'M', age:27, address:'서울'});
CREATE (:n_user {name:'이OO', gender:'W', age:22, address:'인천'});
CREATE (:n_user {name:'박OO', gender:'W', age:30, address:'부산'});
-- Create Edge
MATCH (v:n_user{name:'김OO'}), (v2:n_user{name:'이OO'})
CREATE (v)-[:e_follow {like:3, comment:5}]->(v2);
MATCH (v:n_user{name:'이OO'}), (v2:n_user{name:'김OO'})
CREATE (v)-[:e_follow {like:2, comment:5}]->(v2);
MATCH (v:n_user{name:'박OO'}), (v2:n_user{name:'이OO'})
CREATE (v)-[:e_follow {like:0, comment:1}]->(v2);

노드와 엣지를 생성하는 쿼리는 위와같다.

 

엣지를 생성할 때 CREATE절만 사용하면 row마다 새로운 노드와 엣지가 생성되므로 노드가 중복이 되어 생성된다. 따라서, MATCH절을 이용하여 엣지를 생성할 노드들을 정해준 후 엣지를 생성해야 한다.

 

노드와 엣지를 한번에 생성한 쿼리를 실행한 결과는 다음과 같다.

작성한 쿼리를 선택한 후 1번의 실행 버튼을 누르면 밑에 쿼리가 성공적으로 실행됨을 알려주고, 다음으로 노드와 엣지의 데이터의 수 count_rows를 선택하면 데이터가 생성된 것을 알 수 있다.

지금까지 사용자 정보 테이블을 이용하여 노드, 팔로우 정보 테이블을 이용하여 엣지를 생성하였다.

 

이를 DELETE절을 이용하여 제거해주도록 한다.

-- Delete Edge
MATCH (v:n_user{name:'김OO'})-[r:e_follow{like:3}]->(v2:n_user{name:'이OO'})
DELETE r;
MATCH (v:n_user{name:'이OO'})-[r:e_follow{like:2}]->(v2:n_user{name:'김OO'})
DELETE r;
MATCH (v:n_user{name:'박OO'})-[r:e_follow{like:0}]->(v2:n_user{name:'이OO'})
DELETE r;

-- Delete Node
MATCH (v:n_user{name:'김OO'})
DELETE v;
MATCH (v:n_user{name:'이OO'})
DELETE v;
MATCH (v:n_user{name:'박OO'})
DELETE v;

위에서 설명한바와 같이 제거하려는 노드가 다른 노드와 엣지로 연결되어 있다면 해당 엣지를 먼저 제거해야 노드가 제거되므로 엣지를 먼저 제거한 후 노드를 제거한다.

 

노드와 엣지를 제거하는 쿼리를 실행한 결과는 다음과 같다.

작성한 쿼리를 선택하여 1번 버튼으로 실행하면 아래의 메시지를 통해 노드와 엣지가 제거된 것을 알 수 있고, 2번을 통해 노드와 엣지의 데이터의 수 count_rows를 선택하면 데이터가 제거된 것을 알 수 있다.

이것으로 이번 포스팅에서는 Cypher를 이용하여 노드와 엣지를 생성하고 제거하는 방법을 알아보았다.

 

다음 포스팅에서는 그래프 질의를 통해 데이터를 조회하는 방법을 다뤄보며 이번시간에 적재한 데이터가 잘 적재되었는지도 확인 해보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다.

 

이전 포스팅에서 그래프를 생성하고 삭제하는 방법까지 알아보았다.

Cypher - 그래프 생성&삭제하기

 

Cypher - 그래프 생성&삭제하기(CREATE/DROP GRAPH)

GDB와 Cypher에대해 간단하게 알아보았으니 이제 Cypher를 사용하여 GDB를 다루는 법을 알아보자. GDB와 Cypher가 무엇인지 모르는분들은 이전 포스팅을 참고하길 바란다. GDB란?

jobdahan-tech.tistory.com

이번 포스팅에서는 레이블을 생성하고 삭제하는 방법을 알아본다.

 

레이블 생성하기(CREATE LABEL)

이전 포스팅에서 언급한 바와 같이 GDB는 국내 유일 GDB 기업 비트나인의 AgensGraph를 사용하고, 결과를 보기위한 클라이언트 애플리케이션은 PostgreSQL의 Pgadmin을 사용하도록 한다.

 

레이블을 생성하는 쿼리는 다음과 같다.

CREATE VLABEL vlabel_name;
CREATE ELABEL elabel_name;

CREATE VLABEL 노드, CREATE ELABEL 엣지 생성하는 명령이며  해당 명령과 함께 생성할 노드, 엣지 레이블의 이름(vlabel_name, elabel_name)을 함께 명시하여 사용한다.

 

레이블 삭제하기(DROP LABEL)

레이블을 만들었으니 이제 삭제하는 방법에 대해 알아본다.

 

레이블을 삭제하는 쿼리는 다음과 같다.

DROP VLABEL vlabelName;
DROP ELABEL elabelName;

DROP VLABEL vlabelName CASCADE;

DROP VLABEL/ELABEL는 레이블을 삭제하는 명령이다. 각 명령은 삭제할 VLABEL/ELABEL의 이름을 함께 명시하여 사용한다.

 

상속관계에 있는 VLABEL은 직접적으로 삭제가 되지 않으므로 CASCADE를 사용하여 의존관계의 모든 데이터를 삭제해야 한다. 노드의 레이블을 상속하는 것에 대한 내용은 추후에 다시 다뤄보도록 하며 다음으로 예시를 살펴보자. 

 

예시

이전 포스팅에서 GDB 설명 포스팅의 예시 그래프를 이용하여 sns_network라는 이름의 그래프를 만들었고, 다음으로 레이블을 생성해야 한다.

예시 그래프

위의 그래프에서 노드의 정보 사용자 정보이고 엣지의 정보 팔로우 정보이므로 노드의 레이블(VLABEL) n_user, 엣지의 레이블(ELABEL) e_follow라고 정의한다.

CREATE VLABEL n_user;
CREATE ELABEL e_follow;

위와 같이 VLABEL, ELABEL을 생성하는 쿼리를 실행하면 결과는 다음과 같다.

작성한 쿼리를 선택한 후 1번의 실행 버튼을 누르면 밑에 쿼리가 성공적으로 실행됨을 알려준다. 

 

다음으로 DB를 새로고침 하면 n_user라는 노드 레이블과 e_follow라는 엣지 레이블이 생성된 것을 확인할 수 있다.

지금까지 n_user, e_follow라는 VLABEL, ELABEL을 sns_network그래프에 만들었다.

 

이를 DROP VLABEL/ELABEL을 이용하여 삭제해주도록 한다.

DROP VLABEL n_user;
DROP ELABEL e_follow;

마찬가지로 위와 같이 레이블을 삭제하는 쿼리를 작성한 후 실행한다.

작성한 쿼리를 선택하여 1번 버튼으로 실행하면 아래의 메시지를 통해 레이블이 삭제된 것을 알 수 있고, 2번을 통해 DB를 새로고침 하면 다음과 같이 n_user, e_follow가 목록에서 사라진 것을 알 수 있다.

이것으로 이번 포스팅에서는 Cypher를 이용하여 레이블을 생성하고 삭제하는 방법을 알아보았다.

 

다음 포스팅에서는 노드&엣지를 생성하고 삭제하는 방법에 대해 알아보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

GDB와 Cypher에대해 간단하게 알아보았으니 이제 Cypher를 사용하여 GDB를 다루는 법을 알아보자.

 

GDB와 Cypher가 무엇인지 모르는분들은 이전 포스팅을 참고하길 바란다.

GDB란?

 

GDB란?

GDB란? Cypher 사용하는 방법을 설명하기에 앞서 GDB에 대해 간단히 알아보도록 하자. GDB는 Graph Database의 약자로 위키피디아에서 "데이터를 표현하고 저장하기 위해 노드, 에지 및 속성이 있는 시맨

jobdahan-tech.tistory.com

 

 

Cypher란?

 

Cypher란?

Cypher는 그래프 데이터를 대상으로 질의를 수행하는 그래프 질의 언어이다. 쉽게 말하면 RDB에서의 질의 언어 Oracle, PostgreSQL 등과 같이 GDB를 대상으로 하는 질의 언어가 Cypher라고 생각하면 된다. G

jobdahan-tech.tistory.com

GDB는 노드와 엣지로 표현한 그래프의 형태로 데이터를 저장하고 관리한다. 따라서, GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다. 또한, 생성이 가능하면 당연히 삭제도 가능해야 할 것이다.

 

이번 시간에는 그래프를 생성하고 삭제하는 방법을 알아본다.

 

그래프 생성하기(CREATE GRAPH)

본격적으로 그래프를 생성하기에 앞서 GDB는 국내 유일 GDB 기업 비트나인의 AgensGraph를 사용하고, 결과를 보기위한 클라이언트 어플리케이션은 PostgreSQL의 Pgadmin을 사용하도록 한다.

 

아젠스그래프는 단일 DB 내에 여러 그래프들을 저장할 수 있다. 따라서, 그래프를 생성하고 사용할 그래프를 선택하여 path를 지정해야 cypher를 이용한 그래프 질의가 가능하다.

 

그래프를 생성하고 path를 지정하는 쿼리는 다음과 같다.

CREATE GRAPH graph_name;
SET graph_path = graph_name;

CREATE GRAPH는 그래프를 생성하는 명령이며  해당 명령과 함께 생성할 그래프의 이름(graph_name)을 함께 명시하여 사용한다. 또한, graph_path는 현재 다룰 그래프를 의미하는 변수로 다루고자 하는 그래프의 이름을 SET을 사용하여 설정한다.

 

그래프 삭제하기(DROP GRAPH)

그래프를 만들었으니 이제 삭제하는 방법에 대해 알아본다.

 

그래프를 삭제하는 쿼리는 다음과 같다.

DROP GRAPH graph_name CASCADE;

DROP GRAPH는 그래프를 삭제하는 명령이다. 아젠스 그래프는 그래프 생성시 노드와 엣지의 초기 레이블이 생성되므로 뒤에 CASCADE를 반드시 사용해야 한다.

 

여기서 CASCADE를 간단하게 설명하자면 관련된 모든 값을 업데이트하거나 삭제할 수 있게 한다. 이는 추후에 다시 다뤄보도록 하며 다음으로 예시를 살펴보자.

 

예시

이해를 돕기 위해 GDB를 설명했던 포스팅의 예시를 가져와 설명을 하도록 한다.

GDB란?

 

GDB란?

GDB란? Cypher 사용하는 방법을 설명하기에 앞서 GDB에 대해 간단히 알아보도록 하자. GDB는 Graph Database의 약자로 위키피디아에서 "데이터를 표현하고 저장하기 위해 노드, 에지 및 속성이 있는 시맨

jobdahan-tech.tistory.com

예시 그래프

위의 그래프는 sns사용자의 팔로우 관계를 나타내는 그래프이므로 이름을 sns_network라고 정의한다.

CREATE GRAPH sns_network;
SET graph_path = sns_network;

위와 같이 sns_network라는 그래프를 생성하고, path를 지정하는 쿼리를 작성해 실행하면 결과는 다음과 같다.

작성한 쿼리를 선택한 후 1번의 실행 버튼을 누르면 밑에 쿼리가 성공적으로 실행됨을 알려준다. (쿼리를 실행하는 방법으로는 1번 버튼을 누르는 것 외에도 f5버튼을 누르는 방법이 있다.)

 

다음으로 DB를 새로고침하면 sns_network라는 이름의 그래프가 생성된 것을 확인할 수 있다.

지금까지 sns_network라는 그래프를 DB에 만들었다.

 

이제 DROP GRAPH를 이용하여 삭제해주도록 한다.

DROP GRAPH sns_network cascade;

마찬가지로 위와 같이 sns_network그래프를 삭제하는 쿼리를 작성한 후 실행한다.

작성한 쿼리를 선택하여 1번 버튼으로 실행하면 아래의 메세지를 통해 그래프가 삭제 된 것을 알 수 있고, 2번을 통해 DB를 새로고침하면 다음과 같이 sns_network 그래프가 목록에서 사라진 것을 알 수 있다.

이것으로 이번 포스팅에서는 Cypher를 이용하여 GDB에 그래프를 생성하고 삭제하는 방법을 알아보았다.

 

다음 포스팅에서는 레이블을 생성하고 삭제하는 방법에 대해 알아보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

Cypher는 그래프 데이터를 대상으로 질의를 수행하는 그래프 질의 언어이다.

 

쉽게 말하면 RDB에서의 질의 언어 Oracle, PostgreSQL 등과 같이 GDB를 대상으로 하는 질의 언어가 Cypher라고 생각하면 된다.

 

GDB에대해 모르는 분들은 이전 포스팅 'GDB란?'을 보고 오시길 바란다.

GDB란?

 

GDB란?

GDB란? Cypher 사용하는 방법을 설명하기에 앞서 GDB에 대해 간단히 알아보도록 하자. GDB는 Graph Database의 약자로 위키피디아에서 "데이터를 표현하고 저장하기 위해 노드, 에지 및 속성이 있는 시맨

jobdahan-tech.tistory.com

 

Cypher 특징

Cypher의 주요 특징은 다음과 같다.

 

1. Cypher는 선언형(Declarative) 언어이다.

명령형은 어떤 일을 어떻게 할것인가에 관한 HOW의 접근이고, 선언형은 무엇을 할 것인가에 관한 What의 접근이다.

명령형 언어는 실행될 알고리즘을 명시하는 반면 선언형 언어는 목적을 명시한다.

예시(출처:https://medium.com/@kimdohun0104/사람들은-왜-선언형-ui에-열광할까-1440d03f4e49)

Cypher는 선언형 언어이다. 명령형 언어와는 대조적으로 목표를 명시하므로 사용자가 질의를 함에 있어 세부적인 구현에 대한 부담을 덜어준다.

 

2. Cypher는 패턴 일치(Pattern Matching)한다.

Cypher는 찾고자 하는 그래프 데이터를 그리듯 표현하는 언어이다. 찾고자 하는 그래프 패턴을 ASCII Art처럼 괄호와 대시 등을 사용하여 표현하며 해당 패턴과 일치하는 그래프 데이터를 찾는다. 

찾고자 하는 형태를 직접 그리기 때문에  직관적으로 질의문을 작성할 수 있다.

 

3. Cypher는 표현력(Expressive)이 좋다.

Cypher는 표현이 풍부한 질의를 위해 다양한 처리 방식들을 차용하였다.

 

SQL에서 WHERE와 ORDER BY 같은 대부분의 키워드, SPARQL에서 패턴 매칭, Haskell & Python에서 collection 개념을 빌려오는 등 다양한 언어에서 방식들을 차용해 익숙하면서도 간단하게 질의를 표현할 수 있다.

 

Cypher의 기본 요소

Cypher의 기본 요소로는 node, edge, vlabel, elabel, property, variable이 있다.

 

Node

노드(Node)는 그래프를 구성하고 있는 가장 기본적인 요소이며 객체를 나타낸다.

Cypher에서는 위와 같이 괄호()를 이용하여 표현한다.

 

Edge

엣지(Edge)는 각 노드 사이의 관계를 나타내며 엣지 단독으로 존재할 수 없다.

Cypher에서는 위와 같이 대괄호[]와 하이픈-을 이용하여 표현하며 방향성을 나타낼 때 화살표를 추가한다.

 

Vlabel

노드 레이블(Vlabel)은 노드들을 분류하는 기준이 되도록 사용자가 부여한 특정 이름이다.

Cypher에서는 위와 같이 노드를 나타내는 괄호() 안에 콜론:을 붙이고 노드레이블을 입력하는 형태로 표현한다.

 

Elabel

엣지 레이블(Elabel)은 엣지의 이름으로 노드사이의 관계를 나타내는 역할을 한다.

Cypher에서는 위와 같이 엣지를 나타내는 형태안에 콜론:을 붙이고 엣지레이블을 입력하는 형태로 표현한다.

 

Property

속성(Property)는 노드 혹은 엣지에 개별적, 차별적으로 부여할 수 있는 속성이다.

Cypher에서는 위와 같이 노드의 경우 괄호(), 엣지의 경우 대괄호[] 안에 중괄호{}를 이용하여 속성명:속성값의 형태로 표현한다.

 

Variable

변수(Variable)는 노드나 엣지에 임의로 부여되는 식별자이다.

Cypher에서는 위와 같이 콜론:앞에 노드나 엣지의 이름에 해당하는 레이블을 임의로 나타내는 식별자 형태로 표현한다.

 

 

 

이것으로 Cypher에 대한 간단한 설명을 마치고 다음 포스팅부터는 본격적으로 Cypher의 사용법을 예시를 통해 알아보도록 하자.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형

'GDB & Cypher > 기본 개념' 카테고리의 다른 글

GDB란?  (0) 2023.01.02
반응형

GDB란?

Cypher 사용하는 방법을 설명하기에 앞서 GDB에 대해 간단히 알아보도록 하자.

 

GDB는 Graph Database의 약자로 위키피디아에서

"데이터를 표현하고 저장하기 위해 노드, 에지 및 속성이 있는 시맨틱 쿼리에 그래프 구조를 사용하는 데이터베이스"라고 설명한다. (출처: https://en.wikipedia.org/wiki/Graph_database)

 

쉽게 말하자면 노드와 엣지(노드 간의 관계)로 표현한 그래프의 형태로 데이터를 저장하고 관리하는 데이터베이스이며

보통 객체에 대한 정보를 노드에 저장하고, 객체 간의 관계를 엣지에 저장하게 된다.

이해를 돕기 위해 일상생활에서의 대표적인 관계, 소셜네트워크(sns)를 이용하여 간단한 예시를 들어보자.

 

sns에는 다음과 같은 정보들이 존재한다.

  • 사용자 김OO은 성별은 남자이며 나이는 27, 거주지는 서울이다.
  • 사용자 이OO은 성별은 여자이며 나이는 22, 거주지는 인천이다.
  • 사용자 박OO은 성별은 여자이며 나이는 30, 거주지는 부산이다.
  • 김OO은 이OO을 팔로우하며 게시글에 남긴 좋아요 수는 3개, 댓글수는 5개이다.
  • 이OO 또한 김OO을 팔로우하며 게시글에 남긴 좋아요 수는 2개, 댓글수는 5개이다.
  • 박OO은 이OO을 팔로우하며 게시글에 남긴 좋아요 수는 0개, 댓글수는 1개이다.

위의 정보를 테이블 형태로 나타내면 다음과 같다.

<사용자 정보>
<팔로우 정보>

위의 테이블 정보는 RDB(Relational Database), 관계형 데이터베이스의 형태와 같다.

여기서 객체 정보인 사용자 정보가 노드의 정보가 되고 객체 간의 관계 정보인 팔로우 정보가 엣지의 정보가 된다.

사용자 정보 -> 노드 정보
팔로우 정보 -> 엣지 정보

 

노드와 엣지의 Label(레이블), Property(속성)

GDB가 무엇인지 알았으니 다음으로 노드와 엣지의 레이블, 속성에 대해 간단히 알아보자.

 

Label(레이블)

레이블은 유사한 객체끼리의 묶음을 표현하는 단위이다. 사람, 동물, 사물 등과 같이 각 객체를 공통으로 정의할 수 있는 레이블 명을 이용하여 표현한다.

위의 예시에서 각 객체인 노드들은 sns 사용자라는 공통의 속성을 가진다. 따라서, 위의 그래프에서 노드의 레이블은

'사용자'라고 정의할 수 있다.

 

다음으로 객체 간의 관계 엣지들은 팔로우 관계라는 공통의 속성을 가진다. 따라서, 엣지의 레이블은 '팔로우'라고 정의할 수 있다.

 

이와 같이 레이블을 이용해서 노드나 엣지의 역할이나 타입을 정의할 수 있다.

 

Property(속성)

레이블을 정의했으니 다음으로 속성에대해 알아본다.

 

속성은 정보(데이터)이다. 객체인 노드, 객체 간의 관계인 엣지는 각각의 정보를 가질 수 있다.

위의 노드들중 첫 번째 노드(객체)는 이름이 김OO, 성별이 남자, 나이가 27, 거주지가 서울이라는 객체의 정보(데이터)를 갖는다. 이러한 이름, 성별, 나이, 거주지와 같은 정보(데이터)를 속성이 된다.

 

마찬가지로 엣지에서는 좋아요, 댓글 수와 같은 정보(데이터)가 속성이 된다.

 

이와 같이 속성을 이용하여 노드와 엣지에 각각의 정보를 부여한다.

 

예제

이해를 돕기위해 간단한 예시를 추가해 보자.

위의 sns 사용자 중 이름이 "이OO"인 사용자가 인플루언서이고 광고사로부터 광고를 받는다고 가정해 보자.

 

이를 위해 다음과 같은 광고사와 광고 계약과 관련된 정보를 추가한다.

  • 광고사 '회사 A'는 화장품 제품을 보유하고 제품명은 OO수분크림이다.
  • 광고사 '회사 B'는 전자기기 제품을 보유하고 제품명은 OO이어폰이다.
  • 광고사 '회사 A'는 인플루언서 sns 사용자 '이OO'에게 광고비 30만원을 주고 광고계약을 했다.
  • 광고사 '회사 B'는 인플루언서 sns 사용자 '이OO'에게 광고비 50만원을 주고 광고계약을 했다.

 

추가한 정보를 포함하여 RDB와 GDB로 나타낸 결과는 다음과 같다.

여기서 광고사 정보 테이블은 광고사라는 레이블을 가지는 노드가 되고 광고계약 정보 테이블은 광고계약이라는 레이블의 엣지가 된다.

 

이와 같이 레이블은 여러 개가 존재할 수 있으며 레이블 안의 속성 정보(데이터)는 다르게 들어갈 수 있다는 것을 알 수 있다.

 

GDB의 특징

그렇다면 GDB는 왜 사용해야 하며 어떤 장점을 가지고, 어떠한 상황에 사용해야 하는 것일까?

이를 GDB의 특징을 통해 알아보도록 한다.

 

특징 1. GDB는 직관적이다.

RDB테이블을 봤을 때는 각 객체 간의 관계를 한눈에 파악하기 쉽지 않다. 예시에서는 데이터가 많지 않아 이러한 점이 덜해 보일 수 있지만 데이터가 많아지면 많아질수록 이러한 점은 더 심해질 것이다.

 

반면에, GDB로 데이터를 표현했을 때는 객체 간의 관계를 직관적으로 보고 파악할 수 있다.

 

특징 2.  GDB는 유연하다.

RDB 같은 경우에는 원래의 테이블에서 새로운 속성(컬럼)을 추가하는 것이 굉장히 복잡하다는 특징을 갖고 있다.

사용자 정보 속성 추가

반면 GDB는 다른 속성을 가진 데이터가 추가되어도 각각의 노드가 별개의 객체이기 때문에 속성의 추가가 매우 자유롭다.

GDB에서의 속성 추가

특징3. 관계를 탐색할 때 조회가 빠르다.

RDB는 검색하는 관계의 depth가 깊어지고 복잡할수록, 데이터가 많아질수록 join연산이 많아져 조회의 시간이 느려지는 특징을 갖고 있다.

 

반면 GDB는 join 연산이 없어 관계의 depth가 깊어지고 복잡해도 조회의 시간이 매우 빠르다.

위와 같이 회사B에서 사용자 김OO까지의 관계를 조회할 때 RDB는 여러 번의 join을 거쳐야 하는 반면 GDB는 바로 엣지를 통해 탐색할 수 있어 더 빠르다.

 

이는 데이터가 많아지고 관계가 복잡해질수록 조회 시간의 차이가 기하급수적으로 늘어나게 된다.

 

결론

이와 같이 GDB는 관계 정보(데이터)를 표현하고 저장하고 조회를 하는 것에 큰 강점을 두고 있다.

 

세상은 점점 데이터가 방대해지고 데이터들 간의 관계가 복잡해지고 있다. 이러한 점에서 GDB는 어떻게 사용하는지에 따라 앞으로 큰 강점을 가질 수 있다고 생각한다.

 

반응형

'GDB & Cypher > 기본 개념' 카테고리의 다른 글

[Cypher] Cypher란?  (0) 2023.01.03
반응형

이전 두가지 포스팅에서 태그를 이용하여 내용을 강조하는 방법, 자주 사용되는 태그, 모르는 태그를 찾는 방법 등을 배웠다.

 

다음으로 서로 경쟁관계에 있는 두 태그를 이용하여 줄바꿈을 하는 방법을 알아본다.

 

이전 포스팅에서 작성한 본문은 다음과 같다.

작성된 본문 내용

위의 코드 빨간 박스를 보면 단락을 구분하기 위해 줄바꿈을 했지만 웹페이지에서 동작하지 않는다.

이는 줄바꿈을 위해서 태그가 필요하기 때문이다.

 

우리는 줄바꿈 태그가 무엇인지 모르기 때문에 찾아야 한다. 이전의 포스팅에서 다룬 내용과 같이 태그는 일상생활의 경험을 토대로 유사한 단어를 활용하기 때문에 검색할때도 필요한 기능과 유사한 내용으로 검색하면 된다.

출처: google.com

위와 같이 검색을 하면 <br>태그에 관한 글들이 나온다.

따라서, HTML에서 새로운 줄을 표현할 때는 <br>태그를 사용한다.

<br>태그 사용하여 줄바꿈

위의 화면을 보면 줄바꿈이 잘 된것을 알 수 있다.

 

여기서 눈썰미가 있다면 <br>태그의 특이한 면을 발견할 수 있을 것이다.

 

지금까지 배운 태그들은 열리는 태그와 닫히는 태그가 쌍으로 존재하는 반면 br태그는 닫는 태그가 존재하지 않는다. 이는

HTML의 여러 태그 중에 무엇인가를 설명하지 않는 태그들은 감싸야하는 컨텐츠가 없으므로 태그를 닫지 않는다는 규칙이 존재하기 때문이다. 이와 같은 태그는 img, input, br, hr, meta 등이 있다.

 

다시 원래 하던 내용으로 돌아와 줄바꿈을 한 이유는 단락을 표현하기 위함이다.

 

HTML을 만든 사람들은 단락을 표현할 때 쓸 수 있는 태그를 마련해 두었다.

이 태그 또한 알지 못하므로 검색을하여 찾아본다.

출처: google.com

위와 같이 검색하면 바로 <p>태그가 나온다.

 

p태그는 br태그와 달리 하나의 단락을 그룹핑할 수 있도록 열고 닫는 태그가 존재한다.

 

아래와 같이 <p>태그를 이용하여 코드를 변경해 본다.

<p> 태그 이용 줄바꿈

위의 화면을 보면 웹페이지의 결과는 같지만 사용된 태그는 다르다.

 

단락을 표현할 때는 줄바꿈 br태그보다 단락을 표현하는 p태그가 더 좋다.

br 태그는 단지 줄바꿈을 의미할 뿐이므로 단락 태그를 사용하는 것이 웹페이지를 정보로서 보다 가치있게 해준다.

 

그러나 p태그는 단락과 단락의 간격이 고정되어 있기 때문에 시각적으로 자유도가 떨어지는 단점이 존재하는 반면 br태그는 쓰는만큼 줄바꿈이 되기 때문에 원하는 만큼 간격을 줄 수 있는 장점이 있다. 이러한 이유로 사람들이 br태그를 선호하는 상황이 존재한다.

 

이를 극복하기 CSS라는 기술을 이용할 수 있다.

CSS는 HTML과 다른 문법을 가진 언어이다. HTML이 정보를 표현한다면 CSS는 정보를 꾸며준다.

 

CSS를 이용해 첫번째 단락과 두번째 단락의 간격을 세밀하게 조정해본다.(CSS는 추후에 더 자세히 다룰 예정이다.)

CSS 이용 단락간격 조정

위와 같이 p 태그에 style="margin-top:45px"를 추가하면 p 태그 위에 45px만큼의 여백(margin)이 생긴다.

 

이와 같이 p태그를 이용하면 단락의 경계를 분명히 하면서 CSS를 통해 p태그의 디자인을 자유롭게 변경할 수 있어 br태그보다 유용하다.

 

참고: https://opentutorials.org/course/3084/18403

 

줄바꿈 - 생활코딩

--- 이번 시간에는 인기있는 태그 두 가지를 살펴볼 거에요. 이 두 태그는 서로 경쟁관계에 있는데요. 어떤 경쟁관계에 있는가를 통해서 정보로서 웹이라는 관점에 대해서 생각해 봅시다. 또 CSS

opentutorials.org

반응형

'웹 만들기 내가 해보자 > 1. HTML & Internet' 카테고리의 다른 글

태그 사용 빈도 통계  (0) 2022.12.12
기본 문법, 태그 사용하기  (0) 2022.12.12
실습 환경 준비  (2) 2022.12.09
코딩의 이해  (0) 2022.12.08
웹 만들기 - 기획  (0) 2022.12.08
반응형

태그 사용 빈도 통계

이제 태그가 무엇이고 태그를 어떻게 사용하는지 알게 되었다. 하지만 내가 알고 있는 strong, u가 전부인 반면 오늘날의 HTML은 약 150개가 넘는 태그가 존재하고 이를 어떤 상황에 어떻게 사용할지에 대해 전부 외울 수는 없다.

 

태그가 무엇인지 알면 구글링을 통해 검색하여 알 수 있지만 알고 있는 태그 자체가 적다면 코딩하는 것이 너무 불편할 것이다.

 

따라서, 태그의 사용빈도 통계를 이용하여 밑천으로 알고 있으면 편리한 태그가 무엇인지를 판단한다.

 

구글에서는 전 세계에 있는 수많은 웹페이지를 분석한다.

그 분석 결과를 잘 정리 정도한 사이트는 다음과 같다.

https://advancedwebranking.com/html/

 

HTML Study | Advanced Web Ranking

This study looks at 11 mm index pages gathered from Top 20 Google results to uncover how people write HTML markup as new web tech emerge.

www.advancedwebranking.com

아래 그래프는 전 세계에 있는 웹페이지들이 몇 종류의 태그로 이루어져 있는지 보여준다.

출처:&nbsp;https://www.advancedwebranking.com/seo/html-study/

이에 따르면 웹 페이지들은 평균적으로 약32개의 태그를 사용함을 알 수 있다.

 

아래 그래프는 태그별 인기도이다.

출처:&nbsp;https://www.advancedwebranking.com/seo/html-study/

위의 32개 태그만 알아도 웹페이지에 평균적으로 사용되는 태그들은 대부분 알 수 있다는 것을 통계자료를 통해 알 수 있다.

 

모르는 태그 찾기

다음으로 내가 아직 모르는 위의 태그들이 무엇인지 찾아보자.

 

정보기술의 발전으로 우리는 언제든지 스마트폰으로 웹브라우저를 켜고 검색엔진으로 검색할 수 있다.

위의 태그 중 가장 많이 사용되는 html 태그가 무엇인지 찾아본다.

 

구글 검색엔진을 열어 아래와 같은 검색어를 입력한다.

출처: google.com

검색 결과중 w3school의 결과는 다음과 같다.

출처:&nbsp;https://www.w3schools.com/tags/tag_html.asp

위의 예제와 정의 중 예제를 통해  이 기능이 무엇인지 유추해보고 정의를 보기로 한다.

 

위의 예제를 실행하기 위해 html_ex.html이라는 파일을 생성하고 예제의 내용을 입력한 후 웹 페이지를 실행한다.

예제 실행

위의 결과를 통해 html 태그가 무엇인지 추론하기 어려우므로 정의를 살펴본다.

 

정의는 다음과 같다.

출처:&nbsp;https://translate.google.co.kr/

이를 통해 html 태그는 HTML파일의 루트(최상단 요소)를 나타내며 모든 HTML 파일 요소를 포함하는 컨테이너임을 알 수 있다.

 

다른 모르는 태그들도 이와 같은 방법으로 쉽게 찾을 수 있을 것이다.

 

참고:

https://opentutorials.org/course/3084/18452

 

통계에 기반한 학습 - 생활코딩

--- 이번 시간에는 통계에 기반을 둬서 공부하는 방법에 대한 이야기를 해보겠습니다. 오늘날의 HTML은 약 150개가 넘는 태그가 존재합니다. 그럼 그 많은 태그를 다 외워야 할까요? 앞에서 우리가

opentutorials.org

https://opentutorials.org/course/3084/18400

 

혁명적인 변화 - 생활코딩

--- 제가 오랜 시간 공부에 대해서 오해한 게 있습니다. 중요한 것은 어렵고 쉬운 것은 사소하다는 것입니다. 이렇게 생각하게 된 이유가 무엇인지 가만히 생각해 보니까 쉬운 것은 시험에 나오

opentutorials.org

https://advancedwebranking.com/html/

 

HTML Study | Advanced Web Ranking

This study looks at 11 mm index pages gathered from Top 20 Google results to uncover how people write HTML markup as new web tech emerge.

www.advancedwebranking.com

https://www.w3schools.com/

 

W3Schools Free Online Web Tutorials

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

반응형

'웹 만들기 내가 해보자 > 1. HTML & Internet' 카테고리의 다른 글

줄 바꿈  (0) 2022.12.13
기본 문법, 태그 사용하기  (0) 2022.12.12
실습 환경 준비  (2) 2022.12.09
코딩의 이해  (0) 2022.12.08
웹 만들기 - 기획  (0) 2022.12.08
반응형

이제 코딩을 시작하기에 앞서 만들었든 기획서를 보자.

내가 만든 기획서

이런 모양의 웹페이지는 한 번에 만들수 없고, 조각조각 구현하며 전체적으로 완성해 나가야 한다.

이번에는 붉은색으로 표시된 부분을 먼저 작업 한다.

 

1.html에 빨간 박스에 들어갈 내용을 저장한 후 웹브라우저를 리로드 한다.

본문 내용 리로드

여기 내용에서 '프로덕트가 만들어지는 과정에대해 모르는 내가 기획이라는 것을 해도 될까'? 라는 부분이 중요한 내용이라는 생각이 들어 강조하기 위해 글씨를 진하게 표시하고 싶다.

 

 <strong>과 </strong>으로 진하게 표시하고 싶은 구간을 감싸주면 다음과 같이 글씨가 강조가 된다.

strong 태그를 이용한 강조

처음으로 태그를 사용한 결과이다. 이는 절대 사소한 것이 아니고, 웹이 아무리 복잡해도 본질적으로는 이것을 벗어나지 않는다고 강의에서 강조를 한다.

 

이제 '프로덕트가 만들어지는 과정에대해 모르는 내가 기획이라는 것을 해도 될까'?에서 프로덕트를 더 중요하게 강조하고 싶어 밑줄을 치고 싶다.

 

<u>와 </u>로 감싸주면 프로덕트에 밑줄이 그어진다.

u 태그를 이용한 강조

이렇게 웹페이지를 만드는 가장 중요한 규칙(태그)을 경험적으로 살펴봤다.

 

이제 이론적으로 정리를 해본다.

위의 그림에서 strong이라는 것을 HTML에서는 문법적으로 태그라고 한다.

앞에 있는 태그를 열리는 태그, 뒤에있는 태그를 닫히는 태그라고 구분해서 부르며 닫히는 태그는 태그명 앞에 /를 붙인다.

 

그리고 앞서의 예시

<strong>'<u>프로덕트</u>가 만들어지는 과정에대해 모르는 내가 기획이라는 것을 해도 될까?'</strong>

와 같이 태그는 중첩해서 사용할 수 있다.

 

HTML과 같은 언어를 만든 사람들은 언어를 만들 때 자신들이 만든 문법을 사람들이 쉽게 이해하기를 바라므로 일상에서 자주 사용하는 말 중에 문법과 비슷한 말을 찾는다.

 

밑줄은 underline의 u, 굵게는 strong과 같이 태그들은 일상에서 자주 쓰는 말과 비슷한 말이 대부분이다.

 

참고:

https://opentutorials.org/course/3084/18392

 

기본 문법 - 태그 - 생활코딩

--- 이제부터 진짜로 코딩을 해보겠습니다. 먼저 우리가 만들었던 기획서를 다시 보시죠. 이런 모양의 웹페이지를 한 번에 만들수는 없습니다. 조각조각 구현하면서 전체적으로 완성해 나가면

opentutorials.org

 

반응형

'웹 만들기 내가 해보자 > 1. HTML & Internet' 카테고리의 다른 글

줄 바꿈  (0) 2022.12.13
태그 사용 빈도 통계  (0) 2022.12.12
실습 환경 준비  (2) 2022.12.09
코딩의 이해  (0) 2022.12.08
웹 만들기 - 기획  (0) 2022.12.08
반응형

이제 코딩을 하기 위해서는 에디터(Editor)라는 프로그램이 필요하다.

 

각 운영체제에는 윈도(메모장), 맥(텍스트 편집기), 리눅스(gedit) 등 이미 에디터가 준비 되어 있지만 각 사용법이 다르기 때문에 github에서 만든 Atom(아톰)으로 통일한다.

 

아래 주소에서 프로그램을 다운로드해서 설치한다.

https://atom.io/

 

A hackable text editor for the 21st Century

At GitHub, we’re building the text editor we’ve always wanted: hackable to the core, but approachable on the first day without ever touching a config file. We can’t wait to see what you build with it.

atom.io

atom site

설치한 후 아톰을 실행하면 다음과 같은 창이 뜬다.

atom 초기 실행 화면

위의 화면에서 1번에 해당하는 부가적인 창들은 다 꺼준다.

그리고 2번 Add folders 버튼을 눌러 실습 파일을 저장할 폴더를 아톰 왼쪽에 표시되게 해야하는데, 아직 폴더를 만들지 않았으므로 먼저 윈도우 탐색기를 이용해 바탕화면에 프로젝트 폴더를 생성한다.

바탕화면 폴더 생성

위와 같이 바탕화면에 '웹 만들기'라는 프로젝트 폴더를 생성하였다.

 

다음으로 Add folder 버튼을 눌러 생성한 프로젝트 폴더를 아톰에서 선택한다.

프로젝트 폴더 선택

이제 '웹 만들기' 폴더에 1.html 파일을 생성한다.

파일 생성 버튼

왼쪽의 웹 만들기 폴더를 우클릭하여 새로운 파일 만들기를 선택한다.

파일 이름 입력

파일 이름인 1.html을 입력하고 엔터를 누르면 다음과 같이 파일이 생성된다.

1.html 파일 화면

방금 생성한 파일 이름을 보면 확장자가 html인 것을 알 수 있다.

MS워드의 확장자는 doc, PDF는 pdf인거와 같이 웹 브라우저에서 볼 수 있는 웹 페이지의 확장자는 html이다.

 

다음으로 1.html을 웹 브라우저를 열어보자.

웹 브라우저에서 아래와 같은 단축키를 누르면 파일 선택 화면이 나온다.

  • 윈도우 : Ctrl + O(알파벳)
  • 맥 : Cmd + O(알파벳)

폴더 선택
파일 선택
웹 페이지

현재 1.html 파일에 작성한 내용이 없어 빈 화면이 나온다.

 

이제 화면에 무엇인가를 표시하기 위해 편집화면에 hello web이라고 입력하고 저장한다. (윈도우 : Ctrl + S, 맥 : Cmd + S)

html 파일에 내용 입력

그리고 웹 브라우저를 새로고침하면 다음과 같이 hello web이 출력된다.

참고:

https://opentutorials.org/course/3084/18448

 

HTML 코딩 실습 환경 준비 - 생활코딩

--- 기획이 끝났으니  이제는 코딩하기 위한  준비를 해보겠습니다.  코딩을 하기 위해서는 에디터(Editor)라는 프로그램이 필요합니다. 각자의 운영체제에는 이미 에디터가 준비 되어 있습니다.

opentutorials.org

https://atom.io/

 

A hackable text editor for the 21st Century

At GitHub, we’re building the text editor we’ve always wanted: hackable to the core, but approachable on the first day without ever touching a config file. We can’t wait to see what you build with it.

atom.io

 

반응형

'웹 만들기 내가 해보자 > 1. HTML & Internet' 카테고리의 다른 글

줄 바꿈  (0) 2022.12.13
태그 사용 빈도 통계  (0) 2022.12.12
기본 문법, 태그 사용하기  (0) 2022.12.12
코딩의 이해  (0) 2022.12.08
웹 만들기 - 기획  (0) 2022.12.08

+ Recent posts