전체 글 61

장고 어드민 NoReverseMatch 에러

오늘의 오류 되시겠다 NoReverseMatch at /admin/content/content/add/ Reverse for 'content_content_change' with arguments '('',)' not found. 1 pattern(s) tried: ['admin/content/content/(?P.+)/change/\\Z'] 장고어드민에는 기본적으로 테이블의 모든 필드가 다표시되는데 그걸 커스텀하는과정에서 기본키 입력칸을 뺐더니 저장할때 저런에러메시지가 나온거였다. 2시간은 그냥 날린거같다. class ContentAdmin(admin.ModelAdmin): """ 내용관리 관리자 커스텀 """ list_display = [] # 추가, 변경시 화면에서 제외할 필드 # exclude =..

대댓글과 답글 구성에 방법에 대한 생각

최근에 제품을 리뉴얼 하면서 대댓글과 답글 쪽을 손볼일이 생겼다. 기존 그누보드 5 에서는 경로열거 방식을 사용하여 한자리씩 A~Z 까지 26개의 제한된 대댓글만 가능하다 요즘 사이트들을 보면 대댓글 대신 맨션을 쓰기도 하지만 대댓글로 한다고 해도 대댓글 26개제한은 너무적다. 대댓글 알고리즘들 대댓글, 답글은 크게 업데이트 방식과 업데이트 안하는 방식, 반업데이트 형으로 나뉜다 SQL 안티 패턴이라는 책을 보면 DB 를 이용해 계층형으로 데이터를 저장하는 5가지 방법이 소개되어있다. 항목별 쉽다 어렵다가 있는데 플젝진행하면서 성능을 측정하면서 각각이 뭔지 좀더 와닿았다 자식조회 : 페이징 없이 부모로부터 자식들을 전부 호출하는것 트리조회: 트리조회 페이징을 하거나 중간부터 조회할 때 트리조회가 필요하다..

PHP로 할 수 있는 것

PHP 는 처음에 웹을 위한 템플릿 언어였지만 현재는 범용 언어로서 웹 뿐만아닌 CLI , GUI 앱을 제작하는 것도 가능합니다. 또한 PHP 4.4 부터는 객체지향이 도입되어 5.3 에서는 패키지를 구분짓는 네임스페이스가 생겼고요 어떤 이는 pygame 처럼 C 의 SDL 을 래핑하여 게임을 만들거나 에뮬레이터를 제작하기도 하죠 https://www.youtube.com/watch?v=A1wWRXh6kwY php 와 sdl 로 제작된 닌텐도 nes 에뮬레이터 PHP 를 cli 즉 터미널용으로 실행할때는 cron을 통한 배치작업이나 컴포저같은 라이브러리 관리툴을 제작할 수있고 주력으로 널리쓰이는 곳은 웹서버 제작입니다. PHP 의 대표적인 프레임워크는 라라벨, 심포니가 있으며 CMS 로는 그누보드, 워드..

PHP 2022.11.20

php 개발자 한테 도움되는 사이트

https://modernpug.github.io/php-the-right-way/ PHP: The Right Way 한국어판 쉽게 읽을 수 있는 PHP의 베스트 프랙티스, 코딩 표준, 권위있는 튜토리얼로의 링크를 제공합니다. modernpug.github.io PHP The right way https://refactoring.guru/ko/design-patterns/catalog 디자인 패턴 목록 refactoring.guru PHP 를 비롯한 다양한 언어로 작성된 디자인 패턴 예시들입니다. https://laravel.kr/docs 라라벨 9.x 라라벨 한글 메뉴얼 9.x laravel.kr https://psr.kkame.net/ Introduction - 한글판 PHP Standards Rec..

PHP 2022.11.20

코드이그나이터 4 REST API 주의점

코드이그나이터 4는 네임스페이스와 라우터에서 REST API를 지원합니다. 라우터 코드이그나이터 4를 설치하면 3과 마찬가지로 함수이름을 이용해서 라우팅이 됩니다. 자동라우터라고 합니다. app/config/Routes.php 파일에 $routes->setAutoRoute(true); 자동라우터 기능이 켜져있을때는 REST API 컨트롤러의 HTTP 메소드로 설정해도 우회방법이 생깁니다. Routes.php $routes->resource('City'); //컨트롤러 클래스를 등록 $routes->post('/', 'City::show'); //연결할 url과 메소드를 string 으로 넘김. show같이 보여주는건 보통 GET메소드를 씁니다. 여기서는 확인을 위해 post를 썼습니다. City 컨트롤러..

PHP 2022.04.14

스프링 보안 취약점 spring4shell

자바 9 jre9 이상에서 스프링프레임워크 환경에서 제로데이 취약점이 발견되었습니다. https://blog.alyac.co.kr/4601 새로운 Spring Java 프레임워크 제로데이, 원격 코드 실행 허용해 New Spring Java framework zero-day allows remote code execution Spring Core Java 프레임워크의 새로운 제로데이 취약점인 'Spring4Shell'이 공개되었습니다. 해당 취약점은 애플리케이션에서 인증되지 않은.. blog.alyac.co.kr https://tanzu.vmware.com/security/cve-2022-22963 cve-2022-22963 이 그것 인데요 특정 조합에서는 공격자가 post 요청만으로 원격으로 악성 js..

그누보드 보안 SQL 인젝션 방어하기

그누보드는 sql 쿼리를 문자열 그대로 취급하기에 sql 인젝션 공격 문제가 있습니다. SQL 인젝션 공격을 막기 위해서는 prepared statement 쿼리 일명 바인딩쿼리를 써야합니다. 변수자리에 ? 를 넣고 나중에 값을 채우는 방식이라 SQL 인젝션 공격을 막는 확실한 방법입니다. 예시) $query = 'select wr_id, wr_num, wr_subject from g5_write_free where wr_id = ? '; 그누보드 자유게시판에서 게시글 id 가 1 인 글을 불러오는 쿼리입니다. wr_id = ? // prepare(바인딩할 sql 쿼리); $GLOBALS['g5']['connect_db']->prepare(바인딩할 sql 쿼리); 이렇게 되면 PHP 기본 함수를 쓸 수있..

PHP 2022.03.30

크롬 101버전 부터 유저에이전트 간소화

구글에서는 크롬 101 ~ 113버전에 걸쳐 복잡했던 유저에이전트 간소화를 간소화한다고 합니다. 이번 3월 말에 크롬 101버전이 출시됩니다. https://blog.chromium.org/2021/09/user-agent-reduction-origin-trial-and-dates.html User-Agent Reduction Origin Trial and Dates Back in May, we published an update on our User-Agent string reduction plans with a promise to publish further details on timing. Now that ... blog.chromium.org Sec-CH-UA: "Chrome"; v="93" Se..

자바스크립트 2022.03.27