TigerCow.Door


안녕하세요. 문범우입니다!


어느덧 날씨가 더워지는 5월!

대학생들에게 5월에 빼놓을 수 없는 행사 중 하나는 대학 축제죠?

그래서 우리 서울시립대학교 멋쟁이사자처럼에서는 축제 안내사이트를 제작해보았습니다.


먼저, 완성된 사이트는 아래 주소를 클릭하시면 됩니다.!


http://uos.likelion.org


웹으로 보시는 분들은 이게뭐지..? 할 수도 있어요 :'(

간단하게 정보를 제공받고, 확인하기 위해 모바일에서 보았을 때 이쁘도록 제작되었기 때문에 모바일로 확인하시는 것을 추천드립니다!






해당 사이트를 개발하면서, 저는 전체적인 기획 및 총괄, 백엔드 구성, 행사화면 제작을 담당하였습니다.

초기에 개발에 참여하고자 인원들을 신청받고, 개발 목표와 의도, 범위 등을 설정하였습니다.

이에 대한 전체적인 내용은 아래, 축제 사이트 개발 github 을 통해 확인하실 수 있습니다 :)


https://github.com/doorBW/UOS_festival


처음에는 어떤 구조로, 어떤 디자인으로 할지 너무나 막막했으나, 우리 멋쟁이 사자처럼 6기들과 함께 이야기하고, 아이디어를 주고 받으며 기초적인 구조를 잡았습니다.

이후 초기 프론트 담당인원들이 세부적인 디자인을 기획하고, 백엔드 담당인원들은 각 페이지 구성을 진행하였습니다.

시간이 지나고 보니 백엔드 분야로 처리할 것이 거의 없어서, 백엔드 인원을 모두 프론트로 참여시켜서 개발을 진행하였습니다.

인원당 하나의 페이지를 만들고, 만들어진 페이지를 백엔드 담당인원이 받아서 전체적으로 연결시키는 등의 방식으로 개발이 진행되었습니다.


사이트 내에서 엄청나게 대단한 기술이나, 효과는 없지만 처음으로 실질적으로 배포되는 서비스 페이지를 개발하는 멋쟁이 사자처럼 6기 인원들에게는 매우 큰 도움이 되었을 것이라고 생각합니다. :)


물론 저도 오랜만에 오랜시간동안 함께 협업함으로써 서로 이야기하고, 아이디어를 나누며 개발하는 일을 하게 되어서 너무나 신나게 작업하였습니다.


개발에 참여한 멋쟁이 사자처럼 6기 모두 수고하셨습니다 :)


- 추가적으로 사이트 자체 또는 사이트 개발에 대한 모든 문의는 댓글을 달아주시거나 공지사항을 통해 저의 개인 이메일 또는 카카오톡을 통해서 연락주세요!


블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요

안녕하세요. 문범우입니다.

이번 포스팅은 4월 12일 서울시립대학교 멋쟁이사자처럼 수업에 대한 내용입니다.

지난 포스팅을 시작으로 Ruby on Rails를 시작했습니다.

따라서 이번 포스팅의 내용은 다음과 같은 순서로 진행됩니다.


- 지난 내용 복습

- Array 개념

- Range

- Lotto 번호 생성 페이지 만들기

- 이미지 넣기



1. 지난 내용 복습


지난 포스팅에서는 먼저 MVC 패턴과,

ruby on rails가 무엇인지 알아보았습니다.

우리가 앞으로 다루게 될 ruby on rails 는 백엔드(backend) 작업으로써, ruby 언어를 이용한 프레임워크입니다.

백엔드를 다루다보면 사소한 문법실수나 기타 실수때문에 아예 웹페이지가 뜨지 않을때도 많습니다. 따라서 하나하나 꼼꼼히 살펴보고, 에러가 발생했을때는 에러메세지를 보고 직접 해결해보는 연습을 하시면 좋습니다.

개인적인 팁을 드리자면, 에러가 발생했을 때, 사용하고 있는 언어나 프레임워크를 시작으로 에러메세지를 구글링하면 해결방안이 나올 때가 있습니다.

예를 들어, ruby on rails를 사용하다가 abc 라는 에러가 발생하면, 구글에 ruby on rails abc error 와 같은식으로 검색하시면 됩니다.


그리고 이어서 우리는 Cloud9을 통해 ruby on rails를 시작하는 방법에 대해서 알아보았습니다.

cloud9은 우리가 특정 프레임워크를 우리의 컴퓨터에 직접 설치하지 않고 가상으로 사용할 수 있도록 해주는 서비스 입니다. 일반적으로 IDE 라고 불리는데, cloud9 이외에도 국내에서 구름IDE등이 존재합니다.

현재 기존의 cloud9은 신규가입이 불가하여 서울시립대학교 멋쟁이사자처럼에서는 대표님께서 따로 결제를 진행하여, 다른 학생들을 팀에 초대하여 cloud9를 이용하는 방식을 사용하고 있습니다. 다른분들께서는 기존의 cloud9말고 aws c9이라는 서비스를 무료로 이용할 수 있지만 워크스페이스(가상환경)를 하나만 생성할 수 있는 등의 제약이 있습니다.


또한 간단하게 ruby on rails 프레임워크를 이용해보는 시간을 가졌습니다.

home이라는 컨트롤러를 생성하여 컨트롤러에서 다루는 변수를 view로 가져와 출력해보기도 하였습니다.



2. Array 개념


이번에는 바로 ruby on rails에서 직접 코딩하기보다 간단한 개념을 하나 익혀보겠습니다. 하지만 바로바로 결과를 확인할 수 있도록 cloud9을 실행해서, 코드로 확인해보면서 진행하겠습니다.


먼저 cloud9 서비스를 키고 새로운 ruby on rails 워크스페이스를 생성합니다.

워크스페이스가 생성되고 나면 아래에 있는 창을 bash라고 했었습니다. 터미널이라고도 불리는 것으로써 윈도우에서의 cmd(명령 프롬프트)라고 생각하시면 됩니다.

해당 bash 창에서 다음과 같이 명령어를 입력합니다.



irb 라고 입력하면, 위의 사진과 같이 ~~~ $ 였던 것이 ~~~ > 으로 바뀝니다.

간단히 말해서 irb란, 루비 프롬프트, 루비의 대화형 창에 들어오게 하는 명령어입니다. 해당 창에서는 ruby 언어를 통한 코딩이 바로바로 가능합니다.



이제 Array 에 대해 알아보면서 해당 irb 창에서 바로 테스트 해보겠습니다.

array란 배열이라는 의미입니다. 

배열이라는 것은 다음 그림과 같은 것 입니다.



위의 그림과 같이 1부터 6이 담긴 상자가 이어져 있습니다.

그리고 index 라고 하는 각 상자에 대한 번호가 부여되어 있습니다.

쉽게 생각해서 이러한 형태를 배열이라고 생각할 수 있습니다.

즉, 우리가 위의 형태를 가진 배열을 a라고 설정한다면 a[0] = 1이고 a[3] = 4가 될 것입니다.


ruby 에서는 이러한 배열을 만들기 위해서 처음에 다음과 같이 명령을 내려줍니다.


a = Array.new


이 명령어를 통해서 a라는 이름의 새로운 배열을 만들게 됩니다.

그리고 위와 같은 명령어를 통해 생성되는 배열은 기본적으로 어떠한 상자도 가지고 있지 않은, 단순히 배열로써의 성격만 띄고 있는 상태의 배열입니다. 만약 처음부터 3개의 상자를 가진 배열을 만들고 싶다면,


a = Array.new(3)


과 같이 입력하면 됩니다.

바로 irb 를 통해서 진행해보도록 하겠습니다.



irb 에서는 만들어진 배열을 바로 결과로 보여줍니다.

이때 a = Array.new(3) 을 통해 세개의 상자가 생기긴 했는데 우리가 따로 입력하지 않은 nil 이라는 값이 들어있는 것을 볼 수 있습니다.

배열을 처음 만들게 되면 우리가 어떠한 값을 넣을 것인지 지정해주지 않았으므로 아무 값도 들어가지 않습니다. 이럴때 컴퓨터는 어떠한 값도 존재하지 않는다는 것을 표현해주기 위해서 null 또는 nil 이라고 표시합니다. 즉, null 또는 nil 이란 0이나 기타 어떠한 값도 아닌, 아무것도 없는 값을 의미합니다.


이제 우리가 새롭게 만든 배열 a 에 특정 값을 넣어보도록 하겠습니다.

새로운 값을 삽입하기 위해서는 push라는 함수를 이용합니다.


a.push(3)


위와 같이 (배열).push(삽입할 값) 을 입력함으로써 배열에 새로운 값을 입력할 수 있습니다.



그런데 우리가 처음에 3개의 상자를 가지게 만들어서 생겼던 nil이 사라지지 않고 그대로 존재하고 있습니다.

push 함수는 기존의 상자에 대해 값을 변경하는 등의 작업이 아닌, 새로운 상자를 만들면서 우리가 입력한 값을 넣어주는 함수이기 때문입니다.

그럼 nil 값을 가지고 있는 3개 상자의 값을 바꿔보도록 하겠습니다.

처음에 배열에 대해서 소개해드릴때 각 상자는 자신의 위치, 인덱스를 가지고 있다고 말씀드렸습니다.

이러한 인덱스를 이용하여 값을 바꿀 수 있는데, 이때 인덱스의 시작값은 0입니다.

즉, 현재 a[0] == a[1] == a[2] == nil 인 것입니다.

따라서 각 상자에 새로운 값을 넣어주도록 하겠습니다.



각 상자에 대한 인덱스를 이용하여 값을 바꿔줌으로써 현재 a라는 배열은, [1, 2, 3, 4, 5, 10] 이라는 형태를 가지게 되었습니다.


이번에는 배열에서 지정한 개수의 요소를 랜덤하게 뽑는 함수 sample에 대해서 알아보겠습니다. 현재 a 배열에는 6개의 요소가 들어있는데 이중 랜덤하게 하나의 요소를 뽑도록 하는 함수입니다. 다음과 같이 사용합니다.



또한 sample 함수의 뒤에 소괄호를 통해 숫자를 써주면 그 값만큼의 요소를 랜덤하게 뽑을 수 있습니다.



3. Range


이번에는 Range에 대해서 알아봅니다.

단순하게 값에 대한 범위를 말하는 것이라고 생각하시면 됩니다. 즉, 우리가 1부터 45를 표현하려고 하는데 이를 단순하게 1, 2, 3, 4, 5, ... 44, 45 이런식으로 표현하는 것이 아니라 보다 쉬운 방법을 사용하는 것입니다.

ruby 에서는 점 두개( .. )를 이용해서 범위를 표현합니다.

즉, 1~45는 1..45 로 표현할 수 있습니다.



4. Lotto 번호 생성 페이지 만들기


이제 위에서 알아봤던 개념들을 바탕으로 Lotto 번호를 만들어내는 페이지를 제작해보도록 하겠습니다.

먼저 여러분이 사용하셨던 irb 창을 나가기 위해 exit를 입력합니다.



먼저, ruby on rails가 이용하는 MVC패턴 중 Controller를 만들어보도록 하겠습니다.

아래 명령어를 통해 home 이라는 컨트롤러와 함께 index라는 액션을 함께 생성합니다. (액션이라는 것에 대해서는 아래에서 설명하겠습니다.)


rails generate controller home index

or

rails g controller home index


위의 명령어를 통해서 app > controllers 안에 home이라는 컨트롤러가 생성되며 app > view 에 home이라는 폴더가 생겼을 것입니다.

먼저 app > controllers 안에 있는 home 컨트롤러를 확인해보겠습니다.



위와 같은 파일이 열립니다.

2,3번째 줄을 보시면 def index ~ end 라는 것이 적혀있습니다.

이것이 아까 우리가 컨트롤러를 만드는 명령어에서 함께 만든 index 액션입니다.

액션이라는 것은, 우리가 특정 view에 대해 서버측에서 어떻게 행동할지(데이터를 처리하거나 기타 로직을 수행하는 등) 작성되는 곳 입니다.

즉, 하나의 액션에는 하나의 view가 대응됩니다.


위에서 우리가 index라는 액션을 만들었기 때문에 아까 확인했던 app > view > home 안에도 index.html.erb 라는 view가 생성되었을 것입니다.


이제 우리의 index 액션에 우리가 처리하고자 하는 코드를 작성해보도록 하겠습니다.


로또 번호 생성 페이지를 제작할텐데, 간단히 로또 번호에 대한 규칙을 확인해보면 아래와 같습니다.


- 1~45의 숫자가 존재한다.

- 7개의 숫자를 추첨한다.

- 숫자는 중복되지 않는다.


크게 위의 3가지 규칙이 존재합니다.

그럼 먼저 1~45의 숫자를 만들어서 배열에 담아보도록 하겠습니다.



위의 3번째 줄을 보시면, lotto_num 이라는 이름으로 1~45의 값을 갖는 배열을 만들어주었습니다.

우리가 배열에 대해서 알아볼때, 새로운 배열은


a = Array.new


와 같은 방식으로 만들었는데, .new 를 이용한 방식으로 배열을 생성하게 되면 내용이 비어있는 상자들만 가진 배열을 만들게 됩니다. 이후 각각의 상자들의 값을 수정해주어도 상관없지만, 좀 더 편하게 만들기 위해서는 위의 사진과 같은 코드를 이용하여 처음부터 1~45 각각의 값을 갖는 상자들을 만들었습니다.


그럼 이제 1~45의 숫자를 가지고 있는 lotto_num 배열에서 7개의 숫자를 추첨해보도록 하겠습니다.


우리가 위에서 알아본, 배열에서 랜덤하게 요소를 뽑는 sample 함수를 이용합니다.



또한 뽑게되는 7개의 숫자는 모두 view 에서 사용되어야 하는 변수이므로 변수이름 앞에 @를 붙여주도록 합니다.


이렇게 7개의 숫자를 추첨하였습니다.

하지만 아직 하나의 문제가 남아있습니다.

지금 추첨하는 7개의 숫자는 서로 중복될 수 있습니다.

단순히 1~45의 숫자를 가진 배열에서 랜덤하게 하나를 뽑을 뿐이지, 이미 뽑힌 숫자는 안된다라는 등의 조건을 걸지 않았기 때문입니다.

어떻게 해결할 수 있을까요?


다양한 방법이 존재하지만, 그 중에서도 심플한 방법을 사용해보도록 하겠습니다.

바로, 추첨되는 번호를 1~45숫자를 가진 배열에서 삭제시키는 방법입니다.

삭제를 할때는


<배열>.delete(삭제하고자 하는 요소 값)


와 같은 delete 함수를 이용합니다.

작성된 코드는 아래와 같습니다.



이렇게 하면 위에서 알아본 3가지 규칙에 따른 로또 번호 생성이 완료되었습니다.

그럼 이렇게 추첨한 번호들을 view에서 보여주도록 하겠습니다.


app > view > home 폴더를 들어가면 index.html.erb 라는 파일이 있습니다.


해당 파일에 우리가 추첨했던 로또 번호들을 아래와 같이 작성하면 되겠습니다.


지난 포스팅에서도 설명 드렸듯, html.erb에서 ruby를 사용하기 위해서는 특별한 구문을 사용해야 합니다.

위에서와 같이 쓰려고하는 내용을 <%=  %>로 묶어 줍니다.

위와 같이 코드를 작성하고 run project 를 한 후에 주소창에 /home/index 를 붙여서 확인하면 다음과 같습니다.



이렇게 올바른 결과가 출력되고, 새로고침을 할 때마다 번호들이 새롭게 추첨되는 것을 볼 수 있습니다.


우리가 위에서 했던 방법말고, 반복문을 이용해서 코드를 더 짧게하는 등의 방법도 가능합니다. 크게, 반복문을 사용하거나, sample 함수를 응용해보는 방법입니다.

각각에 대한 코드는 아래에 공개하겠으나 꼭 스스로 한번 생각해보고, 코드를 작성해보고 난 후에 확인하시기를 바랍니다.


* 반복문 사용하기



* sample 함수 응용하기



5. 이미지 넣기


마지막으로 해볼 것은 우리가 단순히 숫자로 출력했던 것들을 이미지로 출력하게끔 하는 것입니다.

먼저 사용되는 이미지 압축 파일은 다음과 같습니다.

images.zip

해당 파일을 다운받아서 확인해보시면 아시듯 1~45번의 공으로된 이미지가 1~45이름으로 저장되어 있습니다.



이제 다운받은 이미지를 넣기 위해 위의 사진과 같이 app > assets > images 폴더를 클릭한뒤 상단 탭에 있는 File > upload local file > select files 를 누르고 다운받은 이미지 45개를 첨부합니다.



그리고 index.html.erb 파일의 코드를 위와 같이 수정합니다.

루비에서 image_tag를 작성하고 그 뒤 소괄호에 파일이름을 넣으면 자동으로 이미지를 불러와 줍니다. 또한 이미지파일 이름을 적을때 #{} 를 이용하면 중괄호 안에 우리가 컨트롤러에서 지정한 변수를 사용할 수 있습니다.


이와 같이 수정한 후에 결과를 확인해보면 아래와 같이 이미지로 로또 번호가 생성되는 것을 확인할 수 있습니다.



이렇게하여 로또 번호 생성 페이지를 만들어 보았습니다.

새롭게 알아보고 있는 ruby on rails 를 학습하며 낯설고 어려운 점도 많겠지만 하나하나 천천히 따라오다보면 어느새 잘 이해되고 스스로 할 수 있게 될 것입니다.

잘 이해가 안되거나, 에러가 나는 부분들은 댓글이나 이메일을 통해서 말씀해주시면 최대한 도움드리도록 하겠습니다.


블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요


안녕하세요. 문범우입니다.

해당 포스팅은 서울시립대학교 멋쟁이사자처럼, 4월 1일 수업에 대한 내용입니다.


금일 수업에서는 그동안 진행했던 내용을 바탕으로 하나의 웹페이지를 그대로 따라 구현해보는 실습을 진행하였습니다.

따라서 해당 포스팅에 대한 순서는 아래와 같습니다.


- 지난 시간 복습

- 구현해 볼 웹 페이지 소개(HTML/CSS)

- Jquery 구현



1. 복습


지난 시간에는 주로 Jquery에 대해서 알아 보았습니다.

그 동안 html과 css로 구현한 웹 페이지는 정적인 형태였습니다.

이에 추가적으로 배워본 Jquery는 동적인 형태의 페이지를 구현하는데 사용됩니다.

예를 들어 메뉴 버튼에서 마우스를 가져간 항목의 글자가 더 찐해지거나 색상이 바뀌는 것, 무언가를 클릭했을 때 요소의 등장이나 사라짐등의 효과등을 구현합니다.


Jquery는 JavaScript기반의 라이브러리로써 우리가 단순히 JavaScript를 사용하여 동적인 페이지를 구현하는 것보다 더 간편하고 쉽게 동적인 페이지를 구현할 수 있도록 도와줍니다.

Jqeury에 대한 보다 자세한 내용은 지난 포스팅에 대한 내용을 참고하시길 바랍니다.

http://doorbw.tistory.com/119?category=697742



2. 구현해 볼 웹 페이지 소개(HTML/CSS)


이제 여러분들께서 그동안 배우고 공부해본 HTML과 CSS를 이용하여 하나의 페이지를 그대로 구현해 볼 것입니다.

Jquery를 이용해야 하는 부분도 있지만 그러한 것들은 잠시 내려두고 단순히 HTML과 CSS를 그대로 따라해봄으로써 우리가 웹페이지를 만들때 어떤식으로 구조를 잡아야하고 실제로 우리가 배운 속성들에 대해 연습해보는 경험이 될 것입니다.


우리가 보고 그대로 구현해 볼 웹 페이지는 아래와 같습니다.

http://themes.khaitawng.com/Regina/index.html


물론 처음 진행하시는 분들은 막막하고 어려울 수 있겠지만 그동안 배운 것들을 최대한 응용해보면서 구현하시면 가능할 것이라 생각됩니다.

서울시립대학교 멋쟁이사자처럼에서는 약 1시간30분동안 이것을 진행하였고 마처 완성하지 못한 부분은 과제로 진행하여 다음 수업까지 완성시켜서 오기로 하였습니다.


무작정 세부적으로 코드를 구현하는 것 보다는, div을 통해 구조를 잡으면서 필요한 class와 id를 적절히 선언해두고 전체적인 구조가 잡히면 하나씩 세부화시키는 연습이 필요합니다.


HTML과 CSS가 완료된 코드는 아래와 같습니다.

꼭! 미리 확인하기 보다 먼저 코드를 작성해보시길 바랍니다.




3. JQuery구현


꼭 위의 2번과정을 통해 HTML과 CSS를 완성시키고 JQuery를 구현하시길 바랍니다.

이번 내용에서 다루게 될 JQuery내용은 지난 시간 포스팅에서 진행했던 내용과 크게 차이점은 없습니다.


우리가 보고 따라한 페이지에서는 크게 두가지의 jQuery효과가 있을 것입니다.

하나는 메뉴에 마우스를 가져갔을 때 해당 메뉴의 글씨가 검정색으로 변하는 효과와, More out team-> 이라는 메인 문구에 마우스를 가져갔을 때 해당 div의 배경은 검정색, 글씨는 하얀색으로 변하는 효과입니다.

두 효과모두 지난 포스팅에서 배웠던 내용이고, 비슷하기 때문에 첫번째 효과에 대해서만 설명드리도록 하겠습니다.


먼저 script로 둘러 쌓인 태그 내에서 아래와 같은 코드로 JQuery 준비를 시작합니다.


$(document).ready(function(){


});


이제 해당 코드 내부에 JQuery를 구현합니다.

먼저 생각해볼 점은,

1. 메뉴는 원래 회색글씨 -> 기본 css에서 default로 지정되어야 하는 값

2. 마우스를 올리면 검정글씨 -> mouseover시 css 변경

3. 마우스가 내려가면 다시 회색글씨 -> mouseout시 css 변경

이렇게 됩니다.

1번은 기본 css에서 적절히 구현하셨을 거라 생각하기에 2번과 3번을 JQuery로 구현해보겠습니다.


2번에 대한 코드는 아래와 같습니다.


1
2
3
4
5
$(document).ready(function(){
    $('.about, .team, .work, .blog, .contact').mouseover(function(){
        $(this).css('color','black');
    });
});
cs


위와 같이 코드를 구현하면 웹페이지에 메뉴에 마우스를 올렸을 때 해당 메뉴의 글씨가 검정색으로 변하는 것을 확인할 수 있습니다.

위의 코드에서 this라는 것이 쓰였는데, this는 앞에 있는 요소들을 그대로 가져오는데 사용됩니다.

그리고 3번을 추가적으로 구현하면, 마우스가 해당 메뉴를 벗어났을 때 다시 메뉴의 글씨가 회색으로 변할 것입니다.

3번까지 구현된 코드는 아래와 같습니다.


1
2
3
4
5
6
7
8
$(document).ready(function(){
    $('.about, .team, .work, .blog, .contact').mouseover(function(){
        $(this).css('color','black');
    });
    $('.about, .team, .work, .blog, .contact').mouseout(function(){
        $(this).css('color','gray');
    });
});
cs


이렇게 해서 메뉴에 마우스를 가져갔을 때, 해당 메뉴의 글씨가 검정색으로 변하면서 highlight와 같은 효과를 구현할 수 있습니다.

또한 같은 효과를 다른 방식의 코드로써 구현할 수 있는데 이는 아래와 같습니다.


1
2
3
4
5
6
$(document).ready(function(){
    $('.about, .team, .work, .blog, .contact').hover(
        function(){$(this).css('color','black')},
        function(){$(this).css('color','gray')}
    );
});
cs


위에서는 hover라는 함수를 사용하여, mouseover와 mouseout을 동시에 지정할 수 있습니다.


이렇게해서 4월1일의 서울시립대학교 멋쟁이사자처럼에 대한 수업의 정리가 되었습니다.

해당 수업에서는 무언가 알려드리는 것보다, 여러분들께서 직접 구현해보고 코드를 작성해보시는 것이 중심이 되었습니다. 다른분들께서도 꼭 코드를 직접 구현해보시길 바랍니다.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요