> For the complete documentation index, see [llms.txt](https://simian114.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://simian114.gitbook.io/blog/undefined-1/diary/2020/12/20201218.md).

# 20201218(금)

## 2020-12-18

### 1. 학습 날짜

* 2020-12-18

### 2. 학습 시간

* 08:30 \~ 16:00, 17:00 \~ 23:30

### 3. 학습 범위 및 주제

* 해커톤
* 루비온레일즈

### 4. 학습 목표

* 해커톤 1. 발표
* 루비온레일즈가 어떤 녀석인지 알아보자

### 5. 과제 제출

* x

### 6. 상세 학습 내용

* 해커톤
  * 오늘은 코드정리, 그리고 QR코드 가져오는 부분에 대한 에러를 해결했다. 어제는 깃허브에 올라와 있는 오픈소스를 이용해서 전자출입QR 코드를 가져왔었다. 하지만 파이썬 프로그램에서 fork를 떠서 다른 프로그램을 실행시키고, 그 자식프로세스에서 또 자식을 만든다음에 실행을 해버려서 포트에러가 아주 많이 발생했다. 즉 실행조차 거의 불가능했다는 것이다. 따라서 대대적인 수정이 필요했고 같은 팀원분인 주정님이 그 부분을 책임지고 해결해 주셨다. 그 사이 요한님은 우리 프로젝트의 핵심은 음성 부분을 맡아서 해결해주셨다. 그리고 요한님은 파이썬에 능통해서 주정님이 하시던 부분에 많은 부분 도움을 주셨다. 그 가운데 나는 ㅋㅋㅋ 진짜 아무것도 안했다....ㅋㅋㅋㅋ 이러면 안되는데...
* 루비온레일즈
  * 대부분의 문제는 앞서 경험한 사람들이 존재한다. 따라서 경험한 사람들의 지혜를 활용하면 보다 문제를 쉽게 해결할 수 있다.
  * 이러한 앞선 사람들의 지혜를 `사례`라고 부른다. 이러한 것이 정형화되고 축적되면 `프레임워크`라고 불리게 된다.
  * 즉 루비온 레일즈란 축적된 지식이다.
  * ROR은 그 중에서도 애플리케이션 프레임워크다. 이 프레임워크의 특징이라면 재사용이 가능한 클래스 라는 방법을 제공한다는 것이다.
  * 프레임워크는 코들는 부붐을 연결해주는 마더보드 라고 할 수 있다.
  * ROR은 MVC 패턴을 이용한다. MVC 패턴은 아래처럼 세 부분으로 나눠진다. 1. Model - 비지니스 로직, 모델 2. View - 클라이언트가 보는 화면 3. Controller - 모델과 뷰를 조정
  * 레일즈는 루비의 프레임워크다. 그래서 그런지 규약 이라는 단어가 자주, 많이 그리고 강조된다.
  * 그런 이유로 CoC 라는 게 존재한다. CoC 는 규약이 설정을 앞선다는것.
  * 이 CoC로 DRY라는 철학도 유지될 수 있다. DRY는 같은 코드를 반복하지 않는 다는것!
  * Controller 는 요청을 처리하는 MAC 패턴의 본체다. 모델과 그 결과를 출력하는 뷰 모두 컨트롤러의 손아귀에 있다.
    * 즉 컨트롤러란 요청을 받고 응답을 생성ㅇ하는 처리를 하는 ROR의 핵심이다.
    * 컨트롤러는 기본적으로 `ApplicationController`를 상속받는다.
    * 컨트롤러는 클래스다. 즉 `메서드`를 가진다.
    * 이 메서드들을 액션 메서드 라고 한다.
    * 컨트롤로는 하나 이상의 액션 메서드를 가지고 있는 캐리어다.
    * 액션 메서드란 클라이언트로부터의 요청을 처리하는 메서드다. 액션메서드의 역할은 요청을 처리하거나 모델을 호출하고 뷰에서 사용되는 템플릿 변수를 설정 하는 등 다양한 일을 한다.
  * 라우팅이란 특정한 URL으로 요청을 보냈을 때 요청을 처리할 대상을 지정하는 것이다.
    * ROR은 클라이언트에서 요청을 받았을 때 라우팅으로 호출해야 하는 컨트롤러의 액션을 결정한다.
  * 뷰 라는 것은 클라이언트가 최종적으로 보게 되는 페이지다. html 파일이 아닌 `erb` 파일이다. erb 란 `embedded Ruby` 라는 뜻으로 html 에 내장된 루비라는 뜻이다.
  * 기본적으로 html 파일과 동일하게 사용하면 된다. 만약 루비를 내부에서 사용하고 싶다믄 `<% ... %>` 와 같은 문법을 사용하면 된다.
  * 뷰에서 루비를 사용할 수 있다고 했다. 그리고 이전에 뷰 는 컨트롤러가 조정한다고도 했다. 그렇다면 컨트롤러는 어떻게 뷰를 조작하는건가? 기본적으로 같은 이름의 erb 파일을 조작한다. 그리고 컨트롤러의 액션 멤서드에는 멤버변수(@) 가 존재하는데 이 변수를 이용해서 뷰(erb) 파일에서 루비의 변수를 사용할 수 있게 된다.
  * 모델이란 데이터베이스 또는 외부 서비스에 접근하기 위한 로직을 담당하는 컴포넌트다. 데이터베이스는 관계형 데이터 베이스를 사용한다. 이 관계형 데이터 베이스는 루비의 객체지향과 서로 맞물리지 않는다. 이런 구조적인 차이를 객체 관계 불일치라고 한다. 따라서 개발자가 데이터베이스를 쉽게 사용하게 하기 위해서는 무언가가 필요하다. 그 무언가가 바로 O/R 맵퍼다. 이 맵퍼는 관계형 DB와 객체지향을 맞물리게 만들어준다.
  * 액티브 레코드는 이런 O/R맵퍼를 사용한다. 그리고 Rails 는 액티브 레코드를 사용한다.

### 7. 오늘 학습 내용에 대한 개인적인 총평

조금은 길게 느껴졌던 해커톤이 마무리 됐다. 그 결과는 2등이었다. 솔직히 코드의 질에 비해서 너무 좋은 결과였던 것 같다. 이렇게 좋은 결과가 나온 이유를 생각해보면 우리의 주제는 `선택이 아닌 필수`였기 때문이다. 클러스터에서 카뎃의 생활을 편하게 해줄 아이디어는 많다. 그리고 그 대부분은 카뎃의 선택에 따라 달라지지만 우리의 주제인 `출입`은 모든 카뎃의 선택이 아닌 `필수`다. 아마 우리팀을 투표해주신 분들 대부분이 이런 생각을 갖고 투표를 해주지 않았을까 싶다. 이번 해커톤에서는 공부에 대한 부분에서는 배운게 전혀 없다ㅋㅋㅋ 이 부분은 조금 아쉽다. 다음에 기회가 된다면 이번 프로젝트를 제대로 다시 만들어 보고 싶다.

### 8. 다음 학습 계획

* 루비온레일즈
