hexo icarus 테마로 Github 블로그 만들기

필수 요소

Hexo를 이용하여 블로그를 만들기에 앞서 아래 요소를 먼저 설치

  • git
  • github.com에 repository 2개 생성하기
    • 사용자ID-archives
    • 사용자ID.github.io
  • node.js
  • npm

hexo.io 사이트에는 이를 위한 설치 방법이 간단하게 요약이 되어 있지만, 이것만으로 자신이 원하는 형태의 블로그를 운영하기는 쉽지 않다. 이 글은 아무것도 설치 되어있지 않은 상태의 윈도우 사용 컴퓨터 사용자를 기준으로, d드라이브에 hexo 블로그를 생성하고 운영하는 방법을 차례대로 따라할 수 있도록 정리한 것이다.


Git 설치

  1. https://git-scm.com/download/win 에서 64-bit Git for Windows Setup 다운로드
  2. 설치 (설치 경로는 바꾸지 않음)
  3. exe 파일은 삭제

nodejs 설치

  1. https://nodejs.org/en/download/ 에서 Windows Installer (.msi) 64-bit 다운로드

  2. 설치 (설치 경로는 바꾸지 않음)

  3. (선택사항) 설치 중 Tools for Native Modules 에서 Automatically install the necessary tools에 체크

    • chocolately, python, visualstudio 등 여러가지 패키지가 설치됨
    • 설치 후, 리부팅 필요
  4. 환경 변수 구성: 제어판> 고급 시스템 설정 보기> 고급> 환경 변수를 열고, 사용자 변수와 시스템 변수에 다음을 새로만들기 혹은 추가

    • PATH 변수에 아래의 변수값 지정되어 있는지 확인 (없으면 새로 만들기)
      • 변수값: C:\Program Files\nodejs

git-bash 실행 후, hexo 및 icarus 테마 설치

1
2
cd d:/dev
npm install -g hexo-cli
1
2
3
4
5
mkdir myblog
hexo init myblog // myblog 폴더가 비어 있어야 함.
cd myblog
git clone --depth 1 https://github.com/ppoffice/hexo-theme-icarus.git themes/icarus
hexo config theme icarus

  • 아래와 같은 error 메세지가 나오면,
1
2
3
4
5
6
7
8
9
ERROR Package bulma-stylus is not installed.
ERROR Package hexo-renderer-inferno is not installed.
ERROR Package hexo-component-inferno is not installed.
ERROR Package inferno is not installed.
ERROR Package inferno-create-element is not installed.
ERROR Please install the missing dependencies your Hexo site root directory:
ERROR npm install --save bulma-stylus@0.8.0 hexo-renderer-inferno@^0.1.3 hexo-component-inferno@^0.13.0 inferno@^7.3.3 inferno-create-element@^7.3.3
ERROR or:
ERROR yarn add bulma-stylus@0.8.0 hexo-renderer-inferno@^0.1.3 hexo-component-inferno@^0.13.0 inferno@^7.3.3 inferno-create-element@^7.3.3

  • 패키지를 추가 설치한 후
1
npm install --save bulma-stylus@0.8.0 hexo-renderer-inferno@^0.1.3 hexo-component-inferno@^0.13.0 inferno@^7.3.3 inferno-create-element@^7.3.3

  • 다시 실행
1
hexo config theme icarus

  • 이후에 아래와 같은 메세지가 나오면 _config.icarus.yml이 생성되면서 완료된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
INFO  Validating config
Inferno is in development mode.
INFO =======================================
██╗ ██████╗ █████╗ ██████╗ ██╗ ██╗███████╗
██║██╔════╝██╔══██╗██╔══██╗██║ ██║██╔════╝
██║██║ ███████║██████╔╝██║ ██║███████╗
██║██║ ██╔══██║██╔══██╗██║ ██║╚════██║
██║╚██████╗██║ ██║██║ ██║╚██████╔╝███████║
╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
=============================================
INFO === Checking package dependencies ===
INFO === Checking theme configurations ===
WARN None of the following configuration files is found:
WARN - D:\dev\stemwith\_config.icarus.yml
WARN - D:\dev\stemwith\themes\icarus\_config.yml
INFO Generating theme configuration file...
INFO D:\dev\stemwith\_config.icarus.yml created successfully.
INFO To skip configuration generation, use "--icarus-dont-generate-config".
INFO === Registering Hexo extensions ===

  • 이제 블로그 저장소 주소를 설정 파일(_config.yml)에 적어준다.
1
2
3
4
5
theme: icarus
deploy:
type: git
repo: https://github.com/myblog/myblog.github.io
branch: master

  • 로컬에서 확인
1
hexo server --debug

이후, 브라우저에서

1
http://localhost:4000

  • 배포를 위한 hexo-deployer-git 설치
1
npm i hexo-deployer-git --save

이제 hexo generate와 hexo deploy를 사용할 수 있다.



icarus 테마 설정

Category list order 설정 (선택사항)

  • d:/dev/myblog/node-modules/hexo-generator-category/lib/generator.js 수정
1
2
3
4
5
module.exports = function(locals) {
const config = this.config;
const perPage = config.category_generator.per_page;
const paginationDir = config.pagination_dir || 'page';
const orderBy = config.category_generator.order_by || '+date';
  • orderBy 부분
    • -date : 최근 글 순 (default)
    • +date : 오래된 글 순

기본 설정

  • Site Configuration: _config.yml 수정
1
2
3
4
5
6
7
8
9
10
11
12
# Site
title: myblog
subtitle: 'my first blog'
description: 'life diary'
keywords:
author: anonymous
language: ko
timezone: Asia/Seoul

# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: http://[githubID].github.io
  • Localization re-testing
1
hexo clean && hexo s

Alternative Configuration

_config.yml 에서는 가장 기본적인 셋팅과 테마 설정만 하고. 나머지 설정은 _config.[테마명].yml 에서 수행한다.


사용 예시

동일한 설정항목에 대하여 두가지 이상의 설정파일에서 동시에 정의하는 경우, 우선순위에 의해 설정값이 결정된다. 만약 _config.yml, _config.[테마명].yml, themes/[테마명]/ _config.yml 세가지 설정파일이 동시에 존재하는 경우, 각 파일을 아래와 같이 설정했다면,

1
2
# _config.yml
theme: "my-theme"
1
2
3
4
# _config.icarus.yml
bio: "My awesome bio"
foo:
bar: 'a'
1
2
3
4
5
# themes/icarus/_config.yml
bio: "Some generic bio"
logo: "a-cool-image.png"
foo:
baz: 'b'

최종적으로 설정되는 값은 각각 다음과 같다.

1
2
3
4
5
bio: "My awesome bio",
logo: "a-cool-image.png",
foo: {
bar: "a",
baz: "b"


icarus 테마 셋팅

  • 출처: 친성의 블로그 github hexo blog web font 적용하기, hexo icarus 테마에 커스텀 레이아웃, 스타일(css) 적용하기

폰트 수정

1
2
3
4
5
6
// 51 line
const fontCssUrl = {
default: fontcdn("Ubuntu:wght@400;600&family=Source+Code+Pro", "css2"),
cyberpunk: fontcdn("Oxanium:wght@300;400;600&family=Roboto+Mono", "css2"),
nanumgothic: fontcdn("Nanum+Gothic:wght@400&family=Roboto", "css2"),
};
1
2
3
// 151 line
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link href={fontCssUrl['nanumgothic']} rel="stylesheet" />
1
2
$family-sans-serif ?= 'Gowun Dodum', 'Nanum Gothic', Ubuntu, Roboto, 'Open Sans', 'Microsoft YaHei', sans-serif
// $family-sans-serif ?= Ubuntu, Roboto,'Nanum Gothic Coding', 'Open Sans', 'Microsoft YaHei', sans-serif
1
$article-font-size ?= 1.2rem
  • Google Fonts에서 사용가능한 몇가지 폰트들을 검색해볼 수 있다.
  • 이 사이트는 Google Fonts에서 지원하는 Gowun Dodum 폰트를 사용하도록 설정하였다. 이 경우 새로운 폰트 cdn을 import할 필요는 없으나, 특별한 폰트를 원하는 경우에는 아래와 같은 방법으로 새로운 cdn을 import하여야 한다.

    1
    @import url(https://cdn.rawgit.com/innks/NanumSquareRound/master/nanumsquareround.css)

가독성 향상

icarus 테마의 포스트 글자 크기나 기본 줄간격이 좋지 않아 가독성이 떨어지는 경향이 있어 아래와 같이 수정한다.

  1. 포스트 제목 폰트 변경: &.article 을 검색한 후, .title 추가

    1
    2
    3
    4
    5
    &.article
    .title
    font-size: 2.0em
    font-weight: 700
    letter-spacing: -1.4px;
  2. 포스트 컨텐트 폰트 변경: .content를 검색한 후, 수정

    1
    2
    3
    4
    5
    6
    .content
    font-size: $article-font-size
    line-height: 1.75em;
    letter-spacing: -0.3px;
    color: #5d686f;
    margin-top: 20px;
  3. heading 폰트 변경: h1과 h2만 수정

    1
    2
    3
    4
    5
    6
    7
    8
    h1
    font-size: 1.95em
    font-weight: 600
    margin-top: 50px;

    h2
    font-size: 1.5em
    margin-top: 35px;

컬럼 비율 조정하기

  1. layout/common/widgets.jsx 로 가보면 getColumnSizeClass라는 함수가 있다

    여기에 자신의 columnCount 에 맞게 수정한다

    columnCount* 의 기본값은 2라서 case 2인 경우를 is-3으로 수정

1
2
3
4
5
6
7
8
9
function getColumnSizeClass(columnCount) {
switch (columnCount) {
case 2:
return 'is-3-tablet is-3-desktop is-3-widescreen'; // 여기 수정
case 3:
return 'is-4-tablet is-4-desktop is-3-widescreen';
}
return '';
}
  1. layout/layout.jsx 아래쪽에서 is-9로 수정해주었다

    • 전체 12에서 기본값은 프로필이 들어있는 영역이 4, 게시글 영역이 8이였다

    • 위처럼 수정하게되면 우선 그 비율을 3, 9로 변경해준 것이다

    • 프로필 영역을 좁게, 게시글 영역은 크게 바뀐 것이다

    • 이 12라는 것은 칼럼들의 상위에 있는 container의 크기를 기준으로 12등분한 것이다.

1
2
3
4
5
6
7
8
9
10
11
<div
class={classname({
column: true,
'order-2': true,
'column-main': true,
'is-12': columnCount === 1,
'is-9-tablet is-9-desktop is-9-widescreen': columnCount === 2, // 여기 수정
'is-9-tablet is-9-desktop is-6-widescreen': columnCount === 3,
})}
dangerouslySetInnerHTML={{ __html: body }}
></div>
  1. container 크기 늘리기

    include/style/base.styl 로 가서 23라인 정도에 보이는 아래 코드 중에서 $widescreen, $fullhd의 값을 각각 200px 씩 늘려준다.

1
2
3
4
5
$gap ?= 16px
$tablet ?= 769px
$desktop ?= 1288px
$widescreen ?= 1480px
$fullhd ?= 1672px

커스텀 css 적용

이미지 margin 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&.article
.article-meta, .article-tags
color: $text-light

.article-meta
overflow-x: auto
margin-bottom: .5rem

.article-more
@extend .button.is-light

.content
word-wrap: break-word
font-size: $article-font-size

img // 여기 추가
margin-top: 30px // 여기 추가

변경된 css의 배포 및 적용

  • hexo server에서는 최신 css 상태를 반영하는데, 그런데 실제로 배포될 때는 css파일이 갱신이 안된다.
  • 그러므로 public/css/default.css 파일을 삭제하고, 다시 hexo generate로 생성한 후 배포한다.

  • link, link-visited 컬러가 blue와 purple로 지정되어 있는 것이 어울리는것 같지 않아 grey-darker와 grey-light로 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Link colors

$link ?= $grey-darker
$link-invert ?= findColorInvert($link)
$link-light ?= findLightColor($link)
$link-dark ?= findDarkColor($link)
$link-visited ?= $grey-dark

$link-hover ?= $grey-darker
$link-hover-border ?= $grey-light

$link-focus ?= $grey-darker
$link-focus-border ?= $blue

$link-active ?= $grey-darker
$link-active-border ?= $grey-dark


Troubleshooting

경로의 대소문자 구분 설정

경로에서 사용하는 폴더나 파일이름의 대소문자 구분 문제로 인해, 파일 인식이 안되는 경우가 발생한다. 특히, generate 시에 아래와 같은 메세지가 여러개 나오면, 대부분 파일이름의 대소문자 구분 문제라고 생각하면 된다.

1
Markdown Image Path does not exists!

이런 경우, 다음과 같은 방법으로 문제를 해결해야 한다.

  • _config.yml의 filename_case 수정

    1
    2
    # Writing
    filename_case: 1
    • 0: 대소문자 구분
    • 1: 경로를 이루는 문자를 모두 소문자로 변경하여 관리
    • 2: 경로를 이루는 문자를 모두 대문자로 변경하여 관리
  • github.com에 로그인하여 repository의 categories 폴더 삭제

  • d:\dev\myblog\ 폴더의 .deploy_git 폴더 삭제

  • hexo clean 후 재배포

  • 재배포시에 다음과 같은 에러가 생길 수 있다.

    1
    fatal: not a git repository (or any of the parent directories): .git

    .deploy_git 폴더의 삭제에 따라, git에 대한 정보를 담은 파일이 없기 때문에 발생하는 에러이며, d:\dev\myblog 폴더에서 다음을 실행한 후,

    1
    2
    git init
    git remote add

이렇게 해도 경로가 인식이 안되는 경우는, Git에서 대소문자를 구분하게 설정하고, 폴더명 및 파일이름의 대소문자를 하나하나 맞춰주어서 해결할 수도 있다.

1
git config --global core.ignorecase=false

기존 블로그를 복구하는 경우

  • 기존에 사용하던 블로그 디렉토리가 d:\dev\myblog 인 경우, d:\dev 폴더 전체를 다른 폴더에 복사하여 백업해두고 아래의 과정을 진행한다.
  • 백업 완료 후, 기존에 사용하던 d:\dev\ 폴더 자체를 삭제한 후, 아래의 과정을 수행하여 모든 설치를 마친 뒤, 백업해둔 myblog 폴더에서 필요한 부분을 복구함.

favicon이 안나오는 경우

로컬 테스트시 favicon이 출력되지만, github 배포시 출력되지 않는다면

1
2
3
4
head:
# URL or path to the website's icon
favicon: /img/favicon.png?
# Open Graph metadata

_config.icarus.yml 에서 상단에 favicon을 설정하는 부분에서 favicon.png 끝에 ?를 추가한 후, 재배포 한다.

generate할 때 에러가 뜨는 경우

1
2
3
4
5
$ hexo g
INFO Validating config
Inferno is in development mode.
ERROR {
err: TypeError: Cannot read properties of undefined (reading 'split')

해결방법

1
2
3
4
cd d:\dev\myblog
npm install hexo-html-syncer --save
npm audit fix --force
npm fund


이후에 다시 generate 한다.



블로그 포스트 생성

  1. test.md 파일을 만든 뒤, d:/dev/stemwith/source/_post/ 폴더에 복사

    test.md 파일의 가장 앞부분에 들어가는 post front-matter는 다음과 같이 구성한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ---
    title: test 블로그 페이지
    date: 2019-09-17 01:32:35
    updated:
    category:
    - blog
    tags:
    - hexo
    - blog
    toc: true
    thumbnail: /images/preview.jpg
    ---
    • toc: true를 추가하면 헤딩 태그(h1~h6)를 통해 목차를 만들어 준다. (icarus 테마의 경우)
  2. 로컬에서 페이지 확인

    1
    2
    hexo serve
    http://localhost:4000
  3. 로컬 작업 내용을 github 도메인으로 배포 (push)

    1
    2
    hexo generate
    hexo deploy

    or

    1
    hexo g -d
  4. deploy 후에도 오랜시간 업데이트가 안된다면, 페이지 clean 후 재배포

    1
    2
    hexo clean
    hexo deploy --generate


Code fence

1
2
``` [language] [title] [url] [link text] [additional options]
code snippet
[title] [lang:language] [url] [link text] [additional options]
1
code snippet
[title] [lang:language] [url] [link text] [additional options]
1
code snippet
1
2
3
4
* 첫번째 라인에

```[markdown]
``` [C++] 파일이름

과 같이 적어주면 코드박스 상단에 파일이름이 표시된다.

  • 파일이름은 [ ]로 감싸게 되면, [ ]까지 출력된다.
  • typora에서는 `````를 먼저 입력한 뒤, 코드박스가 나타나면, 코드박스 하단의 language 입력란에 입력한다.


about 페이지 만들기

아래 명령을 통해 source/about/index.md을 생성한 후, 파일을 수정하여 사용한다.

1
hexo new page "about"


사진 첨부 방법

  1. 첨부할 사진 파일 위치 : 사진 파일을 d:/dev/stemwith/source/image/ 폴더에 복사

  2. 마크다운 파일에서 파일 위치를 다음과 같이 지정함 지정함

    1
    ![사진첨부파일설명](/image/~~~.jpg)
  3. 사진 출력시 사이즈 조정

    • icarus, next 테마 사용시에는 사진 사이즈 조정이 필요한 경우, img 태그를 사용하여 zoom 수치로 조정하여야 함
    1
    <img src="/image/test.png" style="zoom:80%;" />
    • book 테마 사용시에는 아래와 같이 하면 화면에 출력되는 크기를 조정할 수 있다. (단, icarus, Next 테마와 같은 방법을 사용해도 된다.)
    1
    ![사진첨부파일설명](/image/~~~.png =432x768)
  4. 주의 사항

    • 필요한 경우, hexo-image-link-with-display-size 설치
    1
    npm i hexo-image-link-with-display-size
    • 사진이 위치한 폴더를 지정할 때, /image/ 폴더 앞에 점(.) 같은 것을 추가하면 안됨

    • 파일이름에 언더바(_)가 포함되면 안됨. 대시(-)는 가능



Github 블로그 구글 검색 노출

※ 출처: 내 github blog 글이 구글 검색에 나오는 법(친성의 블로그)


blog 설정

SEO (search engine optimization) 설정

블로그 설치 폴더가 d:\dev\myblog 인 경우, d:\dev\myblog 폴더에서

1
2
3
4
npm i hexo-autonofollow
npm i hexo-generator-feed
npm i hexo-generator-seo-friendly-sitemap
npm i hexo-generator-robotstxt

필요한 경우 hexo-auto-canonical과 hexo-component-inferno을 추가로 설치한다.

1
2
npm i hexo-auto-canonical
npm i hexo-component-inferno

설치 후

1
npm audit fix

※ 표준링크 확인 방법

  1. 본인 블로그로 접속

  2. F12로 개발자도구를 열고

  3. 개발자도구 상단의 요소를 클릭한 뒤,

  4. Ctrl-F를 눌러 canonical를 검색했을 때, 아래 형태의 링크 태그가 검색이 되면, 이미 표준링크가 생성되고 있는 것임. 이런 경우에는 hexo-auto-canonical은 설치하지 않아도 됨!

    1
    <link rel="canonical" href="http://블로그 글 주소/"
  5. NEXT 테마의 경우, (이미 표준링크를 생성하고 있으므로) hexo-auto-canonical은 설치하지 않아도 됨


_config.yml 설정

_config.yml 최하단 deploy 설정 아래에 다음을 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nofollow:
enable: true
exclude:
- exclude1.com
- exclude2.com
feed:
type: rss2
path: rss2.xml
limit: 20
sitemap:
path: sitemap.xml
tag: false
category: false
robotstxt:
useragent: '*'
allow:
- /
sitemap: https://깃허브유저네임.github.io/sitemap.xml

배포
1
hexo g -d

생성된 파일 확인하기

d:\dev\myblog\public\ 디렉터리 하단에 rss2.xml, sitemap.xml, robots.txt 이 3개의 파일이 보이는지 확인한다.



검색 노출

구글 검색 엔진 등록
  1. Google Search Console 에 접속후 시작하기 클릭

  2. URL 접두어를 선택하고, 자신의 깃헙 주소 (예, https://testblog.github.io)를 입력한 뒤 계속 클릭

  3. 소유권 확인

    1. html 파일 다운로드
    2. (_config.yml 이 위치한) d:\dev\myblog\public\ 디렉토리에 다운 받은 파일을 넣고
    3. hexo d 로 배포
    4. 잠시 대기 후, 소유권 확인 과정 창의 확인 클릭 (확인이 안된다고 나오는 경우에는 잠시 후에 다시 시도 해야 함)
    5. 소유권이 확인되면, 속성으로 이동 클릭
  4. Google Search Console에서

    1. 왼쪽 메뉴의 sitemaps 클릭
    2. 새 사이트맵 추가에서 sitemap.xml 입력 후 제출 클릭
    3. 새 사이트맵 추가에서 rss2.xml 입력 후 제출 클릭
    4. 두 파일의 제출 상태가 성공으로 표시되어야 함 (가져올 수 없음 이라고 나오면 잠시 후에 페이지 새로고침을 해보고, 성공으로 표시되는지 확인이 필요함)
  5. 실제 검색은 하루 정도 지나면 가능


  1. 구글과 유사하며, 네이버 웹마스터 도구 (Naver Search Advisor)를 사용하여 등록함
  2. RSS 제출 메뉴와 사이트맵 제출 메뉴가 분리되어 있으므로, sitemap.xml 및 rss2.xml 등록시 유의

Daum 검색 노출
  1. Daum 검색등록으로 들어가서
  2. 신규 등록에 블로그 URL을 등록한 뒤 확인을 클릭하여 제출하면, 심사 후 이메일로 등록 결과를 알려줌


Mathjax & KaTeX 설정

  • _config.[테마].yml 설정
1
2
3
4
5
6
7
math:
enable: false
...
katex:
enable: true
# See: https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex
copy_tex: true

​ math: enable: false 상태에서는 필요한 렌더링이 필요한 페이지의 front matter에 mathjax: true를 넣어주어야 한다.

1
2
3
4
---
title: Will Render Math
mathjax: true
---

Google Analytics 설정

1
2
3
4
# Google Analytics
# See: https://analytics.google.com
google_analytics:
tracking_id: UA-*********-1 // google analytics 계정 s○○○○○○○@○○○○○○○.com

연수기 DIY

연수기의 원리

연수기는 Ca2+, Mg2+, Fe2+ 같은 양이온을 포함한 센물을, (이러한 양이온을 제거한 형태의) 단물로 만들어주는 장치입니다. 이렇게 만들어 주는 방법은 크게 두가지인데, 하나는 전기적인 방법이고, 다른 하나는 센물에 포함되어 있는 양이온을 다른 형태의 양이온으로 치환시켜주는 방법입니다. 전자는 전기연결이 필요하므로, 보통 집에서 사용하는 연수기는 후자의 방법을 사용하지요.


이를 위해 기본적으로 양이온교환수지를 사용합니다. 양이온 교환수지는 보통 날치알 같은 작은 알갱이 형태로 되어 있는데, 이 알갱이에 수많은 Na+이 붙어 있다고 생각하면 되요. 이 상태에서 센물(수돗물)이 들어오면, 센물의 Ca2+, Mg2+, Fe2+ 등의 이온이 Na+가 붙어 있던 자리에 대신 들어가게 되고, 대신 Na+가 수도물에 포함되어 나오게 되는데, 이렇게 되면 물 속에 Ca2+, Mg2+, Fe2+ 등의 성분이 사라지게 되어, 연수(단물)가 나오게 되는 것입니다. 말로 표현하자니 엄청 복잡한데요. 그러나, 고등학교 화학시간에도 이러한 원리를 이미 배웠다는 사실…교과서에 나와있는 그림으로 표현하면 아래와 같아요.


그러므로, 연수기는 양이온 교환수지가 기본이되며, 여기에 세디멘트필터나 KDF필터 등을 덧붙이면 보다 성능 좋은 연수기를 만들 수 있는 것입니다.


양이온 교환수지 재생의 원리

또 하나! 위의 그림에서 보면 양이온 교환수지에 붙어 있는 Na+가, Ca2+나 Mg2+로 바뀌고 있는데요. 이러한 과정이 반복되어 Na+가 Ca2+나 Mg2+로 모두 바뀌게 되면, 더이상 연수기의 역할을 하지 못하게 되겠죠. 바로 이때가 양이온교환수지를 재생해주어야 하는 시점입니다. 눈으로는 볼 수는 없기 때문에 대략 1~2달정도 뒤에 재생하면 됩니다.


재생하는 원리는 연수기 원리와 반대로, 양이온 교환수지에 붙어있는 Ca2+, Mg2+ 등의 이온을 Na+로 바꿔주면 됩니다. 이를 위해 Na+가 다량 포함된 소금물에 담궈두는 것이에요.


이제 연수기를 만들어 보겠습니다. 이런 재료들은 중국이 매우 저렴해요. 똑같은 부품을 한국에서 사려면 거의 두 배이상 비용이 소요됩니다.



연수기 DIY에 필요한 부품 & 필터

부품(중국어) 규격 수량 가격(元) 구입처
투명 하우징(透明 滤瓶) 10寸(33.3cm), 4分(½ inch) 3 23 * 3 타오바오 링크
하우징 연결니플(4分 外牙对接头) M44(½ inch) 4 1.5 * 4 타오바오 링크
하우징 고정브라켓(铁板) 10寸(33.3cm), 3级, 台式 1 18 타오바오 링크
고정브라켓 받침대(台式滤瓶托盘) 10寸专用(孔距 3cm*4cm) 3 3 * 3 타오바오 링크
스텐나사(滤瓶安装 不锈钢 螺丝) 5*16 12 0.25 * 12 타오바오 링크
하우징 오프너(滤瓶 扳手) 10寸(33.3cm) 1 1.5 타오바오 링크
테프론 테이프(生料带) 1 1.4 타오바오 링크
세디멘트침전필터(PP棉滤芯) 10寸(33.3cm) 6 3 * 6 타오바오 링크
KDF,활성탄필터(KDF活性炭滤芯) KDF55 1000g, 활성탄 300g 1 150 타오바오 링크
양이온교환수지(阳离子交换树脂) 양이온교환수지 500g 1 25 타오바오 링크
연수기부품 구입비 : 107.9元 필터 구입비 : 193元 ∴총비용 = 300.9元
(필요시 선택사항)
수전 연결관(波纹进水软管) 4分, 100cm, 304不锈钢 2 9 * 2 타오바오 링크
연결니플(4分 外牙对接头) M44(½ inch) 1 1.5 타오바오 링크

※ 모두 같은 판매자이므로 장바구니에 수량맞춰 담아 한번에 주문하세요. (단, 선택사항에 있는 수전 연결관은 판매자가 다릅니다.)

※ (필요시 선택사항) 기존에 사용하던 연수기가 있으세요? 사용하던 연수기의 수전 연결호스의 규격이 4分 (½ inch)인 경우에는 수전 연결관을 추가로 구입할 필요가 없습니다. 그러나, 연수기를 처음 설치하는 경우에는 수전(주로 샤워기가 달려있는 부분에서 원수를 연결)과의 거리를 생각하여 연결관과 연결니플을 추가로 구입해야 합니다. 이에 대해서는 아래에서 추가로 설명합니다.



필터 역할 및 교환주기

단계 필터종류 역할 교환주기
1단계 세디멘트(PP) 녹물, 염소 제거 1~2개월
2단계 KDF, 활성탄 중금속, 염소 제거 1년~2년
3단계 양이온 교환수지 Ca2+, Mg2+ 제거 1-2개월 마다 소금물 처리, 1년 뒤 완전 교환

​ 1) 세디멘트필터를 6개 구입해두면, 2개월에 한 번씩 교환하여 총 1년을 사용할 수 있습니다.

​ 2) KDF필터는 최소 1년~2년간 사용가능 합니다.

​ 3) KDF필터를 1년마다 교체한다고 하면, 1년 유지비가 193원이 되겠죠.

​ 4) 양이온 교환수지는 1개만 구입한 뒤에, 12개월마다 한번씩 집에서 사용하는 굵은 소금으로 재생하면 되므로, 여러 개를 구입할 필요가 없어요. 재생하는 방법은, 1L의 물에 굵은 소금을 400g정도를 넣어 소금물을 만들고, 소금물에 양이온 교환수지 필터를 필터통채로 넣어 담근 뒤, 12시간 후에 꺼내어 재설치하면 됩니다. 소금물로 5회 재생하려면 2000g의 소금(海盐)이 필요한데, 타오바오에서 16원정도 합니다.

​ 5) 물론, 이러한 과정이 귀찮으면 양이온교환수지필터를 추가로 구입하면 됩니다. 1년에 5개씩 추가로 소모한다고 해도 유지비가 125원 추가되는 정도입니다. 어떻게 할지는 잘 생각하셔서…



조립방법

하우징 만들기

  1. 하우징은 윗쪽 머리부분(흰색으로 된 입출수 구멍이 있는 부분)과 아래쪽 몸통부분(필터를 넣는 곳)으로 나눠집니다. 일단 윗부분과 아래부분을 분리하여 둡니다.

  2. 하우징 머리부분에 표기되어 있는 입출수 방향 화살표를 잘 보고, 일정한 방향으로 3열로 배열합니다.

  3. 하우징 연결니플 2개를 사용하여 하우징 머리부분 3개를 서로 연결합니다. (주의! 연결니플이 헐겁게 연결되거나, 추후 사용시 연결부분에서 물이 새어나오면, 니플의 나사산을 테프론테이프로 12바퀴 정도 감은 뒤 다시 연결합니다.)

  4. 연결된 하우징 머리부분을 바닥에 내려놓고, 하우징의 구멍에 맞추어 하우징 고정브라켓을 올려놓습니다. (구멍이 맞지 않는 경우, 니플 연결 부위를 조절하여 구멍을 맞춥니다.)

  5. 하우징 고정브라켓 위에, 고정브라켓 받침대를 구멍에 맞추어 올려놓습니다.

  6. 스텐나사를 사용하여 “고정브라켓 받침대+하우징 고정브라켓+하우징 머리부분”을 단단히 고정합니다. 대략 아래 사진과 같은 모양으로 조립하면 됩니다.

  1. 남아 있는 2개의 하우징 연결니플을, 연결된 하우징 머리 양쪽 끝에 돌려 끼워넣습니다.

필터 조립하기

  1. 조립된 하우징의 입수 부분과 출수 부분을 찾은 뒤에, 뒤집어 바닥에 내려놓습니다.

  2. 입수 부분쪽에 **1번필터(세디멘트/PP필터)**를 끼우고, 맨처음 빼두었던 하우징 아래쪽 몸통부분을 돌려 끼웁니다. 그리고, 하우징 오프너를 사용하여 꽉 조입니다.

  3. 가운데 부분에 **2번필터(KDF+활성탄필터)**를 끼우고, 동일한 방법으로 몸통부분을 조립합니다.

  4. 출수 부분쪽에 **3번필터(양이온교환수지필터)**를 끼우고, 동일한 방법으로 몸통부분을 조립합니다.



수전연결

수전연결을 위해서는 연결관이 필요합니다. 아래 그림을 보세요.


위 그림처럼 최소 2개의 연결관이 필요한데요. 수전과 연수기의 거리를 생각하셔서 연결관을 주문하셔야 합니다. 예를 들어서 설명하면,

​ 1) 먼저 연수기를 놓을 위치를 정하세요.

​ 2) 그 후에, 수전과 연수기의 거리를 대략적으로 재어 봅니다.

​ 3) 만약, 연수기와 입수구(or 출수구)의 거리가 1m보다 짧으면 2개의 연결관을 주문하면되고

​ 4) 만약, 거리가 1m보다 길면 연결관을 추가로 주문하여 연결관의 길이를 연장하여야 합니다. 이때, 연결관과 연결관을 서로 맞붙여 연결하기 위해서는 연결니플이 필요합니다. 사용하는 연결니플의 형태는 하우징 연결니플과 똑같은 것을 주문하면 되므로, 전체 재료를 주문하기 전에 연결니플이 총 몇개가 필요한지 잘 생각하셔서 주문하세요.


모두 연결이 되었으면, 첫 사용시에는 필터후레싱을 해주세요. 그냥 물을 5분정도 틀어 흘려보내는 거에요. 후레싱이 끝났으면 이제 맘 놓고 사용하시면 됩니다. 끄~읕!

역삼투압 정수기 DIY

몸에 좋은 미네랄까지 걸러낸다고 하여 역삼투압정수기를 싫어하시는 분도 많지요? 그러나 여기는 중국입니다. 미네랄이고 뭐고, 그냥 거를 수 있는 것은 다 걸러내는 것이 좋습니다.


역삼투압정수기의 경우 2)번이 정석입니다. 그런데, 폐수가 너무 많이 버려지기때문에, 1)번과 같이 작업하는 분도 계시죠. 정수 성능은 조금 떨어지겠지만 폐수가 전혀 없기도 합니다. 그렇지만 역삼투압정수기의 원리에 맞추어 생각해보면, 1)번 구성은 가장 비싼 RO필터 성능을 급격히 저하시키는 원인이 될 수 있습니다. 1)번과 같이 설치하는 것보다는 2)번 구성대로 하고, 대신 폐수라인을 적절히 빼내어 설거지 용도로 사용하는 것이 좋습니다.

역삼투압정수기 구조


솔레노이드밸브와 모터펌프, 압력센서스위치는 24V 아답터와 아래와 같이 결선하면 됩니다. (※솔레노이드밸브와 압력센서스위치는 극성이 없으나, 모터펌프는 극성을 맞추어 연결!)

배선도



부품 구입

필요한 부품은 모두 타오바오에서 구입할 수 있었는데, 부품의 간체표기법을 몰라 검색어에 이것저것 넣어가며 이름을 알아가면서 검색하느라 조금 고생을 했습니다. ㅋㅋ

  • 수도아답터(원수밸브)(4分金属进水三通+2分球阀) 1개 : 13원 (※수도 원수 밸브 규격 : 4分=1/2인치)
  • 원터치 T피팅(1/4인치)(2分管+2分管+2分管T型三通快接) 2개 : 개당 1.5원
  • 원터치 L피팅(1/4인치)(2分管+2分管弯头快接) 11개 : 개당 1.2원
  • 솔레노이드밸브(快接式 2分管 进水电磁阀 24V) 1개 : 9원
  • 모터펌프(50G邓元增压泵 TYP-2500) 1개 : 63원
  • 펌프용피팅(3分外牙+2分管接头) 2개 : 개당 4원
  • 테프론테이프(生料带) : 1.5원
  • 폐수저항(废水比) 1개 : 5원
  • 체크밸브(2头插2分管 一字型快接逆止阀) 2개 : 개당 4원
  • 볼밸브(2分球阀快接) 1개 : 5원
  • 피팅마개(1/4인치)(2分堵头) 1개 : 0.4원
  • 압력탱크 3.2갤런(压力桶储水桶)+압력밸브(压力桶球阀) 1개 : 42.5원
  • 압력센서스위치(快接式高压开关) 1개 : 9.5원
  • 압력센서스위치 접속단자(插线) 1개 : 2원
  • 조리수밸브(直颈龙头, 304, 3M유사품) 1개 : 31원
  • 조리수밸브 구멍마개 1개(이사갈때 구멍마개용) 1개 : 10원
  • 아답터(DC24V 2A)(水泵电源) 1개 : 5원
  • 정수기용 호스 PE관(2分PE管水管) 10미터 : 미터당 0.52원
  • 호스커터기(切管刀) : 7원
  • 필터는 한국식접속필터(韩式快接滤芯)형으로 2년 교체분량 구매
    • 세디멘트(3개월-6개) : 熔喷PP棉滤芯(분홍색) : 개당 12원
    • 프리카본(3개월-6개) : CTO压缩活性碳滤芯(남색) : 개당 12원
    • RO(24개월-1개) : RO反渗透膜滤芯(파랑) : 개당 110원
    • 포스트카본(6개월-4개) : 后置载银颗粒活性碳滤芯(보라) : 개당 15원
    • 코코넛입상활성탄(6개월-4개) : UDF颗粒活性碳滤芯(초록) (TCR대용) : 개당 13원
  • 정수기 케이스(RO纯水机外壳 5级) 1개 : 68원
    • (아래 사진과 같이) 필터 5개와 모터펌프가 함께 수납가능한 크기의 케이스를 선택

  • 필터 고정대(净水器 5连 大单夹) 2개 : 개당 1.8원

  • 그밖에 십자드라이버, 니퍼, 절연테이프 등의 간단한 공구와 전기재료

  • 조리수밸브 구멍이 없는 경우 드릴과 14mm 드릴비트가 필요

  • 설치 상황에서 어떻게 될지 몰라서 피팅류는 여유분을 더 구매


DIY 소요비용

필터(2년교환분량) 366위안 + 부품 308위안 = 674위안, 한국돈으로 115,000원 정도입니다.



DIY시 주의사항

정수기 DIY의 실제 과정은 매우 간단하여, 필터의 양쪽 끝단에 L피팅을 붙이고 구상도대로 호스를 잘라 연결만 하면 되는데요. 연결시 몇가지 주의할 점은,

  • 필터는 되도록 입수구가 아래쪽, 출수구가 위쪽을 향하도록 조립하는 것이 좋고,
  • 필터를 케이스에 끼우기전에 반드시 후레싱(필터에 물을 2~3L정도 통과시키는 과정)을 거쳐야 합니다.
  • 체크밸브, 솔레노이드밸브, 모터펌프와 필터류는 물의 흐름방향을 잘 보고 조립하세요.
  • 배선 연결시 솔레노이드밸브와 압력센서스위치는 (+)(-)극성이 없지만, 모터펌프는 극성을 지켜야 합니다.


DIY 결과

완성후 아답터를 콘센트에 꼽고 조리수밸브를 열어보니 모터가 돌아가면서 물이 졸졸졸 나오는 것이 RO정수기 답네요. 처음에는 조리수밸브를 닫고 압력탱크에 물이 꽉찰때까지 기다려야 합니다. 이후에 조리수밸브를 열면 기성품 못지않게 잘 나오게 되죠. 압력탱크 용량이 웅진에서 쓰는 것보다 더 큰 3.2갤런(약 12.1리터)이어서 한번에 더 많은 양을 쓸 수도 있습니다.


며칠동안 테스트를 하였는데, 초반에 침전물같은 것이 눈에 보이지만, 작은 공기기포이므로 걱정할 필요가 없습니다. 이틀정도 지나고 나면 기포도 발생하지 않습니다. 다만 모터펌프와 연결된 호스가 진동에 의해 덜덜거리며 떨리는 소음이 조금 거슬리긴 합니다. 문제없이 잘 작동되는 것이 확인되면 케이블타이로 고정하여 진동을 제거해주세요.



(참고) 필터 후레싱 방법

  • 역삼투압 필터 (원자재 공급사에 따라 후레싱방법이 다름)
    • 미국 필림테크 다우케미칼 제품 : 보존액이 전혀 없는 건식이므로 후레싱 생략가능. 단, 후레싱을 하고자 할 경우에는 배출수쪽을 막지 않고 물을 2리터정도 흘려보냄.
    • 웅진케미칼(옛 삼성제일합섬) 공급 CSM역삼투압 멤브레인 : 1차로 배출수쪽을 막지 않고 물을 2리터정도 흘려보낸 뒤, 2차로 배출수쪽을 막고서 정수쪽으로 약간만 흘러보내면 됨
  • 나머지 필터의 경우 2리터정도 흘려보내면 됨.

&nbsp;