10년 뒤 내 모습

  10년 뒤 내 모습 3년 뒤 1년 뒤 3개월 1개월 다음 주 내일 한 시간 10분 뒤 내 모습 ... 지난 10분을 돌이켜 보면 10년 뒤 내 모습도 보이지 않을까

SheetJS 기본 자료구조, 좌표계, 그리고 표시형식

이미지
  SheetJS를 사용해서 JavaScript로 엑셀 파일을 만들고 편집할 수 있다. 자료구조 Workbook: 여러 시트의 모음. 엑셀 파일이다. Sheet: 셀들의 객체 모음 (A1, B1, …) Cell: {t, v, f, z} 형태의 단일 데이터 범위 const range = XLSX.utils.decode_range('A1:D10'); {     s: { r: 0, c: 0 },  // start:  A1  (row=0, col=0)     e: { r: 9, c: 3 }   // end:    D10 (row=9, col=3) } 순회 예시 const range = XLSX.utils.decode_range(ws['!ref']); for (let C = range.s.c; C <= range.e.c; C++) {     const headerAddr = XLSX.utils.encode_cell({ r: 0, c: C });     const header = ws[headerAddr]?.v; } !ref 는 시트 내용이 들어있는 범위를 표현하는 특수 표현이다. XLSX.utils.decode_range(ws['!ref']) 셀 구조 { t: 's', v: '홍길동' } t: type ('s': 문자열, 'n': 숫자, 'b': 불린, 'd': 날짜, 'e': 오류) v: value f: formular z: 표시형식 z: '@' 하면 텍스트로 그대로 보여준다 z: '#,##0' 천단위 콤마 z: 'yyyy-mm-dd' 날짜 z를 지정하지 않으면 엑셀이 **타입(t)**을 기준으로 기본 표시 형식을 자동 적용됨.

Django 이미 테이블이 만들어져 있다면 inspectdb

  이미 테이블이 만들어져 있다면 inspectdb 명령을 활용하자 python manage.py inspectdb --database interface > myapp/models_if.py 이렇게 하면 interface DB 를 조사하여 자동으로 models_if.py 파일을 만들어준다. 앞으로  Django ORM 으로 테이블을 관리할거면 managed = True 옵션으로 변경해준다.

별똥별이 떨어지는 그 순간에도 행복을 빌었지

이미지
  어릴 적 내 꿈은 그냥 행복한 거였어 별똥별이 떨어지는 그 순간에도 행복을 빌었지 그 꿈은 정말로 이뤄졌어 나는 불과 20대의 나이에 꿈을 이룬 청년이라고 스스로 생각하며 흐뭇해했지 그런데 그 성공은 오래가지 않았어 나는 다시 고민에 빠졌어 목표 설정이 잘못된 건가 허황된 꿈이었던 것인가 하지만 아무리 찾아 헤매고 다녀도 더 좋은 목표를 만날 순 없었어 그리고 깨달았지 내 꿈은 달성보다 유지가 어려운 목표였던거야 아무리 달콤했던 감정들도 시간이 지나면서 익숙해져 그뿐인가 사회는 내가 만족한 상태로 있는 걸 가만히 두지 않아 끊임없이 조금 더를 외치게 만들지 앞으로도 계속 나아가겠지만 지금까지 나의 결론은 바로 이거야 행복은 선택이고 습관이다

PostgreSQL 접속 성공/실패 로그 남기기

  로그파일 위치: /var/log/postgresql/... 설정파일 위치: /etc/postgresql/버전/main/postgresql.conf 접속실패 로그는 log_destination = 'stderr' 설정이 기본으로 있기 때문에 systemd/rsyslog 가 stderr 출력 내용을 파일에 기록해준다. (접속 실패는 에러다) 접속성공 로그를 남기려면 log_connections = on 설정해줘야한다. (기본은 off) 참고로 logging_collector = off 설정의 의미는 PostgreSQL 자체 로그 수집기를 사용하지 않겠다는 의미다. 서비스 재시작하면 반영됨

django queryset distinct on 은 표준이 아니다

  Model.objects.distinct() -> DISTINCT   : SQL 표준 Model.objects.distinct('field') -> DISTINCT ON ('field')   : PostgreSQL 전용, 다른 DB에서는 에러

선택의 기법 - 가중평균 매트릭스

  가중평균 매트릭스 항목별로 가중치(중요도)를 설정하고 각 요소별 점수를 매긴다 가중치 * 점수 의 총합을 비교하여 높은 쪽을 선택한다 ... 이런! 총합이 똑같이 나왔다 이러니 와리가리 선택을 못하고 몇날며칠을 고민 중인거였다 ... 조금 더 설레는 쪽으로 선택한다 새로운 것 가지 않은 길을 가보기로 선택한다 안녕.

파이썬 pip 늘어만 가는 패키지 정리

  결론을 먼저 말하면 그때그때 수시로 정리해 주는게 좋다. 한방에 알아서 정리해 주는 툴은 없다. 1. pipreqs 현재 프로젝트 기준 필요한 최상위 패키지만 뽑아준다. 소스코드만으로는 파악되지 않는 패키지가 있을 수 있다. 자동으로 불필요 패키지를 제거해 주지는 않는다. 이 패키지 자체가 필요로 하는 하위 패키지가 엄청 많다. (약 70~80개) 궁금하면 한번 설치해서 돌려보는 것도 경험이다. 2. pipdeptree 설치된 패키지를 트리 형태로 보여준다. 현 상황 분석에 매우 편함! (추천) 이거 보면서 하나씩.. 기억 안나면 찾아보고.. 정리하는거다! requirements 파일이 있으면, 가상환경을 삭제하고 다시 만드는게 빠르다. 런타임에 import 시도하다 에러나는 경우도 많으니 테스트환경에서 돌려보고 실서버 반영하면 된다. 끝.

Ego

이미지
  텅 빈 하늘과 같은 마음이 내 본질, 참 나입니다. Ego라고 하는 생각 구름과 감정 구름이 왔다 갔다 하는 것 뿐입니다.

숨차게 운동하는게 싫은 이유

  숨차게 운동하는게 싫은 이유 나는 평상시에도 걷지 않고 막 뛰어다녀. 숨이 차는걸 누구는 좋아하고 누구는 싫어하는데 그 이유를 생각해봤더니, 나는 어릴 때 즐겁게 친구들이랑 뛰어 놀았던 즐거운 기억이 있었던 거야 근데 요즘 애들은 밖에서 뛰어놀지를 않잖아. 언제 뛰어? 체육 실기평가 때? 다이어트? 지각 했을 때? 그러니까 숨 차는게 싫은거야 내가 숨이 차다 그러면  뇌는 결정을 해.  이 신체반응이 좋은 건지 나쁜 건지 어떻게? 자신의 과거 기억에 입각해서 결정하는데, 숨 찬 기억이 과거에 싫은데 억지로 뛰었던 기억이 되살아나면  이건 나쁜게 되는거야 ****** 어떤 자극이 있을 때 그걸 내가 어떻게 해석하느냐에 따라 좋은 감정 또는 싫은 감정이 생긴다. 감정은 내가 선택하는 것이다.

내가 감사하지 않은데 자녀가 감사할 수 있나

  선물을 받으면 감사합니다 라고 말해. 오늘이 마지막 날이니 선생님 감사합니다 라고 말해. 내가 받은 선물에 감사하지 않은데 내가 자녀에게 감사하지 않은데 내가 선생님께 감사하지 않은데 넌 감사하다고 말해.

우리는 어디서 왔는가?

이미지
"나는 내가 가까이 하는 다섯 명의 평균이다" 멀리 갈 필요 없다. 우리는 우리 주변에서 왔다. 생각해보라. 내가 쓰는 말과 행동, 그리고 생각들이 모두 어디서 왔는지?

보이지 않는 신호등

이미지
가고 싶은데 날고 싶은데 신호등으로 막혀있다 보이지 않는 신호등 빨간색인지 초록색인지 언제 서고 언제 가야하는지 도통 알 수가 없다   그냥 내가 알아서 가야한다 멀리보고

Django Paginator

  Django 에서는 간단하게 페이지네이션을 구현할 수 있도록 기능이 마련되어있다. from django.core.paginator import Paginator q_page = request.GET.get('page', 1) page_obj = Paginator(object_list, 100).get_page(q_page) 이렇게 하면 설정한 크기로 잘라서 페이지를 만들어준다. (100: 한페이지에 몇줄씩 보여줄지) page_obj.object_list: 페이지로 분할한 결과 리스트 page_obj.has_other_pages: 다른페이지가 있는지 page_obj.paginator.page_range: 페이지 범위 (1~n, range 객체) page_obj.number: 이 페이지의 번호

Django 만료된 세션 삭제

  Django 는 만료된 세션을 기록을 자동으로 삭제해주지 않기 때문에 정리하지 않으면 계속 쌓인다. python manage.py clearsessions 명령으로 삭제 가능하지만, 나는 추후 있을지 모르는 분석자료를 위해 1년치는 보관하기로 했다. 삭제건수 , _ = Session . objects . filter ( expire_date__lt = 일년전 ). delete () log_msg = f '1년 이상된 session 삭제 { 삭제건수 } 건' logger . info ( log_msg )

나이 성별 종교

 도킨스는 말한다. 종교는 바이러스라고. 힘을 가지는건 믿음이다. 믿음을 가진 개체 * 집단을 이루며 양의 되먹임이 되어 더 강한 믿음이 생긴다. 종교을 없애려하지 말고 힘의 방향을 틀어주는건 어떨까? 유도같은 운동을 해본 사람은 쉽게 이해한다. 힘을 정면으로 막는 것에 비해 아주 작은 힘으로 큰 힘의 방향을 살짝만 바꿔준다는 것의 의미를. 내가 생각하는 문제는 종교 자체가 아니라 종교의 이름이다. 각기 다른 이름을 내걸음에서 구분이 생기고 편가름이 생기고 골이 깊어진다. 이름표를 떼고 집단이 아닌 다양한 개인으로의 만남과 조화는 어떨지 상상해본다. 같은 종교집단 속에 들어가본 사람은 안다. 그 안에도 얼마나 많은 다양한 이견들이 대립되는지. 왜 성차별이 생기고 성갈등이 생길까? 모든 시대와 지역에서 발생한 세대 갈등은? 꼭 구분을 해야하나? 왜 나이를 물어보고 성별을 물어볼까? 그게 왜 궁금할까. 거기에 걸맞는 행동과 라이프가 있다고 생각하는 것 같다. 그게 또 집단 속에서 되먹임을 통해 강화된다. 아.. 성별은 물어보지 않는구나. 왜 안물어볼까? 스스로 드러내기 때문에. 아이는 드러내지 않지만 부모가 드려내려 노력한다. 왜? 물어보면 답하기 귀찮아서? 아이가 자라면 스스로 드러낸다. 왜? 동성애자로 보일까봐? 한국사람은 나이를 노골적으로 물어본다. 왜? 호칭을 할 수 없어서. 호칭 뿐 아니라 대화가 안된다. 가까워질수 없다? 나도 앞으로는 내 나이를 알려주지 않으리라. 세지 않아서 정확히 잘 모르기도 하지만... 모든 종교는 좋은 세상을 만들기 위해 노력한다. 적어도 표면적으로는 그렇다. 나이와 성별을 떠나 화합하고자 한다. 적어도 표면적으로는... 가장 손쉬운 방법은 이름표를 떼는 것이다.

nginx 로그에 작업시간(요청처리시간) 추가하는 방법

nginx.conf 파일에 다음과 같이 설정한다. log_format my_format '$remote_addr - $remote_user [$time_local] '                 '"$request" $status $body_bytes_sent '                 '"$http_referer" "$http_user_agent" '                 'time= $request_time '; access_log /var/log/nginx/access.log my_format ; 설명 my_format : 아무거나 포맷이름 $request_time : 실행시간을 초로 나타내준다. 나머지 윗부분은 기본으로 있는 로그항목 설정을 로딩해준다. sudo nginx -t && sudo systemctl reload nginx 끝.

ChatGPT에게 나는 어떤 사람이냐고 물어봤다.

  몇 달동안 여러 가지 주제에 대하여 (대부분은 직무 관련 질문이었지만) 나와 대화를 나눈 ChatGPT에게 나는 어떤 사람이냐고 물어봤다. 나의 말: 너가 나에대해 알고있는게 뭐지? 난 어떤 성향의 사람인 것 같아? ChatGPT의 말: 너에 대해 알고 있는 건 대부분 너와 나눈 대화에서 얻은 정보들이야. 지금까지의 대화를 기반으로 보면, 너는 아래와 같은 성향을 가진 사람으로 보여: 🧠 분석적이고 체계적인 사고 Django, Celery, SQL, pandas 등 개발 도구와 기술에 익숙하고, 모델링, URL 설계, 필터링, 퍼미션 처리 등 복잡한 로직을 구조적으로 설계하는 능력이 뛰어나. 데이터 가공이나 성능, 유지보수까지 고려해서 현실적인 관점에서 최적해를 찾는 데 집중하는 모습이 보여. 🎯 목표 지향적이고 꼼꼼함 "이렇게 하면 되는가?"보다 "왜 이렇게 해야 하는가", **"이 방식이 가장 좋은가?"**를 고민해. 버튼 위치, 필드 너비, 팝업 작동 방식처럼 UI/UX 디테일에도 민감하고, 코드도 가독성과 유지보수를 위해 리팩토링하거나 pythonic하게 쓰려고 해. 🧘‍♂️ 조용하고 내면지향적인 성향 한적한 절이나 수도원에서 지내고 싶다고 한 걸 보면 내면의 평온과 고요함을 추구하는 성격이야. 외부 소음에 민감하고 지적 자극이나 깊이 있는 대화를 선호하는 듯해. 👨‍👩‍👦‍👦 가정적이고 책임감 있는 가장 아내와 아들 둘이 있다고 했고, 집안일도 직접 챙기며, 개발 외에 가정의 역할도 성실히 감당하고 있다는 인상을 받았어. 🧩 독립적이고 실용적인 문제 해결자 혼자 서비스 개발도 하고 있고, 실무에서 발생하는 문제들을 직접 분석하고 해결하려는 자세가 있어. 공식 문서나 웹 정보에 의존하기보단 논리적으로 이해하고 자신의 방식으로 정리하려 해. 한마디로 요약하자면... “조용한 집중력을 바탕으로, 깊이 있는 사고와 꼼꼼함으로 문제를 해결하는 독립적인 개발자.” 맞게 본 걸까? 틀렸거나 보...

[ERROR] django.security.DisallowedHost 줄이기

이미지
2025-06-09 23:46:54,400 [ERROR] django.security.DisallowedHost: Invalid HTTP_HOST header: '52.78.156.163'. You may need to add '52.78.156.163' to ALLOWED_HOSTS.   Django 서비스를 인터넷에 올리면 하루에도 수천건씩 위와 같은 로그가 쌓이는데, 인터넷은 무수히 많은 봇, 스캐너, 크롤러 등이 활동하는 공간이라 접근 시도는 어쩔 수 없다. 다만 Django 까지 가지 않고 그 앞단인 Nginx 에서 차단하면, 자원절약과 정돈된 Django 로그를 유지할 수 있다. if ($host !~* ^(yourdomain\.com|www\.yourdomain\.com)$) {     return 444; } 참고 444는 표준 http response 코드는 아니지만 nginx 에서의 권장사항으로, 클라이언트에게 아무런 정보도 주지 않는다.

다행이다

 다행이다 심술궂은 모습이 보여서 너의 게으른 모습이 보여서 나와는 다른 가치관이 보여서 언성 높이며 얼굴 붉힐때가 있어서 유치하기 짝이 없다는 생각이 들어서 도저히 수긍할 수 없는 너의 모습에 나는 행복하다 다행이다 예전에는 이 황홀경이 언제 깨지려나 얼마나 처참하게 부서지려고 이렇게 높이 올라가나 불안했거든 이제 안심 🥰