학교 Eclass를 Codeigniter를 이용해서 제작해보았다.
1. Application Flow
1.
index.php는 CodeIgniter을 시동하기 위한 기본적인 리소스들을 초기화 하는 Front Controller로서의 역할을 수행함.
2.
Router은 각각의 HTTP 요청이 어디로 연결되는지, 어떤 역할을 수행해야 하는지 알려줌.
3.
만약 캐시 파일이 있으면, 기존의 시스템 실행 과정을 건너뛰고 브라우저에 캐시를 바로 보낸다. (캐시기능은 따로 구현하지 않았음)
4.
보안. Application Controller가 로드되기 전에 HTTP 요청의 값들을 필터링한다.
(보안기능 역시 따로 구현하지 않았음)
5.
Controller가 특정 요청을 처리하기 위한 Model, Core Libraries, Helpers, 그리고 그 외 리소스들을로드한다.
6.
데이터 등이 모두 처리된 View가 최종적으로 브라우저에 띄워진다. 만약 캐싱이 켜져 있다면, View는 바로 다음 요청에 응답될 수 있도록 일단 먼저 캐시에 저장된다.
2. 주요 기능
1.
메인 페이지
•
메인 페이지는 그냥 학교 메인 홈페이지에서 보이는 기사로 그냥 넣어놨다. 별 기능을 없다.
•
네비게이션 바에는 메인으로 돌아올수 있는 탭과, 강의평가탭, 마지막으로 회원정보를 확인할 수 있는 탭이 있다.
•
최상단 우측에는 로그인정보가 표기된다. 만약 로그인이 되어 있지 않다면, 로그인, 회원가입 을 할수 있는 표시가 나오고, 로그인이 되어있다면, 현재 로그인되어 있는 아이디와 로그아웃 버튼이 표시된다
•
네비게이션바의 회원정보 역시 로그인이 되어있다면, 현재 로그인 되어있는 사용자의 정보가 표기되고, 로그인되어 있지 않다면, 로그인 페이지로 넘어가게 된다.
2.
강의평가 페이지
•
강의 게시글은 5개씩 페이지네이션이 되도록 구현했다
•
검색 기능을 구현하여 원하는 게시글을 검색할수 있다
•
검색 버튼 옆에 등록하기 버튼을 누르면 강의평가를 작성할수 있는데, 현재 로그인이 되어있기 때문에 (상단에 로그인표시 됨) 해당 등록버튼이 보이는 거지, 만약 로그인이 되어있지 않다면 해당 버튼은 보이지 않는다
3.
강의평가 - 강의평가 등록페이지
•
강의평가 등록페이지에서 강의평가와 관련된 정보를 작성할 수 있다
•
추가적으로 파일업로드 기능을 구현해서 이미지 파일을 올릴수 있다.
•
추가적으로 아무 보안적 기능을 추가하지 않았다. 매우 취약한 사이트이다. 하하하
4.
강의평가 - 강의평가 게시글 페이지
•
강의평가 페이지에서 게시글을 클릭하면 해당 강의평가 게시글을 확인 가능하다.
•
또한 파일업로드가 되어있다면, 해당 파일도 보여진다.
•
아래에 수정하기 버튼을 누르면 해당 게시글을 수정 가능하다.
•
글 삭제 또한 가능하다.
•
게시글 수정 및 삭제는 현재 로그인한 유저가 작성한 게시글이여야지만 가능하고, 다른 사용자가 해당 게시글을 클릭하면, 수정 및 삭제 글은 보이지 않는다
5.
로그인 및 회원가입 페이지
•
왼쪽은 로그인을 할수 있는 페이지이다. 아래에 회원가입을 할수 있는 버튼이 있다
•
오른쪽 그림은 회원가입 페이지이다. 아이디, 비번, 이름, 성별을 입력할 수 있다
3. 컨트롤러
•
Auth.php
1.
index, login, logout 함수
•
사이트 레이아웃을 head, nav, footer로 나눴다. login() 함수는 auth/login.php 페이지를 로드하게 했다.
•
logout() 함수는 현재 세팅되어있는 세션을 삭제하고 메인으로 리다이렉트 시킨다
2.
authentication() 함수
•
로그인을 검증하는 함수이다. 현재 입력한 id와 passwd를 db에서 확인하여 일치한다면, 세션값을 설정해준다
•
로그인에 실패한다면 다시 로그인 페이지로 돌아간
3.
update() 함수
•
회원정보를 수정할수 있는 함수이다.
•
form_validation을 이용하여 입력폼 검증을 간단하게 하고, 현재 회원정보를 수정할수 있게 한다.
•
초기에 업데이트 함수가 호출되면 입력폼 결과가 false가 나오므로 현재 로그인된 사용자의 회원정보를 Model에 등록된 getbyid() 함수를 호출하여 얻어온뒤에 auth/userinfo.php 페이지에 뿌려준다
4.
register(), delete() 함수
•
register() 함수는 회원가입을 위한 기능이다. 해당 함수 역시 입력폼 검증을 간단히 한뒤에 user 모델의 add() 함수를 호출하여 db에 저장을 한다.
•
delete() 함수는 현재 세션에 등록된 사용자의 접속 정보 세션을 삭제한다.(user모델의 delete() 함수를 호출해서 삭제한다)
•
Evaluation.php
1.
insert() 함수
•
게시글을 등록하는 함수이다. $config에 파일업로드에 대한 설정 값을 등록하였다. 허용하는 확장자는 git, jpg, png 3개이고, 원래 사이즈에 대한 값도 세팅해놨는데 뭐가 에러떠서 그냥 없앴다.ㅋ
•
board 모델의 add() 함수를 이용하여 입력한 강의평가 내용을 db에 저장한다.
2.
show(), delete() 함수
•
show() 함수는 게시글을 선택했을때 보여지는 기능을 한다. 강의평가 페이지에서 해당 게시글을 선택하면, GET 방식으로 해당 게시글에 대한 id 값이 넘어가게 해놨고, 해당 값을 가지고 board모델의 getbyid() 함수를 호출한다
•
호출이 성공적으로 되면 게시글 내용이 $post 변수에 담기고 해당 값을 lecture/post.php 페이지에 넘긴다
•
delete() 함수는 강의평가 게시글을 삭제할 수있는 기능이다. post.php 에서 넘어온 post 값을 가지고 delete를 진행한다.
3.
update() 함수
•
update 함수는 강의평가 게시글을 수정하는 기능이다. 간단한 입력폼 검증을 통해 입력 값을 체크한다.
•
파일 업로드에 대한 설정은 insert() 함수와 동일하다.
4.
list() 함수
•
list() 함수는 강의평가 메인페이지에서 보여지는 list 기능을 한다. 페이지 네이션을 위한 설정이 들어가 있다.
•
검색기능이 추가되었기때문에, 페이지네이션 기능이 검색을 했을때 해당 검색한 결과에도 적용이 되야한다.
•
따라서 일반적인 강의평가 메인페이지와, 검색을 눌렀을 시의 페이지네이션 기능을 구분하였다
•
현재 url에 검색어가 있을 경우 해당 검색어를 페이지네이션 용 주소에 이어 붙였다
•
또한 게시글 id로 정렬 기능을 구현하여 오름차순, 내림차순으로 정렬될수 있게 끔 하였다
•
검색 기능 페이지네이션 출처 :
4. 모델
•
user 모델
◦
user 모델은 사용자 정보에 대한 값을 db와 통신하는 기능을 한다. CRUD는 기본적으로 다 구현해놓았다.
•
board 모델
1.
getbyid(), record_count(), update() 함수
•
getbyid() 함수는 현재 테이블에서 원하는 행 하나를 가져오는 기능이다
•
record_count() 함수는 현재 테이블의 행의 개수를 조회하는 함수이다.
•
update() 함수는 말그대로 evaluation 테이블을 update하는 기능이다
2.
get_list() 함수
•
강의평가 메인페이지의 게시글을 리스트로 보여주기 위해 db와 통신하는 함수이다. 검색어가 있을 경우, like 조건을 추가하여 검색한 단어가 포함된 게시글을 다 조회하는 쿼리를 추가했다.
•
또한 디폴트로는 내림차순으로 조회를 하지만, 강의평가 메인페이지의 정렬 버튼을 누르면 오름차순으로 조회를 되게끔 쿼리를 구분지었다
3.
add()함수
•
add() 함수는 입력한 값을 db 저장하는 기능을 한다
5. view
•
또한 view 폴더 바로 하위에는 레이아웃과 관련된, nav, footer, header, home 페이지를 넣어놨다.
•
view는 아래에 하위폴더로 auth, lecture를 구성했다. 사용자 관련 페이지는 auth 폴더에 넣어놨고, lecture 폴더에는 강의평가 관련 페이지를 넣었다.
1.
nav.php
•
네비게이션 바에서 , is_login 값이 true면 로그인이 되어있는 상태란 의미고, 회원정보를 클릭했을시, 유저정보를 확인 및 수정할 수 있는 update 함수로 간다
•
만약 is_login 값이 False라면, 로그인 페이지로 이동시킨다.
2.
head.php
•
head.php에서 위 코드는 제일 상단에 표시되는 정보가 보여진다. 세션에 로그인이 되어있다면, 사용자 id를 출력해주고, 로그아웃 버튼을 출력한다
•
만약 로그인이 되어있지 않다면, 로그인, 회원가입 태그를 보여준다.
5. 결론
사이트 제작의 목적은 php 문법 공부 겸 추후에 웹해킹 공부를 위한 기초공부라고 볼수 있다.
일부러 보안적인 요소를 하나도 넣지 않았기 때문에, 내가 만든 사이트를 직접 해킹해보고, 발생할수 있는 기초적인 웹 해킹 기술 과 대응 방안을 따로 정리할 생각이다
제작한 사이트의 코드는 깃헙에 올렸으니 가져다 써도 된당. 호호