소스코드리뷰(XXXIV) 웹페이지에서 POST 방법 연구

[목차(도우미)]
고등학생때에 공부하는 홍성대씨의 수학정석에는 재미있는 말이 있었다. "호랑이는 죽어서 가죽을 남기고 변수는 치환되어 변역을 남긴다." 정확한 인용은 아닐 수 있으나 대략 이런 의미이다. 갑자기 수학 이야기를 할 작정은 아니지만 치환이라는 것은 단지 표기의 편리함을 위해서만이 아니라 관점의 변화를 가져온다는 점을 간과해서는 안된다. 그리고 이러한 관점의 변화를 통해서 프로그램의 발전을 가져올 수 있다는 것을 이야기하려고 한다.

SQL 문을 자원화함으로 POST 구현이 단일화된다

일전에 소스코드리뷰(XXIX) SQL 문을 데이터베이스에 넣어두라 에서 SQL문을 자원으로 취급하는 것에 대해 집중적으로 논의했다. 자원으로 취급하는 것을 통해서 특정 SQL문을 문장이 아닌 키워드로 취급할 수 있다는 것에 귀착된다.


예를 들어
key
sql_statement
get_employ
select id, name, salary from tableEmploy
get_employ_by_id
select name, salry from tableEmploy where id=:id
new_employ
insert into tableEmploy(:insert_keys) values(:insert_values)
와 같이 표를 만들어 두면 각각의 SQL문은 하나의 키에 해당한다는 것을 알수 있다. 한편 POST를 수행하는 경우에 복잡한 SQL문을 연결해 주어야 하는데 이런 경우에도 키워드에 연결할 수 있다는 것을 알수 있다.
  1. <form method="post">
  2. <input type="hidden" name="key" value="new_employ">
  3. <input type="submit" value="SEND">
  4.  :
  5.  :
  6. </form>
이런 방식으로 해 두면 POST에서 사용할 SQL 문이 무엇인지 넘겨준 것이 된다. 그렇게 되면 POST 처리 구현이 모두 공통적인 논리(로직, 알고리즘)으로 공통화할 수 있다는 것이 떠오르게 될 것이다. 그렇다! POST처리는 모두 하나의 구현으로 가능하다. 하나의 구현방식이 가능하다는 것은 POST용 전용 클래스를 정의하여 쓸수 있다는 것을 의미한다. 각각의 페이지에서 POST 처리를 구현하기 위하여 별도의 소스코드를 사용할 필요가 없다.

POST 처리 후에 Location 점프에 대하여

Post 처리후에 이중 포스트 처리되지 않으려면 Location 점프가 필요하다 (PHP 에서 header("Location:url")의 처리). 다른 방식으로도 이중 포스트를 방지하는 방법이 있겠지만, 이방법이 간편하고도 안전한 방법이다. 이중 포스트는 포스트 처리후에 페이지를 리로드 해버리면 일어나는 일인데 브라우저가 기억하고 있는 포스트 요청이 연거퍼 일어나기 때문이다.

기왕에 Post처리를 공통화하였다면 Location 점프처리도 공통화하는 것이다. 그것은 <input type="hidden" name="redirect_to_url" value='$url_to_go'>를 사용하면 된다. 그리하여 포스트 처리가 성공하면 받은 주소로 이동하면 된다.

파일명 규칙과 포스트 처리

홈페이지에서 포함되는 페이지용 파일과 포스트 처리를 사용하는 페이지용 파일을 구분하는 것이 좋다. 여러가지 경험으로 보아 각 페이지에 포함되어 내용을 표시하는 파일은 pagename.php로 명명하고 포스트 처리가 있는 파일은 index.php와 동등 계층으로 구성하면서 접두어를 붙이는 것이 좋다.
메인 페이지(Main Page)라는 의미에서 mp를 붙여도 되고 man of pro의 앞자를 따서 mp를 붙여도 좋다. 굳이 의미까지 부여하자면 multi-purpose, multi-post라고 해도 좋겠다. 예를 들어 new_employ를 수행하는 페이지라면 mp-employ.php등으로 이름을 붙이는 것이다.
by 금메달.아빠 on 2011. 7. 9. 12:44