개요
구글에서 Nextcloud를 검색해보면 나오는 많은 글들 중 하나가 Nextcloud가 원래 이렇게 느리냐? 입니다.
제 사용환경에서는 그렇게까지 느리다곤 생각되진 않긴 하지만, PHP로 작동되는만큼 태생의 한계가 있어 빠릿함과는 거리가 멀긴 합니다.
그래서 이번 글에서는, Redis를 설치해 Nextcloud에 캐시를 달아 성능을 올리는 방법을 작성해 보려고 합니다. 드라마틱하게 성능이 향상되진 않지만, 버벅임이 줄었음을 체감할 수 있을 정도의 성능 향상은 있는 것 같습니다.
Redis란?
Redis는 오픈 소스 기반의 DBMS(데이터 베이스 관리 시스템)입니다. 이와 동시에 인 메모리(In-Memory) 데이터베이스이기 때문에 모든 데이터를 메모리에 저장하고 조회함으로써, 고성능으로 동작할 수 있다는 장점이 있습니다. 또한 Key:Value로 이루어진 비정형 데이터를 지원함으로써 높은 편의성을 자랑하기도 합니다(이와 관련된 설명을 읽다보니 파이썬의 딕셔너리 구조가 생각나더군요)
한 문장으로 말하자면, ‘메모리에서 비정형 데이터를 DB로 다루는 캐시 서버’ 정도인 것 같습니다(비전공자의 생각이므로 틀릴 수 있습니다. ㅋ_ㅋ)
관련하여 읽어보니, ZFS의 ARC와 비슷하게 동작하는 것 같습니다(뇌피셜).
- 캐시 서버로 동작하기 때문에, 데이터 조회 요청이 들어올 경우 캐시에 있으면 캐시에 있는 값을 반환, 없으면 그때서야 물리디스크의 DB에 가서 조회하도록 해주거나(Look aside cache)
- 일정시간 동안 저장되는 값을 메모리에 받아놓고 있다가, 나중에 물리디스크에 기록(Write Back)
- 인메모리 특성 상, 물리디스크에 기록되기 전 서버에 장애가 발생할 경우 데이터 유실 가능성 ↑
이거 완전 ZFS..
문제 확인
Nextcloud를 설치한 후 관리자 설정 – 개요에서 확인되는 몇 가지 문제점 중 하나는
“데이터베이스가 트랜젝션 파일 잠금에 사용됩니다. 성능을 향상하려면, 가능한 경우 memcache를 설정하십시오.“입니다.
공식 문서에 의하면 이 경고는 무시해도 되는 수준의 경고입니다. 그저 성능을 향상시키려면 고려하라는 수준의 경고이기 때문이죠. 그래서 검은색으로 표기되고 있는 것 같기도 합니다.
Redis 설치
Docker환경에서는 docker-compose로 묶어 편하게 환경을 꾸릴 수 있겠지만, 우리는 TrueNAS 위에서 모든걸 하고 있으니 Apps에서 하나하나 찾아 설치해야 합니다.
다행히 Apps에서 Redis를 검색해보면 공식 카탈로그에 있는 것을 확인할 수 있습니다.
설치를 시작하면, 아래와 같이 얼마 안되는 환경설정 값을 볼 수 있습니다.
비밀번호, 포트, 저장소, 자원제한 4가지 정도의 값을 요구합니다.
먼저, 패스워드의 경우 Nextcloud에서 접근하기 위한 비밀번호로, 개인 환경에 맞춰 적당히 구성해 주세요. 특수문자를 조금 까다롭게 받아서 아래와 같이 에러를 만날 확률이 있습니다.
포트는 건드릴 필요가 없습니다.
저는 App을 설치할 때, snapshot기능을 활용한 복원 외에도, 개별 파일에 접근해야 할 경우를 생각해 Host Path로 Dataset을 넘겨주는 걸 선호합니다.
그래서 아래와 같이 적당히 생성한 Dataset을 넘겨주겠습니다.
메모리는 4기가로 설정해주겠습니다.
Install을 클릭해 설치를 진행합니다.
설치가 완료되면 로그를 통해 아래와 같이 연결 준비가 완료되었다(Ready to accept connections tcp)는 메세지를 확인할 수 있습니다.
config.php 수정
설치가 완료되었다면, Nextcloud의 config.php를 수정해야 합니다.
Nextcloud를 설치할 때 Data Volume으로 지정한 폴더에 있습니다.
이 파일을 편집하기 전에, 혹시 모르면 되돌려야 하니 nextcloud 관련 볼륨의 스냅샷을 만들어주세요.
Docker보다 운용하기 까다롭지만, TrueNAS가 이런 점은 참 좋습니다.
이제 파일을 수정해 봅시다.
nano /path/to/nextcloud-data volume/config/config.php
아래 내용을 복사해서 제일 하단에 붙여넣습니다(password는 redis 설치 당시 설정했던 password를 넣어주세요).
'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
'password' => '', // Optional, if not defined no password will be used.
),
제대로 붙여넣었다면 아래와 같이 정렬되어야 합니다.
저장 후 nano를 빠져나온 뒤, nextcloud를 재시작 해줍니다.
알려진 문제점
레딧에서 보고 설마설마 했는데, 저도 동일하게 발생하더군요.
Cloudflare로 리버스 프록시를 운용하고, 개별 도메인을 Proxied(tunnel 포함)로 연결할 경우 파일에 접근하지 못합니다. 즉, 파일을 열거나 수정할 수 없습니다.
해당하는 도메인들을 DNS only로 작동시키면 사용 가능합니다.
마무리
큰 문제 없이 작업을 완료했다면, 보안 및 설치 경고에서 “데이터베이스가 트랜젝션 파일 잠금에 사용됩니다. 성능을 향상하려면, 가능한 경우 memcache를 설정하십시오.” 메세지가 사라진 것을 확인할 수 있습니다. 이제 조금은 더 쾌적하게 사용할 수 있을 겁니다.
근데, TrueNAS위에서 사용하는 Nextcloud + Redis와 ZFS의 ARC, L2ARC와는 상호작용 관계가 어떻게 되는지까진 모르겠습니다.
관련 글
2025.01.22 - [Nextcloud] - TrueNAS에 Nextcloud 사용하기
TrueNAS에 Nextcloud 사용하기
개요TrueNAS는 오픈소스NAS OS중에서는 가장 강력하지만, 유저편의적인 부분은 많이 부족합니다. 특히, 개인 조립NAS를 헤놀로지로 입문한 경우, DSM의 높은 편의성 덕분에, TrueNAS를 다루는 것에 엄청
worklazy.net
2025.01.22 - [Nextcloud] - Nextcloud에서 Office문서 편집하기
Nextcloud에서 Office문서 편집하기
개요제가 시놀로지를 사용하면서 편하다고 느꼈던 앱 중 가장 좋았던 건 시놀로지 오피스(Synology Office)였습니다. 시놀로지 드라이브(Synology Drive)와 하나처럼 엮여서 자료를 동기화하고, NAS에서
worklazy.net
2025.01.23 - [Nextcloud] - TrueNAS에 Nextcloud 29버전 업데이트 시 Dataset 재설정하기
TrueNAS에 Nextcloud 29버전 업데이트 시 Dataset 재설정하기
개요얼마 전 Nextcloud Hub 8 (29.0.0)이 발표되면서, TrueNAS 공식 카탈로그 앱 이미지도 계속해서 마이너 업데이트 중입니다.이 중 변경점으로 userdata를 분리하면서, Storage구성 시 변경점이 발생하여 짧
worklazy.net
2025.01.22 - [Nextcloud] - TrueNAS + Nextcloud 업데이트 시 '명령줄 업데이터를 사용하세요.' 대처법
TrueNAS + Nextcloud 업데이트 시 '명령줄 업데이터를 사용하세요.' 대처법
개요최근 사용중인 Nextcloud의 업데이트를 미루다가 한 번에 몰아서 하고 나니 아래같은 메세지를 받았습니다.심지어 문서를 눌렀더니 해당 내용이 아닌 nextcloud wiki메인페이지로 보내버려서 하
worklazy.net
2025.01.23 - [Nextcloud] - Cloudflare Tunnel 환경에서 Nextcloud 구성 시 오류 해결하기
Cloudflare Tunnel 환경에서 Nextcloud 구성 시 오류 해결하기
개요Nextcloud 초기 설치 이후 관리자 설정으로 진입하면 해결해야 할 오류들을 친절하게(?) 띄워줍니다.일부분은 Nextcloud 자체적으로 해결할 수 있지만, 몇몇 오류는 리버스 프록시에서 해결해줘
worklazy.net
출처
1. 레딧
From the truenas community on Reddit
Explore this post and more from the truenas community
www.reddit.com