어드민 유저 권한 시스템 설계(Admin user authority system design)

이미지
## 어드민 유저 권한 시스템 설계 ### 문제 상황 - 현재 어드민 페이지 권한 종류가 [전체 읽기/쓰기], [전체 읽기] 밖에 없음 - 전체 읽기 - 다 읽을 수 있음 - 전체 읽기/쓰기 - 다 수정, 삭제할 수 있음 - 어드민 페이지를 이용해야하는 사람은 많음 - 어드민 페이지를 이용하려면 admin 권한을 줄 수 밖에 없는 상황. 그런데 admin 권한이 너무 큼 ### 요구사항 - 기존 권한 시스템을 최대한 가지고 가면서, 필요한 권한만 부여할 수 있는 권한 시스템을 도입해야 함 ### 설계 - 구성 - 유저, 스코프, 메소드로 구성되어있음 - 유저(사용자) - 스코프(기능 또는 페이지 단위) - 어드민 특정 기능 또는 페이지 단위 - 메소드(API 주소) - EX) api::route::get::/api/product/string:oid - 유저는 스코프를 갖고, 스코프는 메소드를 갖고 있음 - 유저는 스코프 리스트, 스코프는 메소드(요청 가능한 API)의 리스트를 가지고 있음 - 유저에게 스코프 할당을 보다 편하게 하기 위해 자주 사용되는 스코프를 preset 으로 묶음

koyeb(heroku 대체제) 으로 flask 배포하기

이미지
## koyeb 선택 이유 2015년부터 잘 쓰던 heroku(무료 플랜)가 곧 무료 플랜을 종료한다고 해서 대체제를 찾아봤다. fly.io, render.com 등을 확인해봤는데 fly.io 는 카드를 등록해야해서 탈락. render.com 는 괜찮은 것 같았는데 가격 대비 서비스가 미세하게나마 koyeb이 좋아서 선택. CPU 1 / RAM 512 / SSD 5G 가 무료라고 되어 있다. 정확히는 5달러를 주고 저 플랜을 5.4달러에 제공해서 0.4달러를 내야하는 것 같은데... 아래 이미지처럼 되어 있어서 일단 한 달 써보려고 한다. 0.4달러를 내야하면 render.com 로 가면 되니. 배포하는 방법은 별 것 없어서 쓸데없는 말이 길어졌다. ## 배포 방법 아래 이미지대로 쭉 따라하면 된다. 먼저 create app 을 누르고, gunicorn 을 사용하기 때문에 **run command** 에 `gunicorn app:app` 을 작성했다. 만약 python version 을 고정하고 싶다면 추가 작업이 필요하다. `root` directory 에 `runtime.txt` 파일을 추가하고 `python-3.9.15` 라고 명시하면 된다. 해당 작업을 하지 않으면 koyeb이 알아서 파이썬 버전을 정해서 빌드한다. 배포는 이렇게하면 끝이다. 적고 나니까 render.com 도 올려 봐야겠다는 생각이 든다. 뭐가 더 간단하려나.

Git GUI client 사용 후 비교(Feat. Fork)

- **개인적으로 써 본 Git GUI client** - SourceTree([https://www.sourcetreeapp.com/](https://www.sourcetreeapp.com/)) - Github Desktop([https://desktop.github.com/](https://desktop.github.com/)) - **Fork**([https://git-fork.com/](https://git-fork.com/)) - **Fork 를 쓰게 된 이유** - SourceTree 단점 - 단점 - Crash 가 너무 심함. 저번 주에 혹시나 해서 한 번 깔아봤는데 또 Crash. 안고쳐줌. - 간혹 가다 알 수 없는 버그, 버벅임. - Github Desktop - 상대적으로 단순한 기능 - GitKraken - 상대적으로 높은 가격([https://www.gitkraken.com/pricing](https://www.gitkraken.com/pricing)) - **Fork 장점** - Crash 난 적 없음(기억 속에 없음) - 훌륭한 UX/UI - 필요한 기능은 다 있음 - 가격 - 개인적으로 사용 시 무료 - 영구 라이센스 구매 $49.99 - 상업적으로 사용 가능 - **Git GUI client 비교 시 참고 자료** - [https://stackshare.io/stackups/fork-vs-sourcetree](https://stackshare.io/stackups/fork-vs-sourcetree) - [https://open-support.tistory.com/entry/git-guiclient-는-어떤툴을-사용하시나요](https://open-

2020 카카오 인턴 코딩테스트 - 키패드 누르기 (python3)

파이썬 문법 중 `if i in 리스트` 로 포함되어있는지 아닌지를 다른 사람 풀이 보고 알게 되었음. ``` def solution(numbers, hand): left_hand = [3, 0] right_hand = [3, 2] left_hand_distance = 0 right_hand_distance = 0 keypad_locations = [[3, 1]] left_hand_numbers = [1, 4, 7] right_hand_numbers = [3, 6, 9] center_numbers = [2, 5, 8, 0] current_hand = "" answer = "" for x in range(0, 3): for y in range(0, 3): keypad_locations.append([x, y]) for number in numbers: if number in left_hand_numbers: current_hand = "L" if number in right_hand_numbers: current_hand = "R" if number in center_numbers: left_hand_distance = abs(left_hand[0] - keypad_locations[number][0]) + abs(left_hand[1] - keypad_locations[number][1]) right_hand_distance = abs(right_hand[0] - keypad_locations[number][0]) + abs(right_hand[1] - keypad_locations[number][1]) if l

프로그래머스 타겟 넘버 파이썬 python3

처음에 그림은 그렸는데 못 풀었음. 풀이 참고해서 풀게 됨. ``` answer = 0 def dfs(i, numbers, target, result): global answer if (i == len(numbers)): if result == target: answer += 1 return dfs(i+1, numbers, target, result + numbers[i]) dfs(i+1, numbers, target, result - numbers[i]) def solution(numbers, target): global answer dfs(0, numbers, target, 0) return answer ```

자바스크립트 spread 문법(JavaScript spread syntax)

## 자바스크립트 spread 문법(JavaScript spread syntax) 자바스크립트 spread 문법은 다음과 같다. ``` let request = { a: "1", b: "2"} console.log(request) // { a: '1', b: '2' } console.log({request}) // { request: { a: '1', b: '2' } } console.log({...request}) // { a: '1', b: '2' } console.log({c: "3", ...request}) { c: '3', a: '1', b: '2' } console.log({...request, c: "3"}) { a: '1', b: '2', c: '3' } ```

AWS CloudWatch와 AWS Lambda를 활용해 AWS EC2 실행, 중지 될 때마다 Slack 메세지 받기(How to receive Slack message using AWS CloudWatch and AWS Lambda when AWS EC2 state is changed)

## AWS CloudWatch와 AWS Lambda를 활용해 AWS EC2 실행, 중지 될 때마다 Slack 메세지 받기(How to receive Slack message using AWS CloudWatch and AWS Lambda when AWS EC2 state is changed) [이 글](https://ghkdgh2365.blogspot.com/2020/12/aws-lambda-aws-cloudwatch-aws-rds-how.html)을 쓴 김에 쓰는 글입니다. AWS EC2 상태가 변경(실행 또는 중지 등)할 때마다 슬랙으로 메세지를 받는 방법에 대해서 작성합니다. 순서는 아래와 같습니다. 1. Slack 설정 2. AWS Lambda 설정 3. AWS CloudWatch 설정 ### 1. Slack 설정 [해당 페이지](http://ghkdgh2365.blogspot.com/2020/12/aws-lambda-aws-cloudwatch-aws-rds-how.html) 1. Slack 설정과 같습니다. ### 2. AWS Lambda 설정 AWS Lambda 에 가서 **함수 생성** 버튼을 클릭하고 **함수 이름**을 적은 뒤 함수를 생성합니다. 저의 경우 **런타임**(사용할 프로그래밍 언어)은 **Python 2.7**로 했습니다. 생성한 뒤 **함수 코드**는 아래와 같이 작성합니다. `'YOUR SLACK URL'` 자리에 Slack 설정 시 확인했던 **Webhook URL** 을 복사해서 붙여넣어주면 됩니다. ``` # -*- coding: utf-8 -*- import json, random import httplib from botocore.vendored import requests def lambda_handler(event, context): slack_url = 'https://hooks.slack.com/services/TBF4TQCQ4/B01GABAKDSP/i

Amazon RDS 이벤트 알림 규칙(Feat. AWS CloudWatch, Amazon EventBridge)(Amazon RDS event notification rules)

## Amazon RDS 이벤트 알림 규칙(Feat. AWS CloudWatch, Amazon EventBridge)(Amazon RDS event notification rules) AWS Lambda 와 함께 AWS CloudWatch, Amazon EventBridge의 RDS 상태 변경과 관련된 규칙을 사용하고 싶을 때 아래와 같이 설정하면 됩니다. [해당 페이지](https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_Events.html)에서 더 자세히 확인하실 수 있습니다. #### RDS Cluster가 중지됐을 때 ``` { "source": [ "aws.rds" ], "detail-type": [ "RDS DB Cluster Event" ], "detail": { "EventID": [ "RDS-EVENT-0150" ], "EventCategories": [ "notification" ], "SourceType": [ "CLUSTER" ], "SourceArn": [ "arn:aws:rds:ap-northeast-2:xxxxxxxxxxx" # 해당 RDS cluster 의 arn ], "SourceIdentifier": [ "xxxxxxxx" # 해당 RDS cluster 의 DB 식별자 ] } } ``` #### RDS Cluster가 시작됐을 때 ``` { "source": [ "aws.rds"

AWS Lambda와 AWS CloudWatch 이용해서 AWS RDS가 시작 또는 중지되었을 때, 슬랙으로 메시지 받기(How to receive slack message using AWS Lambda and AWS CloudWatch when AWS RDS is started or stopped)

이미지
## AWS Lambda와 AWS CloudWatch 이용해서 AWS RDS가 시작 또는 중지되었을 때, 슬랙으로 메시지 받기(How to receive slack message using AWS Lambda and AWS CloudWatch when AWS RDS is started or stopped) AWS Lambda와 CloudWatchAWS 이용해서 AWS RDS가 시작 또는 중지되었을 때, 슬랙으로 메시지 받는 방법을 소개하려고 합니다. ~~(AWS RDS는 비싸니깐요?)~~ 여기서 가장 중요한 부분은 **AWS CloudWatch 이벤트 생성 규칙**입니다. 따라서 가장 마지막에 적겠습니다. ~~(왜..?)~~ 순서는 다음과 같습니다. 1. Slack 설정 2. AWS Lambda 설정 3. AWS CloudWatch 설정 ### 1. Slack 설정 slack에 들어가 Apps 옆에 있는 **+** 버튼을 클릭합니다. 그 다음 검색창에 **incoming-webhook** 을 검색해 들어간 후 **Add**를 누르고, 새 창이 열리면 **Add to slack** 이라는 버튼을 클릭합니다. 그 다음 메시지를 받기 원하는 채널을 선택한 후 **Add Incoming WebHooks integration** 버튼을 선택하면 끝납니다. 새 페이지에서 **Webhook URL**에 적혀져 있는 링크만 복사해서 보관하고 있으면 끝. 혹시 메시지 알려주는 봇? 의 이름을 바꿔주고 싶다면 조금 더 아래로 내려가서 **Customize Name**을 바꿔주면 됩니다. 그 아래 **Icon** 도 바꾸실 수 있습니다. ### 2. AWS Lambda 설정 AWS Lambda 에 가서 **함수 생성** 버튼을 클릭하고 **함수 이름**을 적은 뒤 함수를 생성합니다. 저의 경우 **런타임**(사용할 프로그래밍 언어)은 **Python 2.7**로 했습니다. 생성한 뒤 **함수 코드**는 아래와 같이 작성합니다. `'YOU

구글 블로거 애드센스 판매자 정보 Google sellers.json 파일에 게시 문제 해결 방법

이미지
## 구글 블로거 애드센스 판매자 정보 Google sellers.json 파일에 게시 문제 해결 방법 애드센스 신청하니 Google seller 어쩌구 문제를 해결해야했다. 구글링해 본 결과 해결 방법이 매우 간단했다. 애드센스 관리자 페이지에서 **계정** 메뉴에 들어가 **판매자 정보 공개 상태** 섹션에서 **공개상태**를 **공개** 로 변경하고 비즈니스 도메인의 경우 안넣어도 되는 것 같지만 혹시 몰라 **본인의 블로그 url** 을 입력하면 해결된다. ##### 참고 https://blog.hangyeong.com/1200