본문 바로가기
728x90
반응형

분류 전체보기283

[자료구조 with Python] 8. 정렬 알고리즘(1) - 버블 정렬 개요 원래, Stack과 Queue에 대한 내용으로 이번 포스팅을 작성하려다, 정렬과 관련된 내용을 한 번 포스팅하고 넘어가야 할 듯 해서 급히 지난 포스팅의 뒷 부분을 수정했다. 사실 Stack과 Queue야 선형 구조인 배열의 파생 개념이라 크게 어렵지 않기 때문에 지금 포스팅으로 다루지 않는다고 크게 문제가 될 것도 아니다. 정렬의 경우에는 조금 이야기가 다르다. 정렬의 경우에는 프로그래밍을 하다보면 다루어야하는 데이터 셋이 무조건 발생하기 때문에, 조금이라도 더 효율적인 프로그램을 만들려면 다량의 데이터를 어떠한 규칙을 적용해 효과적으로 정렬할 수 있을지 계속 고민할 수 밖에 없다. 선형 자료구조의 정렬 알고리즘은 버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬 등등등 무수히 많다. 그 중에서도 앞으로 .. 2024. 3. 7.
[자료구조 with Python] 7. 선형 자료 구조 - 배열(6), Hash 충돌과 개방 주소법(Open Address) 자료 구조 마지막 포스팅이 언제였더라...(뒤적뒤적) 세상에... 3년 전이 마지막 자료구조 포스팅이었다. 필자가 최근 밀린 포스팅들을 몰아서 작성하다보니, 놓치고 있던 카테고리들이 상당히 많은데, 최근에 자료 구조 서적을 다시 뒤적거릴 일이 생긴 참에 이 카테고리를 방문(?)하게 되었다. 하여간, 마지막 자료구조 포스팅의 내용은 Hash 충돌을 해결하는 방법 중 하나인 Chaining이었는데, 이번 포스팅에서는 Hash 충돌을 피하는 또 다른 방법인 개방 주소법(Open Address)에 대해 알아보려한다. 1. Open Address 개요 Hash값의 충돌로 Hash List의 동일 Bucket(index라고 생각하자)에 둘 이상의 자료가 저장되는 경우, Hash 충돌이 일어났다고 말한다. 아무래도 .. 2024. 3. 5.
45. Linux 방화벽 제어 - firewall-cmd, Zone 내부 정책 생성 지난 포스팅에서는 firewall-cmd가 탄생한 배경과, firewall-cmd 정책 테이블의 구성에 대해 아주 간략하게 알아보았다. 이번 포스팅에서는 Zone 내부에 정책을 직접 설정하고 통신의 진행 여부를 확인해보려한다. 1. Zone 관련 정보 조회 정책을 생성하려면, Linux 방화벽에 어떤 Zone이 존재하고 있는지 파악하는 것이 선행되어야한다. 물론, 필자가 이전 포스팅에서 언급한대로 대부분의 Linux 기반 솔루션은 네트워크 말단에 위치하기 때문에 굳이 Zone에 Interface를 할당하지 않고 public에 필요한 서비스와 포트에 대한 정책을 만들어 사용하는 방법을 많이 사용하지만, 다른 서버와의 연동이 필요하거나, 조금 복잡한 구성을 진행해야하는 경우라면, Zone을 구분하여 정책을 .. 2024. 3. 4.
44. Linux 방화벽 제어 - firewall-cmd 개요 최근 사용하는 대부분의 Linux는 외부 통신을 제어하는 방화벽의 관리를 iptables가 아닌 firewall-cmd라는 명령어로 진행한다. * iptables 및 방화벽에 대한 기본 개념은 필자가 이전에 작성한 포스팅을 참고하자. - Linux - 리눅스 방화벽1, 방화벽 서비스 및 정책 확인 - Linux - 리눅스 방화벽2, 방화벽 정책(chain) 관련 명령어 - Linux - 리눅스 방화벽3, 방화벽 규칙(rule)관련 명령어 위의 포스팅 내용을 보셨던 분들이나, 기존에 iptables 명령어를 사용해보셨던 분들이라면 아시겠지만, iptables는 적용해야하는 옵션이 많고 작성해야하는 명령어 문구가 길기 때문에, 방화벽 규칙을 작성해서 적용하기가 상당히 까다롭다. 이러한 이유로 CentOS6에.. 2024. 3. 3.
[Python Flask] 3. Jinja Statement를 활용한 HTML 제어문 및 반복문 지난 포스팅에서는 Flask에서 사용하는 Jinja Expression - 제어자, 필자는 지난 포스팅에서 템플릿 변수라고 소개했다 - 를 사용하여 HTML 파일에 Python의 변수를 입력하는 방법에 대해 알아보았다. 그런데, 지난 포스팅의 마지막 부분에서 확인했듯이, 로그인을 진행하지 않았음에도 화면 아랫부분에에 출력되는 "로그인 결과"가 영 거슬린다. 필자가 만든 페이지로 첫 접속을 시도했을 때는 GET으로만 페이지를 불러오기 때문에 username의 입력값이 없어 로그인 결과가 None으로 출력되는데, 이게 은근히 보기가 싫다. 하지만 지난 포스팅에서도 언급했듯이 HTML은 - 프로그래밍 언어가 아니고 - 문서이기 때문에 저 로그인 결과와 관련된 태그를 직접 삭제하는 것이 불가능하고, 별도의 방식.. 2024. 2. 29.
[Python Flask] 2. HTML 페이지와 데이터 주고 받기 이번 포스팅에서는 Flask 프로젝트 내 Python 파일의 특정 변수값을 HTML에 표시하거나, 반대로 HTML에서 사용자로부터 입력받은 값을 Python에서 받아볼 수 있는 방법에 대해 알아보려한다. 사실 지난 포스팅의 내용으로는 정적인 페이지, 그러니까 내용에 변화가 없는 웹 사이트만 제작이 가능하다. 하지만 최근에는 웹 사이트 접속이나 로그인 시간도 화면에 표시하는 마당인데, 이 값들을 서버 운영자가 매 초마다 HTML 파일의 시간 부분을 변경하면서 있을리도 만무하니, 지난 포스팅만으로 뭔가 의미있는 사이트를 만들기는 매우 어렵다. 물론 이번 포스팅도 모두가 원하는 완벽한 웹 페이지를 만들만한 내용을 담고 있지는 않지만, 적어도 웹의 내용을 변경하기 위한 데이터의 이동이 python과 html 사.. 2024. 2. 27.
[Python Flask] 1. Flask 서버 구동 및 간단한 페이지 만들기 최근 많이 쓰이는 프로그래밍 언어는 거의 대부분 웹 프레임워크를 지원한다. 유명한 Java의 경우, JavaSpring과 Springboot가 있듯이, Python 역시 Django와 Flask라는 웹 프레임워크를 통해 쉽게 웹 서버를 제작할 수 있도록 하고 있다. 필자는 사실 약 3년 전에 Django를 먼저 접했다. 하지만 언제나 그랬듯이(?) Django도 건드리다 말다가를 반복하다가 그 주기가 길어지면서 제대로 된 포스팅을 진행하고 있지 않은 상태다 (다행인 점은 곧 Django도 마무리를 위해 포스팅을 진행할 만한 여력이 많이 생겼다는 것...) 그 와중에 Flask라는 웹 프레임워크를 잠깐 접하게 되었는데, Flask를 잠시나마 사용해보니 오히려 Django보다 구조는 조금 더 단순한 듯 하다.. 2024. 2. 26.
[MySQL] 3. Database와 Table의 조회 Database는 필요한 데이터를 저장하는 공간이다. 웹 포탈 등지에서 수 많은 사용자의 계정 정보 및 개인 정보도 Database에 저장되며, 이러한 엔터프라이즈 단위 뿐만 아니라 개인 단위에서도 자신에게 필요한 데이터를 Database에 저장하기도 한다. 예를 들면 조깅을 하는 사람이 자신이 하루동안 뛴 거리를 계속 기록하기 위한 용도라던가... 즉, Database는 특정 업무, 목적을 위한 데이터를 저장하는 용도라고 생각하면 된다. 하나의 DB 서버에는 하나 이상의 Database가 존재한다. 가령, 필자가 개인적으로 DB를 운용한다고 가정하면, "자산 관리"라는 이름의 데이터베이스에서는 필자가 지금까지 개인적으로 사용하는 돈의 액수나 벌어들이는 월급과 관련된 내용을 작성하고, "골프"라는 데이터.. 2024. 2. 22.
[MySQL] 2. MySQL 설치 후 접속 설정 지난 포스팅의 마지막 부분에서 필자가 보였던대로, 막 설치가 끝난 MySQL은 설치된 서버에서만 직접 접속이 가능할 뿐, 외부에서의 접속은 불가하다. 또한 MySQL은 인가받지 않은 사용자가 데이터로 접근하는 것을 막기 위해 계정을 생성하고 데이터베이스마다 권한을 부여하는 기능도 제공하고 있다(이는 PostgreSQL이나 MariaDB 등도 마찬가지이긴 하다). 이번 포스팅에서는 MySQL의 사용자 계정 관리 및 외부 접근 허용 등 설치 후 세팅에 대한 내용에 대해 작성해보려한다. * 본 내용을 참고하시는 분들은 아래의 패키지가 설치되어 있는지 필히 확인하자 - firewalld : Linux 방화벽 관리 패키지 - vim : Linux 텍스트 편집기 패키지 (vi) -> 설치가 되어 있지 않다면 아래의.. 2024. 2. 21.
[MySQL] 1. Ubuntu 23.04에 MySQL 설치 (apt-get) 필자는 지금까지 프로그래밍과 관련된 내용만 포스팅을 해 왔었다. 물론 DB의 중요성을 몰라서 관련 내용을 포스팅하지 않은 것이 아니라 늘상 언급했듯이, 지금까지 시간이 너무 없었다 (최근 포스팅들의 등록 주기를 보면 알 수 있듯이 말이다). 어쩌다보니, 요즘 들어 시간이 다시 남아돌기 시작해서, 이 참에 DB와 관련된 포스팅을 진행해보려한다. 첫 포스팅은 RDBMS(Relational Database Managment System) - MySQL, PostgreSQL 등 DB 프로그램 - 을 Linux에 설치하는 방식에 대한 내용이다. 웹 뿐만 아니라 데이터 저장이 필요한 프로그램은 RDBMS을 많이 활용하기 때문에, 추후 DB 설계 연습 등을 진행하려면 필자의 테스트 서버에 RDBMS을 설치하는 것이 .. 2024. 2. 20.
10. Python - Lamdba의 활용 되도 않는 망상에 빠져 Python으로 "이런 기능 한 번 만들어봐야지" 하면서 지낸 것이 벌써 5년이 되었다. 물론 필자 나름대로 아직까지 잘 쓰고 있는 프로그램도 있긴 하지만 99%가 업무로 바빠서(핑계가 아니다. 진짜...) 엎어진 것들이 많다. 그런데, 최근 어떠한 이유로 갑자기 옛 코드들을 들여다보다가, 공통적으로 개선이 필요한 사항이 필자의 눈에 많이 띄인다. 오늘 다루어 볼 내용은 지금까지 필자의 능력 부족으로 잘 사용하지 못했던 Lambda 함수다. 1. Lambda 식 아래와 같은 상황을 가정해보자. List형 데이터 변수가 있고, 여기에는 5명의 학생의 '국어', '영어', '수학', '프로그래밍' 점수가 Tuple 형태로 저장되어 있다고 가정해보자. 아래와 같은 형태로 나타날 것이다... 2024. 2. 19.
17. [Python] firewall-cmd rich rule 제어 오류 * Error: Python subprocess로 firewall-cmd rich rule 제어 시 오류 발생(Error: INVALID_RULE: internal error in _lexer():) * Environment: CentOS8, Python 3.11 최근 말단의 Linux 방화벽에 차단 정책을 자동으로 생성하는 시스템을 개인 프로젝트로 진행하고 있다.사실, 이전에 Bash로만 작성한 스크립트가 있는데, 외근 갔다가 올라오는 기차 안에서 심심한 김에 만든 것인데다 실시간 적용 기능도 없고, 무엇보다도 현재는 거의 사양된 iptables에 적용된 스크립트였기 때문에 언젠가 한 번 개선을 해야겠다고 마음먹고있던 참이었다. 최근에는 필자도 회사 일에만 파묻혀있기 싫어 일부러 개인 프로젝트에 비중을.. 2023. 9. 6.
728x90
반응형