태그

2022년 11월 17일 목요일

암호 복잡도 강제 규칙의 우선순위는 어디쯤인가?

 

ITGC 진행하면서 또 암호 설정 시 복잡도 규칙을 추가하라는 가이드가 나왔다.

 - 영문, 숫자, 특수문자 조합하여 8자리 이상


무차별대입 공격의 대비인데,

현 시점에 웬만한 서비스는 로그인 누적실패에 따른 재시도 횟수제한이 있다.

만약 없다면, 이 장치의 마련이 최우선이다!


이런 장치가 미비하던 시절에는 아래와 유사한 표를 보여주며 '해커가 암호를 알아내는데 몇 초~ 몇 년 걸린다.' 하는 식으로 논리를 전개했었다.

조합별 경우의 수 (단위: 조)


물론 재시도 횟수제한이 없는 개인 엑셀파일이나, 탈취된 인증서 같은 경우, 무한한 부르트포스 공격이 가능하기 때문에 위와 같은 전략이 유효하다. 하지만 2022년 현 시점에 웹서비스 가입자에게 그리 중요한 포인트는 아니다.


다행히 2019년 개편된 KISA 가이드에는 이 복잡도 부분이 약간 완화되고, 다른 사회적 요인들에 대한 부분이 추가되었다.


종합적 사고 없이 보수적으로 들이대는 관습적인 잣대를 경계해야한다.


2022년 10월 31일 월요일

행복지수의 역설

 행복하지 못함은 나답게 살지 못하기 때문이다.

행복지수 최하위권 대한민국은

수시로 남과 비교하며 최선을 다해 남답게 산다.

하지만 역설적이게도 이것은 대한민국의 고도성장을 이끈 민족성 중 하나다.

2022년 9월 1일 목요일

Pandas - NaN is a float

 

현상

When I concate or merge, some columns are forced to change to Float64


원인

In Working with missing data, we saw that pandas primarily uses NaN to represent missing data. Because NaN is a float, this forces an array of integers with any missing values to become floating point. In some cases, this may not matter much. But if your integer column is, say, an identifier, casting to float can be problematic. Some integers cannot even be represented as floating point numbers.


해결

astype('Int64') 임의변경

2022년 8월 3일 수요일

Django Admin Log 히스토리

로깅테이블 설계 시 참고


 

테이블명: django_admin_log


object_id: 모델의 primary_key 값

object_repr: __str__() 문자열

action_flag: 1:추가, 2:수정, 3:삭제

change_message: [{"added": {}}] 또는 [{"changed": {"fields": ["필드1", "필드2"]}}]

    이런 식으로 저장되며, 화면상 "추가됨" 또는 "뭐뭐 필드가 변경됨" 이라고 나온다.

    값은 남지 않는다.

    삭제로그인 경우 아무 값도 없다.

    엑셀일괄처리한 것은 모두 "update through import_export" 라고 남는다.

content_type_id: 모델(django_content_type)의 id





2022년 8월 1일 월요일

float 대신 decimal 을 쓰자

부동소수점 자료형 float

python 에서 소수점이 포함된 숫자는 기본적으로 float 형이다.

컴퓨터 내부 이진수로 저장하기 때문에 십진수와 다르게

대부분 아래와 같이 근사값으로 저장된다.


 >>> 1.5 * 0.009

0.013499999999999998


적당히 반올림해서 쓰면 문제가 없지만,

올림 또는 내림 시 문제가 될 수 있다.


이럴땐 Decimal 을 쓰자

>>> from decimal import Decimal

>>> Decimal('1.5') * Decimal('0.009')

Decimal('0.0135')


참고, nomalize() 로 소수점 뒤 0을 없앨 수 있다.

>>> Decimal('12.34500').normalize()

Decimal('12.345')



localhost vs 127.0.0.1 vs 0.0.0.0

같지 않다. 


localhost

localhost는 컴퓨터 네트워크에서 사용하는 루프백 호스트명으로, 자신의 컴퓨터를 의미한다. IPv4에서의 IP 주소는 127.0.0.1이며, IPv6에서는::1로 변환된다. 로컬 컴퓨터를 원격 컴퓨터인것처럼 통신할 수 있어 테스트 목적으로 주로 사용된다. 위키백과



127.0.0.1

The most commonly used IP address on the loopback network



0.0.0.0

인터넷 프로토콜 버전 4에서 주소 0.0.0.0은 유효하지 않거나 알 수 없거나 적용 할 수없는 대상을 지정하는 데 사용되는 라우팅 할 수 없는 메타 주소입니다.

네트워크 도메인 전체를 가리킴


Flask 3분 맛보기

$ pip install flask
$ vi myapp.py


from flask import Flask


app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello Work'

if __name__ == '__main__':
    app.run(host='0', port=3000)



$ python3 myapp.py 


2022년 7월 31일 일요일

Lightsail browser-based SSH log in fail


 AWS Lightsail Ubuntu 20.04


apt upgrade 이후


browser-based SSH 연결을 사용할 수 없다.


Log in failed. If this instance has just started up, try again in a minute or two.

CLIENT_UNAUTHORIZED [769]





이거슨...

apt upgrade 할 때,

ssh 설정이 바뀌면서 발생한 문제다.

(아래와 같은 창이 뜨길래 첫 번째 옵션을 선택했었다)




재설정이 번거롭다면, 두 번째를 선택해서 현재 설정을 유지하도록 하자.


끝.




2022년 7월 7일 목요일

Django update_or_create 사용 시 주의 - 데이터 중복발생 가능성

 

update_or_create() 를 사용해서 편리하게 데이터가 있으면 업데이트, 없으면 생성하고있었는데...


 raise self.model.MultipleObjectsReturned(

ehr.models.AnnualLeaveDetail.MultipleObjectsReturned: get() returned more than one AnnualLeaveDetail -- it returned 2!


확인해보니,

get_or_create() 가 DB레벨의 Unique는 보장하지 않는다.


As described above in get_or_create(), this method is prone to a race-condition which can result in multiple rows being inserted simultaneously if uniqueness is not enforced at the database level.

참조:

https://docs.djangoproject.com/en/4.0/ref/models/querysets/#update-or-create



But, In my case,

구 버전의 일부 IE에서 중복으로 AJAX 를 던지는 문제로 '추측'하고있다.

2022년 5월 31일 화요일

기본소득

 기울어진 운동장을 반듯이 바로잡는 것도 중요하지만, 이를 완벽히 하기란 불가능하다.

(투명화 기술의 발전으로 좀 더 공평하게 만들 수는 있다)

현 시점에 이정도면, 이제는 결과의 분배에 좀 더 무게를 실어줘야 할 때다.

기울어진 운동장 아랫쪽 편에 10분마다 1점씩 주는거다.


똑같이 나누자는게 아니다.

누구는 운칠기삼이라고 하고 누구는 99%의 노력이라고 한다.

당신은 어떠한가?

내 부의 원천 중 운이 70%라면, 70%는 나눠야 하지 않나?


지금도 주고있다.

나이가 많아서, 나이가 적어서, 청년이라서, 일을 못해서, 아기를 낳아서, 아기를 못 낳아서...

갖은 이유를 끝없이 만들어댄다.


기승전돈錢

자본주의 하에서는 모든게 상품화된다

음식부터 교육, 사랑, 행복까지도.

학교에서도 비판과 창의는 없고, 점수를 위한 수용만 존재한다.

(요즘 부쩍 부모님께 감사한다. 점수에 목메지 않게 방목해주셔서)

점수는 대기업, 곧 돈으로 이어진다.

그러면 돈에 목메는 이유는?


월 60만원이면 근근히 생활은 하겠다

소고기는 못 먹어도 배고플 걱정은 없겠다.

두세명이 모이면 작은 월세방 살 수 있겠다.


현 재정상태로 지급 가능하며, (타 수당 통폐합 등 예산조정은 필요)

기초 생활은 가능하고, (중병걸리면 죽어야 함)

수급자가 너무 풍요로워 나태해지지 않을 정도의 (더 필요하면 돈벌어라)

딱 적당한 금액이다.



2022년 4월 23일 토요일

보상을 똑같이 나누면 누가 열심히 하려 하겠는가?


보상을 똑같이 나누면 누가 열심히 하려 하겠는가?

좋은 질문이다.

누가 열심히 하는 게 가장 좋은가?

바로 하고 싶은 사람이다.


하고 싶지 않은 사람이 열심히 하면

그 과정에 불행의 씨앗이 심어진다.

바로 그 인내의 보상을 기대하는 것이다.

그리고 나중에 그 상상했던 만큼의 보상이 이뤄지지 않으면

즉 기대가 충족되지 못하면 불행해진다.


반면 하고 싶은 사람이 열심히 한다는 것은

훗날의 보상을 기대할 수는 있지만

그렇지 않은 결과라 할지라도

현재 지금의 과정도 좋은 사람이다.


상상해보라

내 땀으로 얻은 결과를 이웃과 나누는 즐거움을



무릇 사람들은 자기보다 

열 배 부자에 대해서는 헐뜯지만,

백 배가 되면 두려워하고,

천 배가 되면 그의 일을 해주고,

만 배가 되면 그의 노예가 된다.

사마천의 사기 중...