Hash에서 값을 얻는 방법(feat. try, fetch, dig) (How to use try, fetch and dig for getting value from hash) ### Hash에서 값을 얻는 방법 데이터를 다루다 보면 자주 Hash (다른 언어에선 Dictionary 라고도 하는)를 사용하게 되는데, Hash에서 데이터를 얻을 때, 어떻게 뽑아내는지와 주의해야할 점에 대해 적으려고 한다. 예제를 통해 알아보자. --- #### fetch 일단 간단한 Hash를 하나 만들어본다. ```ruby hash = {:apple=>{:color=>"red"}, :banana=>"yellow", :melon=>"gree "} # => {:apple=>{:color=>"red"}, :banana=>"yellow", :melon=>"green"} ``` 그 다음 [] 으로 값을 얻어보자. banana 키의 yellow 라는 값을 얻고 싶다면, ```ruby hash[:banana] #=> "yellow" ``` 아주 간단하다. 하지만 banana이라는 key가 없거나 오타가 있다면 어떻게 될까? ```ruby hash[:banaan].upcase # NoMethodError (undefined method `upcase' for nil:NilClass) ``` 위와 같이 에러가 뜬다. 이런 상황을 방지하기 위해 `fetch`를 사용한다. ```ruby hash.fetch(:banaan, "yellow").upcase # => "YELLOW" ``` --- #### try 이번엔 red의 값을 찾아보자. ```ruby hash[:apple][:color] # => "red" `...
글
3월, 2020의 게시물 표시
루비 온 레일즈에서 devise gem 없이 로그인 기능 구현하기 (How to build authentication system without devise gem in Ruby on Rails)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
##### 해당 포스트의 목표는 로그인 기능을 devise gem을 이용하지 않고 직접 구현하는 것입니다. 직접 구현해보면서 로그인 기능이 어떻게 구현되는지에 대해 이해해보고자 합니다. ##### 만약 Ruby on Rails 입문하고 싶거나, 입문하지 얼마 되지 않았다면, 해당 글을 따라해보기를 권합니다. 로그인에 대한 이해 뿐만 아니라, Ruby on Rails의 CRUD (Create, Read, Update), Background Job 등을 경험해볼 수 있기 때문입니다. 구현 순서는 아래와 같습니다. 루비 온 레일즈는 이미 다 설치되어 있다고 가정하고 진행합니다. *루비 온 레일즈 설치 방법*은 https://gorails.com/setup/osx/10.15-catalina 와 같은 사이트를 참고하시기 바랍니다. #### 1. 회원가입 구현(feat. MVC(Model, View, Controller)) #### 2.쿠키를 이용한 로그인 #### 3. 세션을 이용한 로그인 #### 4. JWT를 이용한 로그인 #### 5. 사용자 메일 인증 --- ### 1. 회원가입 구현(feat. MVC(Model, View, Controller)) 로그인을 구현하기 위해 사용자 정보를 저장할 User table을 만들 것입니다. **명령어로 한 번에 모델, DB 테이블, 테스트 파일 생성** --- ```bash rails g model User ``` 위와 같은 명령어로 model 파일과, migration 파일, test를 위한 파일들을 동시에 만들 수 있습니다만 직접 파일을 만드는 경우에는 아래와 같습니다. **모델, DB 테이블, 테스트 파일을 따로 생성** --- 아래와 같이 models 폴더에 `user.rb` 파일을 만듭니다. 사진 1 만든 파일 안에 아래 코드를 입력합니다. 모델 파일을 만들었습니다. user.rb ```ruby class User # ``` 한 번 똑같은 이메일로 회원가입을 해봅시다. `r...
루비 온 레일즈에서 new 와 build 메소드 차이 (Difference between new and build method in Ruby on Rails)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
구글 블로거에서 마크다운 사용하는 방법 (How to use markdown in Google Blogger)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱

## 구글 블로거에서 마크다운 사용하는 방법 구글 블로거를 쓰면서 불편했던 부분이 코드 편집의 어려움이었다. markdown을 쓸 수 있다면 그런 문제도 해결되고 보다 가독성 있게 쓸 수 있을텐데라는 생각에 사용 방법을 찾아 사용했봤다. 여러 방법을 사용해본 후 가장 간편하면서, 내게 잘 맞아 지금도 사용하고 있는 방법을 소개하려고 한다. ### cdn을 이용한 markdown 사용 방법 --- 아래 사진을 보고 따라하면 1분 만에도 설정할 수 있다. 아래 이미지와 같이 블로거 쓰는 페이지에서 테마를 클릭한다. 그 다음 오른쪽 상단에 버튼을 누른 후 HTML 편집을 클릭한다. 그 다음 아래 코드를 아래 이미지와 같은 위치에 복사한다. ```html ``` 그 다음 아래 코드를 맨 아래 쪽으로 내려가서 아래 이미지와 같은 위치에 복사한다. ```html ``` 그 다음 아래 이미지와 같이 맨 하단의 오른쪽 부분의 디스크 모양을 클릭해 저장한다. 꼭 클릭해서 저장 ! 그 다음 설정 => 글, 댓글 및 공유에 들어가 "추가" 버튼을 클릭한다. 아래 이미지와 같이 아래 코드를 입력하고 오른쪽 상단의 설정 저장 버튼을 클릭한다. 꼭 클릭해서 저장! 이제 글쓰기 화면으로 가면 아래와 같이 위에서 저장한 코드가 자동으로 입력되어 있을 것이다. 그 코드 사이에 마크다운 문법을 이용해 글을 작성하면 된다. 참고 - https://js-react.blogspot.com/2017/01/using-markdown-in-blogger.html
AWS 요금 폭탄
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
## AWS 요금 폭탄 AWS 청구서를 보고 멘붕이 왔다. 테스트용으로 $533.17가 사용됐다. 실서버도 아닌데 말이다.... 다 내 무지에서, 안일함에서 나온 비용이다. 해킹을 당한게 아니라 오로지 내가 무지해서 나온 비용임으로 어디에 하소연할 곳도 없다. 하지만, '소잃고 외양간이라도 고쳐야지'라는 심정으로 글을 적어본다. 서울 리전과 도쿄 리전, 두 개 리전에서 동일하게 EC2, RDS, Route53, Elastic IP, VPC를 사용했다. 한 개 리전 비용의 2배가 총 비용이 되겠다. 리전 1개에 대하여 되짚어보자. 가장 많이 비용이 나온 것은 RDS다. RDS를 맨 처음 생성할 때 default 값이 db.r5.large 였는데 이게 그렇게 비싼 db인지 모르고 아무 생각 없이 만들었던게 문제였다. 기본적으로 RDS 요금은 세 가지 항목으로 구성되어 요금이 책정된다. 중지해놓지 않고 사용 중일 때 나가는 instance 요금과 중지해도 과금되는 storage 요금, I/O Request에 따른 요금이다. 테스트용이였기 때문에, storage나 I/O Request에 따른 요금은 2달러 내외였다. 문제는 instance 요금. 이게 거의 $240달러가 나왔다. 테스트용이었기 때문에, 테스트 안할 때는 껐어야 했다. 그리고 db.r5.large만큼 큰 db가 아니라 t2.small, t2.medium 정도로 했어야했다. 그랬으면 이런 불상사가 없었을텐데. 다음으로 많이 나온 것은 EC2다. 3개의 instance를 사용했는데, 1개는 t2.medium, 1개는 t2.small, 1개는 VPC용 t2.nano 였다. 이건 켜놓지 않아도 비용이 들기 때문에, 사용하지 않는 경우에는 AMI를 이용해 이미지를 생성해놓고 필요할 때 꺼내서 사용했어야 했다. 하지만 그렇게 하지 않아 $24가 청구 됐다. 마지막으로 사전에 얼만큼 필요한지, 요금은 얼마인지 알아봐야했다. 그리고 조직에 연결되어있는 AWS여서 결제에 대한 aler...
루비 온 레일즈에서 migration 활용법 (How to use migration in Ruby on Rails)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
## Ruby on Rails 에서 migration 활용법 table 을 만들거나 수정하는 경우 migration 파일을 이용한다. 해당 부분은 많이 찾아볼 수 있을 것이기 때문에 이 글에선 migration 시 실행하는 파일에 대해서만 알아보려고 했으나 설명하려다보니 그냥 추가하는 부분도 같이 설명해보려고 한다. --- ### attribute (column) 추가 예를 들어서 User table에 role 이라는 column 을 추가해야 할 때를 가정한다. 아래와 같이 명령어를 실행하면 db > migrate 폴더에 파일이 생성된다. ``` rails g migration add_컬럼명(column)_to_테이블명(table) 컬럼명:데이터타입 #Ex) rails g migration add_role_to_user role:integer ``` 파일을 열면 아래와 같은 코드를 확인할 수 있을 것이다. ```ruby class AddRoleToUser
루비 온 레일즈에서 Enum 사용법 (How to use enum in Ruby on Rails)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
## 루비 온 레일즈에서 enum 사용법 --- 일단 enum( 이눔... )이 무엇인가에 대해서 알아보자. ### enum이란 --- 컴퓨터 프로그래밍에서 열거형, 이넘, 팩터는 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다. 일부 열거자 자료형은 언어에 기본 소속되어 있을 수 있다. - 출처 : 위키백과 이렇게 글로 쓰면 잘 모르겠으니 코드로 확인해보자. ```ruby enum role: { admin: 0, manager: 1, normal: 2, developer: 3 } ``` 사용자의 역할을 구분하는 경우가 보통인데, 위와 같이 사용자의 역할마다 번호를 부여해 사용할 수 있다. 근데 왜 이걸, enum을 써야하는가? 라는 의문이 든다. 어떻게 사용하는지와 함께 enum의 장점을 확인해보자. ### enum 사용법 & 장점 --- 예를 들어 User 모델이 있으며, role 이라는 attribute 가 있다고 가정하자. 이 때 User 모델에 enum으로 role 을 정의한다. ```ruby class User
Ruby on Rails에서 create, update, destroy의 url route(path) (url route(path) of create, update and destroy in Ruby on Rails)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
레일즈 route member 와 collection (Ruby on Rails, route member, collection)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
레일즈에서 routes.rb 파일에서 자주 resource :posts 와 같이 resource를 사용한다. resource는 CRUD에 필요한 route 들을 만들어주기에 매우 편리하다. 하지만, CRUD 말고도 필요한 기능, 또는 필요한 url 주소가 있을 수 있다. 그 때 사용하는 것이 member와 collection이다. resource :post do post :create_log, on: :member get :search, on: :collection end 이런 식으로 사용하게 되는데 member와 collection의 차이를 알아보자. member 는 /posts/:id/create_log 이런 식으로 post의 id 값과 함께 url 주소를 사용할 수 있다. 따라서 post id 가 필요한 경우라면 member를 사용하는 것이 좋다. collection은 /posts/search 와 같이 route 를 생성해주기 때문에 특정 post id 가 필요 없는 경우에 사용하는 것이 좋다.
레일즈에서 Redis 레디스 사용법 (How to use redis in Ruby on Rails)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
설치 방법은 많은 사이트에 나와 있으니 참고하시기 바랍니다. 여기서는 간단한 사용법에 대해서 알아봅니다. 설치 방법 참고 : https://github.com/redis/redis-rb key 와 value 로 저장하는 법. Redis.current.set("key", "value") 저장한 key, value에 대한 저장 유효 기간을 설정하는 법. (아래의 경우 유효기간 10초) Redis.current.expire("key", 10) key로 value를 가져오는 법. Redis.current.get("key") key, 리스트로 저장하는 방법 Redis.current.lpush("key", 배열값) key, 리스트로 저장한 것을 삭제하는 방법. Redis.current.del("key") key, 리스트로 저장했을 때 리스트 값을 가져오는 법. -1이라고 하면 맨 처음으로 저장한 값 Redis.current.lindex("key", -1) key, 리스트로 저장했을 때 전체 리스트를 확인하는 법 (0번째 부터 마지막까지) Redis.current.lrange("key", 0, -1) key, 리스트로 저장했을 때 맨 처음으로 저장한 값을 빼는 방법(삭제하는 방법) Redis.current.rpop("key")
부투스트랩으로 화면 사이즈(width값)에 따라 element 숨기기 (How to hide element according to width value(screen size) in Bootstrap 4)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱

이전 포스트에서 모바일 화면 또는 width 값에 따라 html element를 숨기고, 보이게 하는 방법을 jQuery 로 소개했다. 해당 포스트에서는 jQuery 없이 Bootstrap(v4)로 화면 사이즈(width 값)에 따라 html element 를 숨기고 보이게 하는 방법을 소개하려고 한다. 방법은 아래와 같다. 링크( https://getbootstrap.com/docs/4.0/utilities/display/#hiding-elements )를 들어가면 아래와 같은 화면이 나온다. 해당 document를 보고 숨기거나 보여주면 된다. 예를 들어 아래의 div element 를 약 1000px 이상에서만 보여주고 싶다면(lg, md, sm 등을 이용해 사이즈를 결정하면 된다. 참고 링크 : https://getbootstrap.com/docs/4.0/layout/grid/#grid-options ) <div> "약 1000px 이상에서만 보여주고 싶어요" </div> 아래와 같이 class를 추가해준다. <div class="d-none d-lg-block"> "약 1000px 이상에서만 보여주고 싶어요" </div>