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