20201218(금)

해커톤 2등이다!!

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. 다음 학습 계획

  • 루비온레일즈

Last updated