오랫만에 CentOS와 MySQL을 만져본다. 주로 Ubuntu와 MariaDB를 사용하곤 했는데 이번 테스트는 CentOS와 MySQL 환경에서 진행해야 하기에 오랫만에 운영체제를 바꿔본다. CentOS의 설치는 버전에 무관하게 설치과정이 비슷하니 생략하고 MySQL 8.x의 설치 과정을 포스팅한다. CentOS 7.9를 설치하고 yum 명령으로 기본 리포지토리에서 MySQL을 설치하면 5.6 버전이 기본으로 설치된다. 하지만 최신 버전은 8.0.x 버전이다. 따라서 설치용 rpm 파일을 다운로드 받아 설치하거나 Source Code를 다운받아 직접 빌드해야 한다. MySQL 8.0 설치를 위한 리포지토리 등록 먼저 CentOS 7.9의 커널버전과 이미 MySQL이 설치되어 있지는 않은지 확인한다. 아..
설 연휴 다음 첫 주말. 여행가기 딱 좋은 날이다. 설 연휴는 고향을 다녀오든, 아니면 여행을 다녀오든 모두에게 피곤한(?) 연휴이기 때문에 그 다음 주말은 많은 사람들이 집에서 쉰다. 그래선지 항상 설 연휴 다음 첫 주말은 고속도로가 전혀 막히지 않는 마법을 종종 볼 수 있다. 우리는 일요일에 당일치기로 충청남도 홍성에 있는 용봉산을 가기로 하고 토요일엔 워밍업(?)으로 북한산 원효봉을 오르기로 했다. 그런데 워밍업으로 오르는 원효봉이 더 높고 코스도 긴 건 안 비밀이다. 북한산 원효봉은 북한산에서 초심자들이 오르기에 적합한 그런 산이라 한다. 높이도 비교적 낮은 편이고 코스도 길지 않은데다 난이도도 일부 구간을 제외하면 쉬운 코스이기 때문이다. 북한산 원효봉 순환 코스 원효봉의 출발점은 구파발에서 송..
앞의 포스트에서 웹서버로 사용할 리눅스(Ubuntu 20.04) 서버에 Apache 2와 PHP 7.4를 설치하는 과정을 살펴보았다. 이제 DB서버로 사용할 리눅스 서버에 MariaDB를 설치하고 웹서버에 워드프레스 설치파일을 업로드하고 설치하는 과정을 기록한다. LAMP의 DB서버로 사용할 리눅스(Ubuntu 20.04) 서버에 로그인 하여 MariaDB를 설치한다. MariaDB 설치하기 아래 화면처럼 MariaDB Server가 설치된다. MariaDB 설치 후 상태를 살펴본다. 설치된 버전은 10.6.7 버전이다. MariaDB의 초기 보안설정을 해주는 명령어를 실행한다. MariaDB는 MySQL 개발자들이 오라클에서 뛰쳐나와 만든 MySQL의 클론 버전이다. MySQL의 관리자 계정으로 사용할..
개인 홈페이지 또는 블로그를 운영하는 사람들에게는 작은 고민거리가 있다. 바로 무료로 제공하는 네이버나 카카오의 블로그 서비스를 이용할 것이냐 아니면 개인적으로 호스팅 또는 클라우드에 작은 서버를 두고 직접 구축하여 운영할 것이냐 하는 문제다. 나 또한 그런 고민을 하지 않는 것은 아니지만 이미 이용하고 있는 포털의 무료 블로그 서비스를 이탈하는 결정은 쉽게 내릴 수 없다. 기존에 운영하고 있는 블로그에 이미 올려져 있는 포스트를 모두 옮기는 것도 문제고 이미 검색엔진에 등록되어 있는 글의 전체 URL을 맞추는 것도 문제다. 거기에 더해 무료로 사용할 수 있는 호스팅이나 클라우드도 없었다. 게다가 가장 저렴한 월5,000~6,000원 정도의 비용으로 사용할 수 있는 클라우드에서 제공하는 1 vCPU, 1..
업무 때문에 여기저기 (주로)IT업체를 방문해 보면 프로젝트 관리 또는 이슈관리 시스템으로 Jira(지라)를 사용하는 경우를 많이 보게된다. 하지만 난 "보기"만 했지 직접 "설치"를 해본적은 없다. 직접 설치하고 사용자 계정과 프로젝트를 만들고 이슈 처리 절차를 정의해본 경험이 없다는 얘기다. 그래서 이번에 시놀로지 NAS의 Docker에 Jira를 설치해보기로 했다. 먼저 Jira Home 디렉토리 만들기 먼저 Jira 설치 시 홈디렉토리 생성 폴더로 마운트 해줄 "Atlassian" 이라는 디렉토리를 파일 스테이션의 docker 디렉토리 아래에 만들어 준다. JIRA 도커 이미지 다운로드 시놀로지 NAS의 DSM에서 Docker 관리자를 실행하고 아래 화면처럼 atlassian-jira 를 검색해 ..
시놀로지 NAS의 일부 저가형 모델을 제외한 최근 출시되는 모델들은 가상화(Virtualization) 기술에 기반한 VM(Virtual Machine) 방식과 응용프로그램 가상화 기술에 기반한 도커(Docker) 가상화를 지원한다. 이번 포스트에서는 도커 기반 가상화를 통해 MariaDB를 설치하고 원격에서 접속할 수 있도록 설정하는 과정을 포스팅 한다. MariaDB의 데이터베이스와 설정파일의 외부 디렉토리 생성 응용프로그램 가상화 기술인 도커 기반의 컨테이너는 응용프로그램의 파일들, 여기서는 MariaDB의 실행파일들과 설정파일, 데이터베이스 파일을 하나의 이미지파일 형태로 묶어서 관리한다. 때문에 데이터가 저장되는 데이터베이스와 마리아DB의 모든 설정파일을 컨테이너에 저장하게 되면 꽤나 불편한 상..
아파치 웹서버의 다중처리모듈(MPM)이란 ? Apache 웹서버를 설치하면 기본적으로 다중처리모듈은 전통적인 다중요청 처리방식인 prefork 방식으로 동작하도록 설치된다. 다중처리모듈(Multi-Processing-Module) 이란, 여러 이용자(웹브라우저)가 동시에 웹서버에 접속하여 웹페이지를 요청하였을 때 이 요청들을 동시에 처리할 수 있도록 해주는 아파치 웹서버의 모듈이다. MPM 모듈은 아파치 서버의 다른 모듈들과 마찬가지로 Shared Object 파일 (.so)로 만들어져 아파치 웹서버에 Load 된다. 아파치 웹서버를 설치하면 기본적으로 설정되는 prefork 방식은 하나의 이용자 요청에 하나의 웹서버 프로세스(아파치 계열 웹서버의 경우 apache2 또는 httpd)를 할당하여 처리하도..
앞의 포스트들에서 Python + Flask웹프레임워크를 이용해 간단한 글목록, 글보기, 글쓰기, 글수정 기능이 구현된 게시판을 만들었다. [Flask 웹 프레임워크] ORM을 사용하여 게시판 글 수정하고 저장하기 [Flask 웹 프레임워크] 부트스트랩 4.5.3 적용하기 등등~ ^^ 하지만 아직도 문제가 하나 남았다. 바로 에디터다. HTML의 ~~ 태그를 이용해 글을 입력받으면 글의 폰트를 바꿀수도, 글의 크기를 조절하는 것도 줄간격을 조절할 수도 없다. 글에 이미지를 삽입하는 것은 꿈과 같은 일이다. 네이버나 다음 등의 스마트한 에디터 기능을 구현하면 좋겠지만 혼자서 그런 위지윅 에디터를 만들 실력은 안된다. 가장 현실적인 해결책은 오픈소스로 만들어진 게시판 소스를 가져다 붙이는 것이다. 이럴 때 ..
글을 수정하고 저장하기 위해서는 ORM을 이용해 DB에서 글을 조회하여 수정 폼(Form)이 포함된 HTML 페이지에 표시해주고 저장할 경우 다시 ORM을 이용해 DB에 저장한 뒤 다시 글의 내용을 보여줘야 한다. 먼저 글 보기 페이지에 "수정하기 버튼을 추가한다. 목록보기로 돌아가는 버튼은 덤이다. (25행) 글 보기화면이 다음과 같이 수정되었다. 부트스트랩4의 버튼 스타일 중 "btn btn_light" CSS를 적용했다. 다음은 DB에서 조회한 글을 post_modify.html 이라는 웹페이지에 표시해주고 내용을 수정한 뒤 저장 버튼이 눌릴 경우 다시 POST 메소드로 전달받아 저장하는 기능을 수행하는 코드를 main_page.py에 추가해 준다. 32행에서 블루프린트에 post_modify/글번..
지금까지 Flask 웹프레임워크를 이용해 만든 웹페이지들은 정말...눈꼽만큼도 꾸미지 않은 날것의 HTML이다. 그래서 이런 화면이다. 정말 보기 싫은 화면이다. 이런 웹페이지를 만들어 공개한다면 아무도 방문하지 않을 가능성이 100%다. 이런 날것 그대로의 웹페이지를 환골탈태 시켜줄 수 있는 "프런트엔드 웹 프레임워크"가 있다. 바로 부트스트랩(Bootstrap)이다. 부트스트랩 프레임워크는 글자, 인용문, 목록, 표, 입력폼, 버튼, 이미지, 아이콘 등의 자잘한 것뿐만 아니라, 드롭다운 메뉴, 버튼, 탭, 리스트, 메뉴바, 페이지 이동 바, 알림 메시지, 썸네일, 진행 바 등의 웹 페이지에서 많이 쓰이는 객체들의 미리 디자인된 클래스를 포함하고 있다. 다음의 예제를 살펴보면 알 수 있지만 html 태..
앞의 포스트들에서 Flask 프레임웨크를 통해 글을 작성하면 ORM을 이용해 DB에 저장하고 글의 목록을 표시하는 기능까지 코딩했다. 이번에는 글의 목록에서 하나의 글을 선택했을 때 ORM을 이용해 가져오고 render_template()을 이용해 글의 내용을 화면에 표시하는 코드를 작성한다. 단, 글의 목록에 HTTP GET 메소드를 이용해 URL끝에 변수와 파라미터를 조합하여 웹서버로 전달하는 방식이 아닌 URL의 끝에 게시물의 번호를 URL에 붙여 URL을 호출하는 형태로 작성하려고 방법을 알아봤다. 마치 티스토리에서 포스트의 주소를 숫자 또는 글의 제목별로 따로 따로 표시되도록 하는 것과 같다. 앞의 포스트까지 따라하기를 마치면 웹사이트의 / 에 접속하면 다음과 같이 글의 목록이 표시된다. (ma..
앞의 포스트에서 Flask_Migrate를 이용하여 ORM을 구현하고 MariaDB에 저장되어 있는 테이블에서 글의 목록을 조회하는 파이썬 코드를 작성하였다. 그리고 조회한 글의 목록을 보여주는 post_list.html 이라는 HTML 페이지를 작성하고 render_template() 함수를 이용해 출력하였다. [Flask 웹 프레임워크] render_template()을 사용하여 HTML 렌더링하기 이제 글을 작성할 수 있는 간단한 FORM을 작성하고 Flask_Migrate에 포함되어 있는 SQLAlchemy의 ORM 연동기능을 통해 DB에 저장하는 코드를 기존의 소스코드에 추가해본다. DB연동은 이전에 작성한 포스트를 참고하기 바란다. [Flask 웹 프레임워크] Flask Migrate를 이용한..