피그렛 개인정보처리 방침

1. 개요

피그렛은 이용자의 프라이버시를 매우 중요하게 생각하며 각별히 주의를 기울려 처리하고 있습니다.

이용자의 프라이버시를 존중하고 보호하기 위해 다음의 기본 원칙을 준수합니다.


1)회사는 이용자의 개인 정보를 수집처리사용 또는 공개하기 위해서 이를 적절한 방법에 따라 이용자에게 고지하고 동의를 구합니다.

2)회사는 이용자 개인 정보의 수집처리에 필요한 최소범위로 이용 목적을 특정합니다.

3)회사는 특정된 이용 목적을 달성에 필요한 최소한의 정보만을 수집합니다.

4)회사는 이용자의 동의가 있는 경우 또는 관련 법령에서 정한 경우를 제외하고는 이용자로부터 수집한 정보를 수집 목적외에 사용하지 않으며목적 달성에 필요한 최소한의 기간만 해당 정보를 보관합니다.

5)회사는 이용자의 개인 정보를 보호하기 위하여 적절한 기술적  관리적인 보호 조치를 취합니다.

6)회사는 이용자의 개인 정보 처리를 위한 정책과 절차를 투명하고 합리적으로 수립합니다.

7)이용자는 적용되는 법률이 정한 바에 따라 이용자의 개인 정보에 스스로 접근할  있고 필요에 따라서 이용자의 개인 정보를 정정할  있습니다.

8)회사는 수집한 이용자의 개인정보에 대한 관리 책임을 갖습니다회사는 항상 이러한 원칙 개인정보처리방침  적용되는 법률에 대한 이용자의 의견을 경청합니다.


2. 적용 범위

본 개인정보처리방침은 이용자의 개인정보의 처리, 보호, 그리고 이용자의 개인정보에 대한 권리 및 선택사항을 설명 합니다.


3. 수집하는 개인정보의 종류

3-1 이용자 계정에 관한 정보

피그렛 멤버쉽은 이메일 주소를 통해 계정을 생성하고, 이 과정에서 이메일 주소, 전화번호(필수)를 수집합니다. 이용자는 선택적으로 본인의 별명, 프로필 사진을 제공할 수 있습니다.

3-2 서비스 이용시 기기 정보 및 엑세스 로그

이용자가 본 서비스를 이용할 때는 OS버전에 따른 시스템상의 오류를 방지하기 위하여 OS버전, 타입 등을 확인하고 있으며, 이용자에게 보상광고 서비스를 제공하기 위하여 이용자의 단말기의 유니크함을 확인하기 위하여 단말기 광고 ID를 확인, 수집하고 있습니다. 그 외에 지속적인 서비스 개선을 위해 서비스 이용시 발생하는 이용자의 로그 데이터를 일부(특정 페이지 조회 여부, 조회수, 클릭 데이터)를 수집하고 있습니다.

3-3 내가 스스로 생성하여 타인과 공유한 정보

본 서비스에서 이용자는 본인이 생성한 텍스트, 이미지, 웹페이지 정보를 공유할 수 있습니다. 본인이 게시한 정보는 본 서비스를 이용하는 이용자들에게 공개됩니다.

4. 이용자 정보를 어떻게 이용하고 처리하는가?

본 서비스는 개인의 민감한 정보를 수집하지 않습니다. 이를 최소화 하기 위하여 이메일 정보만을 수집, 저장하고 있으며, 모든 통신은 SSL인증서 기반으로 수행하고 있어 최소한의 보안 원칙을 지키고 있습니다. 또한 계정별 DB접근 권한을 강화하여 본인과 관리자 외에 개인정보에 접근이 불가하도록 관리하고 있습니다. 만약 이용자가 해당 서비스 탈퇴를 요청하는 경우 계정 정보는 1개월 이내에 삭제 됩니다.


5. 내정보의 통제 가능여부

본 서비스에서 이용자는 이메일 계정을 제외한 모든 개인정보 수정이 가능 합니다. 만약 이메일 계정을 수정, 또는 삭제하고자 할 경우 관리자를 통해 진행할 수 있도록 하고 있습니다.


6. 개인정보보호 책임자 안내

이름 : 최상규 

연락처: ssamkyu@hanmail.net



아직 제대로 된 내용을 디테일하게 보진 못했지만

firebase데이터베이스에 ElasticSearch와 연동하여 인덱싱을 하는 방법을 제안하고 있음

일단 참고


https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html

Parse로 개발을 많이 하다보니 Parse가 제공하는 다양한 Query들을 입맛에 맞게 잘사용하고 있었다.


그래서 당연히 Firebase도 다양하게 제공하겠지 싶었다.


그런데...두둥....and Query와 or Query는 제공하지 않는다.


그래서 어떻게 하면 될지 여기 저기 찾다가 힌트를 얻었는데 and query는 컬럼을 하나 더 만들어서 두 컬럼을 합친 값을 넣어 놓는 방법이다.

json형태로 저장이 되서 컬럼이란 표현을 쓰는게 맞는지는 모르겠는데 예를 들어 "사과"란 값과 "true"란 값을 가진 컬럼이 있다면 두 값을 저장한 후 "사과_true"란 값을 하나 더 저장하고, 두 값을 합친 값으로 Query를 날리면 된다.


or Query는 고민 중이다.


python으로 개발하다가 외부라이브러리를 쓰다보면 많이 보는 글자가 바로 *args 또는 **kwargs 다.


한마디로 말해서 어떤 값을 넣을진 모르는데 *args는 값을 넣으면 함수에 변수가 튜플형태로 입력되는 것이고, **kwargs는 딕셔너리 형태로 입력되는 것이라고 보면 된다.


def a(*args):

print args


a(1,2,3,4,)


==> (1,2,3,4)


def b(**kwargs):

 print kwargs


b( a=1, b=2, c=3)


==>{ a:1, b:2, c:3}



예전에 개발 선생님에게 물어봤을 때는 설명해줘도 뭔말인지 잘 몰랐고 왜 써야 하는지도 이해를 못했는데 class를 이용해 객체를 만들어 코딩하는 방법을 사용하다보니 자연스럽게 개념을 알게 되었다.


class를 기반으로 코딩을 하다보면 변수를 일일히 받아야 하는 경우도 있지만 있어도 되고 없어도 되는 그런 변수를 받아야 하는 경우도 있다.


예를 들어 get 방식으로 api를 호출 할때 필수적으로 들어가야 하는 변수들도 있지만 그렇지 않은 변수들도 있다.


http://www.sampleapi.com/api?a=1&b=2&c=3


위와 같은 URL이 있을 때

이 URL을 호출하는데 a변수는 필수적인 변수고 b와 c는 별 상관없는 변수라고 해보자


만약 class를 static하게 만든다고 하면


import requests


class SampleApi:


def __init__(self, url, a, b, c):

self.url = url

self.a = a

self.b = b

self.c = c


def getUrl(self):


url = self.url + "a=" + self.a + "&b=" + self.b + "&c=" +self.c


response = requests.get(url)


return response




sample = SampleApi( "http://www.sampleapi.com/api?", "1", "2","3" )

a = sample.getUrl()



이런 식으로 코딩을 해야 한다.

근데 **kwargs를 쓰면 쓰는 입장에서 변수입력을 보다 간단하게 해결 할 수 있다.



import requests


class SampleApi:


def __init__(self, url, a):

self.url = url

self.a = a


def getUrl(self, **kwargs):


optionUrl = ""


if kwargs.has_key("b"):


optionUrl += "&b=" + kwargs["b"]


if kwargs.has_key("c"):


optionUrl += "&c=" + kwargs["c"]


url = self.url + "a=" + self.a + optionUrl


response = requests.get(url)


return response




sample = SampleApi( "http://www.sampleapi.com/api?", "1" )


#아무런 변수도 입력 안된 경우

a = sample.getUrl()


#변수 b만 입력한 경우

a = sample.getUrl(b="2")


#변수 c만 입력한 경우

a = sample.getUrl(c="3")


#변수 b,c를 모두 입력한 경우

a= sample.getUrl(b="2", c="3")


이전에는 모두 넣어야 했던 것과 달리 원하는 형태로 변경이 가능해진다.


거의 3년이 다 되서야 써먹다니;;;

ㅋㅋㅋㅋ 갑갑한 개발자로다...

https://github.com/lorin/mezzanine-paas


한방에 해결했다.


안돼서 꽤나 시간을 썼는데 허무...


암튼 샘플 앱을 올리면 끝난다~!!!


ㅋㅋㅋ

블로그 서비스를 쓰고는 있는데 아무래도 open api만 가지고는 이런저런 제약 사항들 때문에 맘에 들게 운영하는데 한계가 있다고 느껴져서 설치형 블로그를 찾아보고 있었다.

대표적이자, 가장 대중적인 Wordpress 는 php 기반이다보니 다뤄보지 못한 언어라 부담이 있는게 사실이었다.


이런저런 고민을 하고 있는데 문득 Django기반의 설치형블로그인 Mezzanine이 있던게 기억이 났다. 아무래도 php를 선호하는 웹개발자가 많다보니 다소 생소할 수 있는 서비스라고 생각이 된다. 예전에 중견 개발자 분과 우연찮게 django 스터디를 잠깐 한적이 있었는데 그 때 그 분이 극찬을 하며 소개해줘서 알게 되었는데 wordpress에 뒤지지 않게 많은 기능들을 지원했던 것으로 기억이 됐다.


특히 Django의 경우, Heroku하고 잘 붙어서 서버 구축에 대한 부담도 줄일 수 있다는 장점이 있다.


아직 설치해보진 않았지만 아래 사이트를 참고해서 구축해보려 한다.


http://www.benhavilland.com/blog/deploying-mezzanine-on-heroku/


 잊지말자..


heroku는 python을 지원한다.


만약 heroku에 대해서 잘 모르는 사람은 다음 사이트를 참고 바란다. (https://devcenter.heroku.com/articles/getting-started-with-python#introduction)


웹서버를 쓸일이 있었는데 여러모로 덩치가 큰  django보다 flask가 괜찮을 것 같아 쓰게 되었는데 heroku에서 flask를 쓸수 있다는 것을 처음 알게 되었다.

flask 자체가 하나의 파이썬 파일로 구성되어 있기 때문에 별다르게 할 건 없다.


"heroku dino 생성 --> 프로젝트 연결 --> git을 통해 deploy"


조금 고려할 사항이 있다면 Procfile을 구성하는 것인데 제대로 서비스를 해도 되지 않기 때문에 일단 다음과 같이 작성했다.


web: python flask_server.py

그냥 개발서버 작동시키는 명령어를 쓴거라 작동은 하지만 제대로 된 서비스를 하는 사람에게 권장할 수 있는 방식은 아닌 듯 하다.


그 후에 조금 찾다보니 heroku와 연동하는 라이브러리가 있어 아래에 남겨 놓는다.



참고사이트

- https://github.com/zachwill/flask_heroku

https://github.com/kennethreitz/flask-heroku

개발하는 프로젝트에 스케쥴링 관련 사항이 있다면 반드시 써야 하는 기능이 바로 datetime 모듈이다.

datetime 모듈은 기본 내장 모듈로 대부분의 날짜 관련 기능을 지원하는 강력한 모듈이다


Heroku에 flask서버를 올리게 됐는데, 입력 받은 시점을 기록해야 하는 기능이 필요해서 위 모듈을 쓰게 됐다.

그런데 Heroku region을 미국으로 설정했더니 현재 시점의 시간의 미국기준으로 출력되는 현상이 발생했다.(참고로 우리나라 시간보다 9시간 전)


이런저런 해결책을 찾아봤는데 그냥 단순하게 서버 시간에서 9시간을 추가 하는게 가장 간단한 방법이라 시간을 더하고 빼는 기능을 찾아보았다.


간단하게 이야기해서 "현재시점 구하기" --> "더하거나 뺄 시간을 만들기" --> "+ or - 하기 " 이런 순서를 따른다.


python에서는 시간 단위를 만들기 위해서 timedelta()라는 함수를 이용한다.

아래 사이트를 참고하자면 다음과 같다


class datetime.timedelta([days[seconds[microseconds[milliseconds[minutes[hours[weeks]]]]]]])


예를 들어 9시간 전이라면 아래와 같다.


import datetime


currentTime = datetime.datetime.today()

nineHours = datetime.timedelta(hours=9)


nineHoursAfter = currentTime + nineHours


참고사이트

http://egloos.zum.com/oniondev/v/9687574

처음 개발을 시작 했을 때 웹개발을 좀 해보고자 시작 했었다.

평소에 친한 개발자 친구가 항상  python을 극찬했기 때문에 별 생각없이 개발공부 시작을 python으로 했는데, 당시 웹개발에 있어서 python은 마이너한 친구라는 걸 나중에서야 알았다. 물론 린 개발론이 유행을 타던 시절이라 django가 새롭게 조명받고 있긴 했지만 메이저한 시장에서는 자바나 닷넷등을 쓰던 시절이라 python으로 웹개발을 한다고 하면 일부 사람들은 무슨 웹개발을 python으로 하냐며 웃고 지나가던 그런 경우도 있었다.


그럼에도 불구하고 python을 권장해준 친구가 무슨 말을 그리하냐며 엄청 쉽고 간단하다며 flask를 소개해줬는데, 당시만 해도 웹서버 뭐하는 놈인지 개념조차 없던 시절이라 겁나 어려운걸 소개해줘놓고 쉽다고 하니 장난하나 싶었던 기억이난다.


당시에는 python으로 웹개발하는 걸 소개하는 책도 없어서 뒤지고 뒤져서 딱 한권 나왔는데 아래 서적이었다.


파이썬 웹 프로그래밍
국내도서
저자 : 주성식,홍성민
출판 : 위키북스 2014.01.28
상세보기

 

지금와서 하는 말이지만 비개발자에게 이 책은 정말 추천할수가 없다.

이미 어느 정도  개발을 하고 있다는 것을 전제하고 쓴 책이란 느낌을 지울수가 없는게 한마디로 말해 책에 나온 예제를 따라할 수가 없다.

상황이 그러하다 보니 당시에는 좀 보다가 그냥 포기했었다.


그러다 어제 tistory 오픈 api를 써서 글을 올리는 것을 구현하는 중 redirect url을 제공해야 하는 상황이와서 웹서버를 써야 하나 싶다가 문득  flask가 생각났다.

물론 책을 다시 펼처본건 아니고 flask 홈페이지로 가서 간단한 설치 및 사용법을 보고 웹서버를 만들어봤는데 한마디로 "초간단"


당시에 추천해준 친구를 원망 했던 것을 미안하게 생각하며 간단하게 한번 살펴보면 다음과 같다.



홈페이지: http://flask.pocoo.org/docs/0.11/ 


1.설치

언제나 그렇 듯 python은 pip가 진리...그냥 아래 명령어를 bash에서 입력하면 끝난다.

$ pip install Flask

2.python 파일 하나 만들기 

이름은 whatever...그냥 만든다.

내 경우에는 flask_server.py라는 파일을 만들었다.


파일 안에 코드는 다음과 같다.

# -*- coding: utf-8 -*-
from flask import request
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():


return "hello"




if __name__ == "__main__":

app.run()


3. flask 서버 시작

아래 명령어를 넣어주면 서버가 시작된다.

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/

4. 확인

웹서버는 지금 http://localhost:5000에서 돌아가고 있다.

해당 주소를 치면 "hello"가 출력되는 것을 볼 수 있다.



이렇게 간단하다.

물론 추가적인 모듈이나 라이브러리를 일일히 추가해줘야 한다는 점에서 기능이 복잡한 앱을 개발한다면 django에 비해 불편한점이 있지만 간단한 request, response만 하는 간단한 웹서버라면 강추 한다. 


참고

- http://flask-docs-kr.readthedocs.io/ko/latest/

+ Recent posts