Programming-[Backend] 322

생활코딩 codeigniter - 5. 이메일 전송, CLI, queue&cron, caching

1. 이메일 전송 이메일 라이브러리 사용 새로운 글이 등록되었을 때 이메일을 전송해준다는 기능을 가정하여 처리해본다. 기본적으로 제공하는 라이브러리를 사용하는 것이여서, 라이브러리를 사용하고 확장해보는 예제라고 생각하고 처리해보면 된다. $this->load->model('user_model'); $users = $this->user_model->gets(); // user 모델에 정의한 모든 user 정보들을 가져오는 메서드 $this->load->library('email'); foreach($users as $user){ $this->email->from('admin@gmail.com', 'name'); $this->email->to($user->email); //모든 유저에게 전송 $this->e..

생활코딩 codeigniter - 4. 세션, 사용자 인증, Core 확장처리, 로그인, 회원가입

1. Session & 사용자 인증 Session 설정 CI에서 세션 처리를 위해서 필수적으로 수정해야하는 부분은 아래와 같다. 당연히 encryption_key 값은 유출되면 안된다. 그리고 DB에 저장하지 않고 파일로써 컴퓨터에 저장하면 사용자의 로컬 컴퓨터에 저장되므로 보안상 위험할 수 있기 때문에 DB에 저장하는 것으로 설정한다. $config['encryption_key'] = ''; // 32글자의 문자 입력 $config['sess_use_database'] = TRUE; // 세션 데이터를 DB에 저장하기 위함 보안을 위해서 추가적으로 수정해야하는 부분은 아래와 같다. ip와 browser까지 체크해주는 옵션이다. $config['sess_match_ip'] = TRUE; $config['..

생활코딩 codeigniter - 3. Config, 로깅, 파일 업로드, CKEditor

1. Config 기본적인 설정값 외에 설정값들을 변경하기 위해 사용한다. root_path/config/ 디렉토리에 위치하여 처리한다. 자주 사용되고 중요한 설정 파일들은 아래와 같다. config.php: 전체적인 설정을 조정한다. database.php: 데이터베이스 관련 설정을 한다. autoload.php: 라이브러리들을 전역으로 로드해준다. hooks.php: CI의 기본적인 동작을 할 수 있는 system 디렉토리에 있는 기능등을 override할 수 있다. routes.php: url 라우팅을 위한 설정을 할 수 있다. git으로 주요 설정 파일 관리하기 config.php, database.php 파일은 DB 접속 정보 등 비밀 정보가 들어가기 때문에 여기서 해당 파일들은 중요 정보를 삭..

생활코딩 php, codeigniter 강의 - 1. php 기본, codeigniter MVC(w/ Docker, MacOS)

1. php 문법자바와 비교해서 유의해야할 점이나 중요한 부분만 작성해놓는다. 공통자바와 똑같이 세미콜론으로 표현을 끝낸다. echo 또는 print 명령어로 출력한다. . 으로 string concatenation을 할 수 있다. 여러 줄 주석은 자바처럼 /* */ 로 처리할 수 있다. $로 변수를 초기화할 수 있다. 변수 사용도 $로 불러와서 사용한다. 함수들 var_dump: 타입 및 값 출력 isset: 변수의 null 확인 array("원소들", ...) 로 배열을 선언한다. scandir(): 특정 경로의 파일 목록을 배열로 불러온다. basename(): 디렉토리 중 파일의 이름만 따온다. 보안상 공격자가 디렉토리 탐색을 못하도록 막아줄 수 있다. 함수 함수는 코드의 복잡도를 낮추고 의미를 ..

Django로 프로젝트 세팅 with DRF, mysql, viewSet, pyTest

1. 프로젝트 생성, DB 연결 python 3.12.2, pyCharm을 통해서 프로젝트 생성 pip install poetry poetry init poetry add djangorestframework poetry add django-environ .env 파일을 만든다. SECRET_KEY와 DB 정보 등을 .env에 숨긴다. SECRET_KEY=.. DB_NAME=. DB_PORT=. DB_USER=. DB_PASSWORD=. DB_HOST=. settings.py에 아래처럼 설정한다. __file__은 코드가 작성된 현재 파일을 의미한다. os.path.abspath로 절대경로를 가져온 뒤, os.path.dirname으로 상위 경로의 디렉토리 이름을 BASE_DIR로 잡는다. BASE_DIR..

파이썬 itertools.groupby 주의사항. 키가 연속으로 붙어있어야함

조회해온 객체를 같은 키값을 가진 것끼리 묶어서 그루핑하고 로직을 처리할려고 파이썬의 itertools.groupby를 사용 grouped_students = groupby(students, key=lambda x: (x.school, x.grade)) 학생들을 학교, 학년별로 묶음 그런데 잘 작동하지 않아 확인해보니, itertools의 groupby는 순회하면서 하나씩 비교하기 때문에 key값이 같은 요소들끼리 연속적으로 붙어있어야 정상 동작함 sorted(students, key=lambda x: (x.school, x.grade)) 로 먼저 정렬 후 groupby를 적용해야함

패킷분석 - Wireshark 강의 정리(+ Fiddler 간단히만)

배경 User(ex. Chrome) -> Kernel -> Network Interface Card(NIC) -> H/W 구조로 패킷이 전송된다. 패킷은 Frame으로 둘러싸여있으며, 최대용량 MTUrk 1500 바이트 정도가 일반적이다. Kernel에서 NIC로 넘어가는 곳에 Filter가 있고 특별한 역할을 하지 않는 경우 Sensor로써 그냥 패킷이 거쳐가는 역할을 한다. Wireshark는 이 Sensor에 쌓이는 정보들을 Npcap을 활용하여 로그에 대한 검색 등의 각종 기능을 제공한다. 패킷은 1500 바이트씩 엄청나게 많으므로 이 내용들을 검색해주는 기능이 핵심이다 Wireshark은 2개의 filter를 갖고 있으며, 1개는 패킷 수집용 필터, 1개는 검색 등을 위한 디스플레이 필터이다 예..

Django nested Serializer update 시 선언되지 않은 field 문제

1. 문제점 부모 - 자식의 구조를 갖는 Nested된 Serializer 구조를 사용했는데, update 메서드를 Django에서 지원하지 않는다고 하면서 아래 같은 에러 메시지가 뜬다. AssertionError: The `.update()` method does not support writable nested fields by default. Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields. 2. 해결 방안 필드를 사용할 때 반드시 Model에서 역참조로 related_name 값으로 정의한 이름으로 사용해주어야 한다. School : People ..

국가별, 언어별 코드 표준: ISO 3166-1, ISO639-1, Accept-Language header

국가별 코드는 두 자리수로 표기하고, ISO 3166-1을 따른다. https://www.iso.org/iso-3166-country-codes.html ISO - ISO 3166 — Country Codes Avoid confusion when referring to countries and their subdivisions with this standard. www.iso.org 언어별 코드는 ISO 639-1을 따른다. 그리고 브라우저에서 제공하는 Accept-Language값은 이 ISO 639-1을 따른다. https://www.iso.org/iso-639-language-code ISO - ISO 639 — Language code Describe languages in an internati..

Stream 방식의 이해: RTSP, RTMP, HLS, WCS(Web Call Server), CCTV 접속 방식

1. Stream의 다양한 프로토콜 정리는 참조 페이지에 잘 나와있다! https://jee00609.github.io/live%20stream/Live-Stream/ 데이터 인터넷에서 실시간 Stream 영상을 보는 것은 일반적인 간단한 데이터를 주고 받는 것이 아니라 실시간으로 전송되는 바이너리 데이터를 기반으로 이루어진다. 그리고 이 바이너리 데이터는 보통 '영상' 부분과 '오디오' 부분이 분리되어서 전송된다. 그러면 이걸 받는 쪽에서 합쳐서(Muxing) 타임라인에 맞게 영상-오디오를 동기화해서 재생하는 방식이다. 프로토콜 HTTP 같은 규약을 통해서 이루어지는 것이 아니라 RTSP(Real-Time Streaming Protocol), RTMP(Real-Time Messaging Protocol..