라라벨 게시판만들기 - 프레임워크란 ?

학습목적

기존에 php로 만들던 게시판을 라라벨을 적용하여 리펙토링 프레임워크가 뭔지 공부하면서 여러기능들을 적용

라라벨 선정이유

java로 시작했으면 좋았겠지만 php로 시작하였고 쉬운언어로 게시판 하나 만들어 보고싶어서 시작한 웹사이트 만들기가 어느정도 끝났으나 굴러가기만 하는 코드가 좋은코드가 아님은 어느정도 알고있었다. 조금더 프레임워크 종류를 둘러보다 라라벨도 꽤나 괜찮고 인기있는 프레임워크이며 스프링에서 지원하는 mvc orm 등 여러가지 기능들을 글로써가 아닌 머리로 이해해보고자 구현해보았다.

프레임워크는 뭘까

Frame(틀) work (일) 일을 하기위한 틀이라는 여러 블로그에서 보았다. 스프링 리액트 넥스트JS등 필수적이라고하는 프레임워크들을 보면서 왜 프레임워크를 써야하는지 호기심이 들었다.

아직 얕은 수준인 내 지식으로는 프론트엔드 프레임워크는 다비슷해보였고 백엔드프레임워크 또한 다 비슷해보였다.

여러 프레임워크를 보면서 자주 등장하는 단어들을 하나씩 검색해보면서 감을 잡으려고 노력했다.

프레임워크를 사용하는 이유는 개발시간단축, 보안향상, 코드검토, 개발 유연성, 버그감소 라고하는데 사용해보지 않고선 이해할수 없었다.

프레임워크

소프트웨어에서 프레임워크는 소프트웨어를 개발하기위해 재사용하는 라이브러리 클래스 API등을 모아둔 코드의 모음이다.

프레임워크 vs 라이브러리

라이브러리와 상당히 유사하고 여러 페이지를 돌며 검색해봐도 만들어진지 얼마 안된개념이라그런지 딱 정의내릴수는 없었다. 찾다보니 가장 눈에 들어온 개념은 IoC 제어의 역전이다. 

Ioc

IoC 한글로는 제어의 역전이라는 뜻이다. 무슨말인가하니 내코드가 제어하는것은 라이브러리, 코드에 제어당하는것은 프레임워크....
처음에는 이해가 안되었지만 코드를 작성하면서 어느정도 이해가 갔다.
내가 라라벨을 사용한다면 라라벨의 구조에 맞게 구현을해야한다.
가장 와닿는 기능을 말하라하면 Route 라는 기능이다. 라라벨에서는 Route가 모든 http 요청을 먼저 받는다. 그리고 적절한 컨트롤러,메서드에 연결해준다.

이런식으로 프레임워크에서는 프레임워크의 구조를 지켜가며 코드를 작성해야한다. 좋은 프로그램을 만들기 위한 구조를 대 선배님들이 미리 만들어두신거라고 생각하니 감사했다. 당연하게도 내가 그냥 코드를 짜는것보다는 이 프레임워크의 규칙을 지켜가며 프로그래밍을 한다면 더욱 좋은 프로그램이 된다. 누구나 고수가 아니니 좋은 프로그램을 만들게하기위해 제어를 해두신것이 Ioc라고 이해했다.

재사용성

웹 페이지를 제작하면서 한가지 의문이 들었다. 회원가입, 로그인, 게시판 등 대부분의 게시판에 사용되는 기술들은 다 똑같은거 아닌가 ? 왜 개발시간이 오래걸리는거지 ? 다 똑같은코드에서 수정만 하면 안되려나 ? (진짜 몰라서 이런생각이들었다) 그런 생각이 드는 와중에 디자인패턴이라는 개념을 알게되었다.

디자인패턴이란

개발시 발생하는 반복적인 문제들에 대한 해결방안 중 해결책으로 나온것에 대한 모범사례
4대특성( 캡슐화,상속,추상화,다형성)과 SOLID 기반으로 구현되어있다.
일반적인 해결책을 제공하고, 가독성,유지보수성, 확장성,안정성이 좋다

이거였다. 나는 내코드가 일반적인가? 라는 의문이 있었다. 모두가 나처럼 구현하나 ? 내 코드가 맞는코드인가? 를 어느정도 해결해주는것이 디자인패턴이였다.

일반적인 코드란 논리적이고 유지보수가 쉬운 코드일것이다. 나말고도 이해할만한 코드.

MVC 패턴

여러 모든 패턴들을 공부하지는 못했고 MVC 패턴이라는 자주사용한다는 패턴부터 이해해보고 라라벨을 사용해서 적용해보고자 했다.

Model View Controller 로 나눠진 MVC패턴은 디자인, 비즈니스로직, 화면을 구분하는데 중점을 둔다.

  1. 모델 : 데이터, 비즈니스 로직을 관리
    1) 포함해야할 데이터가 무엇인지 정의한다.
    2) 데이터의 상태가 변경되면 뷰에게 알린다.
    3) 데이터가 어떤식으로 저장되어야할지 기본값은 무엇인지 데이터의 형식을 정의한다.
  2. 뷰 : 레이아웃 화면 처리
    1) 유저와 만나는 부분으로 화면을 보여주고 유저의 동작을 받는다.
  3. 컨트롤러 : 모델과 뷰에 명령을 전달한다.
    1) 앱의 사용자로부터 입력에 대한 응답, 모델, 뷰를 업데이트한다.
    2) 예시로 장바구니에 담는것을 클릭=> 장바구니 모델에 누른 옷을 추가 => 뷰에서는 장바구니에 옷이 담김

    MVC의 장점은 나눠서 개발할수있다는것인거 같다. 데이터를 다루는 사람은 데이터를 정확하게 정의하고, 컨트롤러에서는 행동을 정의한다.

결론

프레임워크는 프로그래밍 고수분들이 만들어두신 프로그래밍 제작 틀이다. 그리고 우리는 그 틀에 맞춰서 개발을 해야만 한다. 초보자인나는 게시판 CRUD정도는 만들수있다. 하지만 잘 만들었다고 말할순 없다. 아니 잘만든건지 아닌지도 모른다. 무지하니까

하지만 프레임워크의 규칙을 지켜나가면 어느정도 구분이되는 코드가 완성이된다. 스프링에서는 객체지향에 맞게 코드를 짜기 위해 스프링이 만들어졌다고 한다.
누구나 객체지향적으로 코드를 만들고싶지만 뜻대로 안되거나 잘몰라서 좋은 코드를 만들지 못했지만 스프링의 프레임을 이용하면 객체지향적인 코드가 만들어진다.

선배 프로그래머가 겪은 문제를 겪지 않기위해 만든것이 프레임워크!! 이정도는해라! 로 만들어진것이 프레임워크!!