모도리는 공부중

2024.01. 개발 궁금증 링크 일기 본문

내 지식 정리/날것 그 자체

2024.01. 개발 궁금증 링크 일기

공부하는 모도리 2024. 1. 9. 11:46
728x90
반응형

 

 

 

 

FastAPI (with Python)

날짜와 시간

python - 날짜와 시간 다루기, datetime 모듈 해부! 그리고 third-party (velog.io)

 

logger - loguru

API Reference — loguru documentation

이해가 잘 안 가 있는 상태에서 우선 적용을 위해 복붙해놓고 분석하다보니, 분석이 어려운 부분이 있었다.

리뉴얼되고 있는 부분에서 로그 기록 부분이 깔끔해졌길래 궁금해서 나도 적용하고 싶은 마음에 하나씩 뜯어보니 뭔가 이해가 되더라.

이 김에 공식 문서 보면서 좀 더 개선해봐야겠다.

 

Dictionary

__dict__

Python __dict__ 용도 및 활용 (tistory.com)

뭔가 알 것 같은데 더 자세히 알고 싶어서 다른 글을 읽다가...

쉬운 줄로만 알았던 파이썬이 너무 어렵게 다가오기 시작해서 혼란스럽다.

진짜 어렵다....

python - Explain __dict__ attribute - Stack Overflow

상세한데, 진짜 어렵다. 와........ 살려줘.

'from collections import defaultdict' & '람다 표현식(lambda)'

파이썬 사전의 기본값 처리 (collections.defaultdict) | Engineering Blog by Dale Seo

3.5 람다(lambda) - 왕초보를 위한 Python: 쉽게 풀어 쓴 기초 문법과 실습 (wikidocs.net)

파이썬 코딩 도장: 32.1 람다 표현식으로 함수 만들기 (dojang.io)

사전 검색, 활용하기

[python] 사전형의 리스트(list내의 dict)에서 키, 값 검색하기;get 메소드, filter 함수, 내포 표기 (tistory.com)

 

터미널 찍기는 print() 대신 ic()로?

[python] python 디버깅할 때 print가 아닌, Icecream을 사용하면 편리 (tistory.com)

변수명이랑 같이 보고 싶을 때 좋을듯. 공부할 때도 도움 많이 될 것 같고!

Jinja2 문법 ← Django Template(장고 템플릿) 문법 <Django HTML>

Django_장고 부수기 (4)_템플릿 문법 Kassid_Devlog (tistory.com)

[Django] 장고 템플릿(Template) 문법 (tistory.com)

플라스크 강좌-5강(Jinja2 템플릿) : 네이버 블로그 (naver.com)

템플릿 상속 기능을 이용하고 있는데 이게 정확히 뭔지 알고 싶고, 나 또한 제대로 알고 활용하고 싶어서 검색해봤다.

팀장님께 여쭤보니 장고 템플릿 문법이라기보단, jinja2 문법이란다...!

상속하는 부모 템플릿(예를 들어 base.html)에서 자식 html이 내용을 넣을 자리에 {% block %} {% endblock %}을 해주면 되나보다. 기왕이면 같은 이름으로.

베이스가 될 부모 html은 아래와 같이 작성한다.

<head>
	<title>{% block title %}{% endblock %}</title>
</head>
<body>
	<!-- 베이스로 깔아줄 부모 내용들 ... -->
    {% block content %}
    {% endblock %}
</body>
<!-- script 넣을 자리 -->
{% block scripts %}{% endblock %}

부모 템플릿의 블럭 이름을 자식에서 그대로 사용할 수 있다.

자식 html은 이제 해당 자리에 넣을 코드를 작성하면 된다.

<head>
	<title>{% block title %}메인 페이지{% endblock %}</title>
</head>
<body>
    {% block content %}
    <!-- 들어갈 내용들 -->
    <div>
    	<!-- 들어갈 내용들 -->
    </div>
    <!-- 넣을 html ..... -->
    {% endblock %}
</body>
{% block scripts %}
<script src=""></script>
<script>
	<!-- 들어갈 내용들 -->
</script>
{% endblock %}

조금 더 깔끔하게 정리하면,

<!-- 부모 -->
{% block 블록이름 %}
소스코드
...
{% endblock %}

<!-- 자식 -->
{% extends 부모html %}
{% block 부모 템플릿의 블록이름 %}
변경하고자 하는 소스코드
...
{% endblock %}

세번째 링크 분께 받은 도움이.. 아주 명쾌하다.

SQLAlchemy

Docs

SQLAlchemy 1.x 와 2.0의 Query 스타일 비교 (tistory.com)

당장 공식 문서를 보면 2.0 스타일만 나오는데, 헷갈림이 커졌다. 아직은 1.0이 익숙해서 1.0으로 계속 쓰고 있는 것 같은 상황에 나 혼자 2.0 써버리면 나도 헷갈리고 동료도 헷갈릴텐데 말이지. 1.0 문서 봐야겠다..

Object Relational Tutorial (1.x API) — SQLAlchemy 1.4 Documentation

진정으로 필요한 레거시 찾았다!!!! 앞으로 이거 보자.

[SQLAlchemy/Python] python바탕의 Query로 데이터 베이스 조작 (CRUD) (tistory.com)

이것도 거의 공식문서급인데? 좋다.

타입 - from sqlalchemy import ~, from sqlalchemy.dialects.mysql import ~

상당히 궁금해졌다. sqlalchemy 공식 문서를 보고 있다보면 여기에도 INTEGER가 있는데,

프로젝트를 분석하면서 보니 String은 그냥 sqlalchemy에서 직접 가져다쓰고 있는데 Integer의 경우는 sqlalchemy.dialects.mysql를 언급해서 사용하고 있었다. 이거 분명 무언가 특성이 있다.

일단 sqlalchemy.dialects부터 뜯어봤다.

특정 sql들이 언급된 것을 확인할 수 있다.

from sqlalchemy.dialects.mysql import INTEGER를 눌러보면,

from sqlalchemy import INTEGER를 찾아보면,

add(), add_all()

SQLAlchemy _ add() 와 add_all() 사용법과 차이점 (tistory.com)

유효성 검사로 미리 걸러줄 수 있다면, add_all() 추천.
그렇지 않고 코드 단에서 거르길 원한다면 add() 추천.

first(), scalar(), one(), one_or_none()

[SQLAlchemy] - first(), scalar(), one() (tistory.com)

대체 왜 하나만 가져오는 게 이리 많은 거야???? 라는 내 생각을 똑같이 한 사람이 찾아놓은 글.

위에 '공식문서급인데?'라고 언급한 곳에서 one_or_none()에 대한 설명도 찾을 수 있었는데, 뭣도 모르고 좋아했던 내가 머쓱해졌다. 꼭 좋은 친구라고 볼 수는 없는 친구..

scalar()를 잘 활용해야겠다는 생각이 든다.

case

Column Elements and Expressions — SQLAlchemy 2.0 Documentation

 

 

where절을 피곤하게 하지 말자. 인덱스 태워야지. 그럼 어떤 게 효율적일까. 이것도 공부 필요.

 

Mariadb(MySQL)

Group by와 Partition by

[MySQL] GROUP BY, PARTITION BY 차이점 (tistory.com)

Group by에 안 쓰고 싶은데 Select절에 나열한 것 중 집계함수에 해당되지 않는 것들을 모두 나열해줘야 해서 결과 값이 이게 아닐텐데.. 하는 걱정이 많이 들었었다. 정말 Group by와 Distinct 말고 답이 없나? 생각하며 찾다보니 Partition by라는 것이 있다는 것을 이리 접한다.

GROUP BY vs. PARTITION BY: 유사점과 차이점 (tistory.com)

INSERT - 단일 레코드, 다중 레코드, 메타데이터 bulk

[MS-SQL] 다중 레코드 INSERT 하기 (ullim.net)

C# MS SQL Bulk insert - 속도비교, 방법, Bulk insert into MS SQL (tistory.com)

 

 

ChatGPT

archive 기능이 있길래 버튼을 눌러봤더니 채팅 목록에서 사라졌다. 어디에 저장된건지 찾으려고 검색.

ChatGPT에 저장(아카이브) 기능이 생겼습니다. - TILNOTE

내 프로필을 클릭하고 settings & beta를 선택하면 거기에서 저장된 내 채팅을 찾을 수 있고, unarchive로 되돌릴 수도 있다.

 

 

Docker

명령어 정리

도커 명령어 정리 — Bonglog - 기록과 정리의 공간 (tistory.com)

Docker 옵션과 명령어 (tistory.com)

[도커/쿠버네티스] 도커 이미지 생성, 추출, 배포 (tistory.com)

 

Volume vs. Bind Mount

[Docker] Volume과 Bind mount에 대하여 (tistory.com)

 

Network

도커 네트워크(Docker Network)의 구조와 기능 — Bonglog - 기록과 정리의 공간 (tistory.com)

06. 도커 네트워크 (Docker Network) (tistory.com)

 

Docker Swarm

[도커] 스웜 모드(Swarm mode) - 서비스 롤링 업데이트 (tistory.com)

 

Logging

도커 컨테이너 로그 설정하기 — Better than yesterday (tistory.com)

데몬 설정법, 컴포즈 설정법, 명령어 설정법 3가지가 들어있음

[Docker] 도커 로그 남기는 방법에 대해 알아보자 (tistory.com)

앱 내 로그 디렉토리를 볼륨으로 마운트하는 방법도 제시되어 있음

Docker container log 관리 - CURVC DevOps - Confluence

Linux 기반 시스템에서 제공하는 표준 도구인 'logrotate'를 사용해서 설정할 수도 있음

도커 컨테이너 로그 관리 (tistory.com)

& GPT 답변

네, 매일 새로운 로그 파일을 생성하도록 관리하고 싶다면 리눅스 기반의 logrotate 도구를 사용하는 것이 좋습니다. logrotate는 리눅스 시스템에서 널리 사용되는 로그 파일 관리 도구로, 로그 파일의 자동 로테이션, 압축, 삭제, 백업 등을 처리할 수 있습니다. 이 도구는 다음과 같은 특징을 갖고 있습니다:

  1. 자동 로테이션: logrotate는 정해진 크기에 도달하거나 특정 시간이 경과했을 때 로그 파일을 자동으로 로테이션할 수 있습니다.
  2. 구성의 유연성: 로그 파일에 대한 다양한 로테이션 규칙을 설정할 수 있습니다. 예를 들어, 로그 파일을 매일 자정에 로테이션하고, 일정 기간 동안 이전 로그 파일을 보관하며, 이후에는 자동으로 삭제할 수 있습니다.
  3. 압축 옵션: 로그 파일이 로테이션된 후, 공간 절약을 위해 자동으로 압축할 수 있습니다.
  4. 스크립트 실행: 로그 로테이션 전후에 특정 스크립트를 실행할 수 있습니다. 이는 로그 파일을 처리하거나 백업하는 데 유용합니다.
  5. 다양한 로그 파일 관리: logrotate는 하나의 시스템에서 여러 로그 파일을 관리할 수 있으며, 각 로그 파일에 대해 다른 정책을 적용할 수 있습니다.

logrotate를 사용하려면, 로그 로테이션에 대한 규칙을 포함하는 구성 파일을 작성해야 합니다. 이 구성 파일에서는 로그 파일의 위치, 로테이션 주기, 보관할 로그 파일의 수, 압축 여부 등을 지정할 수 있습니다.

예를 들어, 매일 자정에 로그 파일을 로테이션하고, 7일간 보관한 후 삭제하며, 로테이션된 로그 파일을 압축하려면 다음과 같은 구성을 사용할 수 있습니다:

/path/to/your/logfile.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 640 root adm
}

이 구성은 /path/to/your/logfile.log 로그 파일에 적용되며, 매일 로테이션을 수행하고, 7개의 이전 로그 파일을 보관한 후 자동으로 삭제합니다. 또한, 로그 파일이 없는 경우에도 오류가 발생하지 않고(missingok), 빈 로그 파일은 로테이션하지 않습니다(notifempty). 새로운 로그 파일은 특정 권한으로 생성됩니다(create).

이러한 방식으로 logrotate를 설정하면, 로그 파일 관리를 자동화하고 시스템의 디스크 공간을 효율적으로 활용할 수 있습니다.

Ubuntu 쌩 이미지에 python3 설치하기

[Python] Ubuntu 18.04 파이썬 3.10 버전 설치 및 기본 설정하기 (tistory.com)

 

 

NginX

Log

NGINX 로그 기본 설정 및 logrotate 설정 방법 - 익스트림 매뉴얼 (extrememanual.net)

로그 레벨 설정 및 로그 읽는 법도 기재됨 ↓

Linux : Nginx 에러, 액세스 로그 구성 방법, 예제, 명령어 (tistory.com)

 

 

Jquery & Ajax

[Ajax] Ajax로 GET 요청 보내기 (velog.io)

[Ajax] 자주 쓰는 Ajax 문법 (beam307.github.io)

 

DataTable

Jquery DataTable ajax dat.. : 네이버블로그 (naver.com) Jquery DataTable ajax dat.. : 네이버블로그 (naver.com)

 

728x90
반응형
Comments