road23 2022. 7. 17. 18:03

생활코딩 PHP 18강~30강


18. 함수 만들기 예고

 

 내장함수 : php가 만들어서 사용자가 사용할 수 있도록 제공하는 함수, 기본적으로 내장된 함수

-> 함수를 직접 사용하는 것 뿐만 아니라 만드는 것까지 하기

 


19.1. 함수의 형식 1/3

 

php는 function이라고 하는 약속된 문자가 들어오면 "지금부터 함수를 정의한다"고 생각한다.


19.2. 함수의 형식 2/3

 

basic()함수가 지금 실행되고 있는 함수인데, 이 함수에 입력값을 주면 이 함수가 입력값을 받아서 내부적으로 다르게 동작하게 개선할 수 있다.

 

입력값과 관련된 개념

1. parameter

2. argument

여기서 function sum에 사용되는 $left와 $right라고 하는 변수가 parameter, 매개변수라고 한다.

sum(2,4), sum(4,6)에서 2,4와 4,6인 입력한 실제값이 argument이다. 그리고 그 값을 받아서 매개변수로 함수 안에서 사용되는 것을 parameter라고 부른다.


19.3. 함수의 형식 3/3

 

sum이라고 하는 함수는 2가지 기능을 가지고 있는 함수이다. 2가지 기능은 left와 right라고 하는 값을 더하는 함수이고 출력하는 함수이다. 그런데 이렇게 2가지 기능을 사용하면 더하는 기능이 제한적이게 된다.

그렇기 때문에 함수를 만들 때 중요한 관점 중 하나는 "함수는 하나의 기능만을 담는다"라고 하는 관점이다.

->더하고 출력하는 함수 sum을 만들고, 더한 함수의 값을 리턴하고 그 값을 따로 출력하게 하는 sum2를 만들어 두 개의 방식을 비교한다.


20. 함수의 활용

 

함수를 계속해서 나열해서 사용하면 불편하기 때문에 함수를 앞에 따로 선언하고 사용하는 게 더 편리하다. 그리고 이 함수 코드에서 개선사항이나 변경사항이 생겼을 때 그것을 적용하면 동시에 모든 함수가 개선이 적용되는 폭발적 효과를 얻을 수 있다.

-> 함수를 "일종의 정리정돈을 위한 수납상자"라는 개념으로 보는 게 좋음


21. 웹앱 완성하기 예고

 

사용자들이 웹을 통해서 자신의 콘텐츠를 등록할 수 있는 기능을 추가시키기

-> Create, Read, Update, Delete


22. form과 POST

 

사용자의 정보를 서버 쪽으로 전송할 때 사용하는 기능인 form을 살펴보기

 

코드를 작성해서 title이라는 창 만들기

그런데 submit버튼을 누른다고 해도 동작하지 않는다. 서버를 어떤 페이지를 보낼 것인가를 웹브라우저한테 알려줘야 한다. 그렇게 하기 위해서 여기 있는 두 개의 폼 태그를 감싸는 폼 태그를 만들어줘야 한다.

그런데 이렇게 하면 PHP밖에 출력되지 않는다.

그렇기 때문에 form.php파일을 수정해야 한다.

여기 있는 폼 태그는 "사용자가 입력한 정보를 url 파라미터로 만들어내는 기계"이다.

 

데이터를 서버로 전송하는 방식은 이 주소를 공유했을 때 데이터가 추가되는 문제가 생길 수 있기 때문에 좋지 않다. 그렇기 때문에 url을 통하지 않고 은밀하게 데이터를 서버로 전송해야 한다.  그러기 위해서는 폼에다가 데이터를 전송하는 방식을 어떻게 할 것인가를 정하면 된다.

약속된 $_POST라는 예약된 변수 이름으로 사용된다.


23.  글 생성

 

전송된 데이터가 post값으로 전송될 수 있도록 create_process.php파일을 만든다

방금 생성한 페이지를 확인할 수 있는 화면으로 이동하게 된다.


24. 글 수정

 

가장 홈에 있을 때는 업데이트가 되면 안되고, 어떤 특정 카테고리(글)을 선택했을 때도 업데이트가 되면 안된다.

그렇기 때문에 조건문을 써야 한다.

->홈으로 가면 안보이고, 각각의 항목으로 가면 업데이트가 보이도록 설정됨

 

update를 클릭했을 때 수정을 하려면, 수정하려고 하는 내용이 무엇인지를 알아야 한다. 그렇기 때문에 현재 우리가 보고 있는 페이지의 id값을 갖고 업데이트 해야 한다.

수정을 하려면 수정하고자 하는 내용이 폼에 채워져있어야 한다.

php파일의 이름을 바꾸기 위해 php file name change로 검색해서 rename을 찾는다.

JavaScript의 이름을 JS로 변경시킨다.


25. 글 삭제

 

c,r,u,d중 d인 delete는수정이나 추가와는 다르게 폼을 거칠 필요가 없다.

웹페이지에서 그냥 클릭하면 삭제가 되버리면 된다.

 

id값을 가져와 만든 코드를 이용해 데이터를 삭제할 때, 링크를 클릭하자 마자 데이터가 삭제되어 버리면 안좋은 상황이 나올 수 있다.

따라서 링크가 아니라 포스트 방식으로 삭제를 만들어야 한다. 링크를 사용한다는 것은 id get parameter가 들어있으니까 갭 방식이다.

create버튼을 누르고 java를 입력해봄

새로 생겨난 11.java를 delete버튼을 눌러서 삭제한다.

링크가 아닌 버튼을 클릭해서 11.java가 삭제된 것을 확인할 수 있다.


26. 파일로 모듈화 - require

 

리팩토링 :

적어놓은 코드를 좀 더 효율적으로 개선하는 작업들

기능은 그대로 두고 내부적인 코드를 훨씬 더 보기 좋게, 유지보수하기 편하게 중복된 코드를 제거하는 작업들

 

좋은 코드를 만드는 방법 : 중복을 제거하기

프로그래밍에서 재사용할 만한 코드나 로직을 잘 정리정돈 해놓은 것 : 도서관

->lib이라는 이름의 디렉토리는 재사용할 가능성이 있는 것들을 모아놓은 폴더이다.

 

원래 있던 파일의 코드를 lib안의 print.php파일로 옮겨놓고, 그 코드에 "lib 안의 print.php파일에 이 코드가 있다"고 표시하는 명령어인 require()를 사용한다.

->매우 긴 줄의 코드도 require()라는 짧은 한 줄로 변경하다는 폭발적 효과를 얻을 수 있다.

 

그러나 이렇게 require()를 사용하다 보면 작성된 코드에 있는 함수들의 인과관계가 드러나지 않는다는 문제가 있다. 그렇기 때문에 lib안의 print.php파일에도 require()를 이용해 함수 사이의 인과관계 나타내야 한다.

 

php는 한 번 만든 함수는 다시 재정의할 수 없게 되어 있다.

-> require_once()함수를 사용해서 중복해서 print.php 파일이 호출되는 것을 방지할 수 있다. 에러가 발생하지 않을 수 있다.


27.1. 보안 XSS

 

PHP 애플리케이션을 공부하는 데 있어서 가장 중요한 본질적인 것을 담고 보안적인 내용을 담은 수업임

Cross Site Script를 줄여서 XSS라고 한다. XSS는 웹사이트에 스크립트 태그를 주입하는 것이다.

스크립트 태그는 자바스크립트라는 컴퓨터 언어를 웹브라우저에서 실행한 코드이다. 크로스 사이트 스크립트는 정보를 유출하는 문제가 생길 수 있기 때문에 매우 위험하다. 

-> php가 갖고 있는 함수 중에 크로스 사이트 스크립트를 방지하기 위한 2 개의 함수를 사용함

-> htmlspecialchars()함수로 막을 수 있다.

->스크립트가 그냥 그대로 출력되는 것을 확인할 수 있다.


27.2. 보안 파일 경로 보호

 

공격자가 여러 정황들을 파악해서 디렉토리 바깥쪽에 password라는 파일이 있다는 것을 알아내어 엔터를 치면 웹페이지에 비밀번호를 나타내는 결과를 갖게 된다. 

-> 파일 시스템을 사용할 때는 조심해야 한다.

->basename이라는 함수 사용하기

basename함수 : 파일의 경로에서 파일명만을 추출해 주는 함수

 

삭제 대상을 데이터라는 디렉토리에 달아야 한다.


29. UI API 그리고 공부방법

 

UI = User Interface

API = Application Programming Interface

 

UI = 애플리케이션을 사용하는 사람들이 접하게 되는 모든 것

ex) 링크, 폼, 시각적으로 눈에 보이는 텍스트

 

사용자는 UI를 통해서 시스템을 조작하고 시스템이 제공하는 정보를 볼 수 있다.

 

API = 웹브라우저의 a 태그, php가 제공하는 scandir 같은 명령 또는 함수 

 

API가 부품이라면 언어의 문법은 그 부품을 결합해서 새로운 기능을 만들어내도록 해주는 결합 방법이다.


30. 수업을 마치며

 

 php는 객체지향언어이다.

php의 api는 대체로 함수의 형태로 제공된다.

 

https://www.php.net/manual/en/funcref.php

 

PHP: Function Reference - Manual

 

www.php.net

-> 참고할 목록과 기능에 관한 내용

 

 

php composer라고 검색하면 아래의 웹페이지가 나온다.

https://getcomposer.org/

 

Composer

A Dependency Manager for PHP Latest: 2.3.10 (changelog) Getting Started Download Documentation Browse Packages Issues GitHub

getcomposer.org

composer는 패키지 관리자이다. 

다른 사람이 만든 소프트웨어를 부품으로 해서 블럭처럼 조립해서 소프트웨어를 만들어가는 것이 현대적인 애플리케이션에서 소프트웨어를 만드는 기본적인 방법이다.

 

데이터베이스와 php를 연동해야 한다. 

작성한 글을 삭제하고나 수정할 수 있게 하기 위해서 cookie를 사용한다. 쿠키는 브라우저의 기능이다.

그런데 쿠키를 사용하면 보안상의 문제가 있을 수 있기 때문에 사용자 인증을 할 때는 쿠키를 사용하기보다는 세션을 사용해서 구현하는 게 더 안전하다.

 

세션 기능을 이용하면 회원관리를 할 수 있고 회원마다 다른 권한을 줄 수 있다.

페이스북, 구글, 네이버, 아마존과 같은 거대 기업들의 인증 시스템을 빌려서 쓰는 경우가 많이 있다. 이런 걸 사용하면 어떤 사이트에 가입하고 싶은 사람들이 페이스북에 가입이 되어 있다면 버튼 몇 번으로 아주 손쉽게 회원가입을 할 수 있다. 또 회원에 대한 구체적 정보를 페이스북이 갖고 있기 때문에 회원에 대한 크리티컬한 정보를 최소한으로 가지고 있어도 된다는 점에서 훨씬 더 안전하다는 장점도 있다.