분류 전체보기 802

2023년 52주차 '다양한 도전으로 가능성을 탐구한 해'

2023년 키워드 - 또봇 - 발표 - 네이버 웹툰 - 텔레파시 - 수익형 웹사이트 - 템플스테이 - 해커톤 - 월간 메이커스 - 독서모임 - 제주도 상반기 또봇 개발 또봇 발표 내가 직접 서비스를 만들고 운영한다는 것이 얼마나 값지고 두근거리는 일인지 알게 되었다. 또봇과 커뮤니티를 통해 내가 어떻게 성장했는지를 주제로 백엔드 반상회에 발표를 했다. 또봇과 발표 덕분에 개발자 커리어에 의미 있는 경험을 할 수 있었고 스스로에 대한 자신감도 높아졌다. 또봇 제작 글 카테고리 수집하려다 슬랙 봇까지 개발해버린 건에 대하여… *이 글은 글또 8기에서 사용하는 슬랙 봇 [또봇]의 개발 이야기입니다. *글또는 ‘글 쓰는 또라이가 세상을 바꾼다’라는 뜻으로 슬랙을 활용에 2주에 한 번 글을 올리는 개발자 글쓰기 ..

Supabase로 SvelteKit에 GitHub 로그인을 구현해보자

SvelteKit에서 GitHub로그인을 어떻게 구현할 수 있을까요? 이번 글에서는 SvelteKit에서 Supabase를 이용해 간단히 Github로그인을 구현해 보도록 하겠습니다. *SvelteKit: Svelte를 기반으로 한 풀스택 웹 프레임워크 Supabase 란? Supabase 는 Firebase의 대안으로 떠오르는 오픈소스 백엔드 서비스입니다. Supabase의 주요 기능으로는 PostgreSQL 기반의 데이터베이스, 소셜 인증 기능, 실시간 구독과 파일을 저장할 수 있는 스토리지 등이 있습니다. 저는 Supabase 의 소셜 인증 기능을 사용해 Github 로그인으로 구현해 보겠습니다. Supabase 프로젝트 생성 먼저 Supabase 홈페이지에 접속하여 프로젝트를 생성해 줍니다. 프로..

003. Supabase로 이미지 저장

학습 목표 Supabase Storage 를 이용해 이미지를 저장할 수 있는가? 저장한 데이터들을 다시 불러올 수 있는가? 측정요소 Supabase Storage 에 이미지를 저장하면 성공이다. ✅ 저장 후 공개 URL 을 받아와 DB에 저장하면 성공이다. ✅ 레퍼런스 Storage Quickstart supabase storage 사진 올리기 만들기 feat: 이미지 storage 저장로직 구현 배우고 느낀 것 이미지를 저장하고 URL을 생성하는 것을 처음 구현해보았는데 생각한대로 동작하니 재밌었다. bind:value와 bind:this라는 svelte 바인딩 명령에 대해서 알게되었다. HTML의 요소는 사용자가 파일을 선택할 수 있게 하는 DOM 요소이기 때문에 Svelte에서 bind:this를 ..

002. Supabase로 데이터 저장 및 페이지 이동

학습 목표 데이터를 Supabase로 저장할 수 있을까? 자장 후 다시 메인 페이지로 돌아갈 수 있을까? 측정요소 폼 데이터가 Supabase에 저장되면 성공이다. 저장 후 메인 페이지로 이동하면 성공이다. 레퍼런스 https://supabase.com/docs/reference/javascript/insert https://kit.svelte.dev/docs/modules#$app-navigation-goto 만들기 https://github.com/Daco2020/monthly-makers/commit/4b7791fc57b7011e128782b50e29270c3107a2d5 배우고 느낀 것 데이터 전송이 너무 빠르다.. 일부러 로딩 시간을 주면 프로젝트 등록하는 느낌을 유저에게 줄 수 있을 듯 등록 ..

001. Supabase 연동 및 Github 로그인

학습 목표 - 월간 메이커스를 수파베이스와 연동할 수 있을까 - 깃헙 로그인을 구현할 수 있을까? 측정요소 - 스벨트킷에 수파베이스를 연동하여 데이터를 주고받는데 까지 동작하면 성공이다. - 깃헙 로그인, 로그아웃을 할 수 있다면 성공이다. 레퍼런스 - https://supabase.com/docs/guides/getting-started/quickstarts/sveltekit - https://youtu.be/1tsUB58KX2s 만들기 - https://github.com/Daco2020/monthly-makers/commit/a193f48e51dd24bf3912f49133a799daba82bbcb 학습한 것 - supabase 연동과 로그인 자체는 어렵지 않았다. (카카오 로그인도 있더라) - 깃헙..

네이버 클라우드 플랫폼(NCP)으로 Python 서버 배포하기

이 글은 FastAPI 로 구현된 Python 서버를 네이버 클라우드 플랫폼(이하 NCP)으로 마이그레이션 한 후기입니다. 들어가기 전에 저는 현재 글또 9기 운영진으로 지난 8 기서부터 또봇이라고 하는 슬랙 앱(봇)을 만들어 운영하고 있습니다. 처음 또봇을 클라우드 환경에서 배포할 때에는 `클라우드 타입`이라는 호스팅 서비스를 이용했는데요. 클라우드 타입은 클릭 몇 번으로 아주 간편하게 서버 배포를 해주는 호스팅 서비스입니다. 게다가 무료죠(였죠) 약 1년 동안 잘 사용하던 클라우드 타입이 이번 12월 부터 유료화를 도입했고, 기존 무료 호스팅은 하루 1번 강제 종료라는,, 아주 크리티컬 한 제약이 추가되었습니다. ㅠㅠ 저는 서버가 강제종료되기 전에 서둘러 다른 클라우드 서비스를 찾기 시작했습니다. 그..

Python threading.local 와 ContextVar 비교

threading.local 와 ContextVar 는 둘 다 데이터를 격리하고 동적으로 할당한다는 점에서 유사한 목적을 가지고 있지만 사용되는 상황과 특징이 조금 다르다. 이 글에서는 둘의 공통점과 차이점을 예제 코드와 함께 비교해보고자 한다. threading.local threading.local 은 각 스레드마다 고유한 데이터를 가질 수 있게 해준다. 아래 예제 코드를 살펴보자. import threading # threading.local 객체 생성 thread_local_data = threading.local() def 스레드_울음소리(): thread_local_data.value = "끼룩끼룩!" def 스레드_동물호출(): value = getattr(thread_local_data, ..

Python JSON 직렬화 TypeError 핸들링하기

json 변환 시 타입에러 발생 아래와 같이 Decimal 타입을 json 으로 변환하는 코드가 있다고 해보자. import json from decimal import Decimal data = {"value": Decimal("123.456")} json_str = json.dumps(data) print(json_str) 이를 실행하면 다음의 에러가 발생한다. raise TypeError(f'Object of type {o.__class__.__name__} ' TypeError: Object of type Decimal is not JSON serializable 왜냐하면 json 라이브러리는 기본적으로 다음 타입들만 직렬화를 지원하기 때문이다. dict list, tuple str int, fl..

Django 에서 middleware 추가하기

Django 에서 middleware 추가하기 장고에서 미들웨어를 추가하는 방법에는 함수형과 클래스형이 있는데 이 글에서는 클래스형에 대해서 설명하겠다. 먼저 미들웨어 클래스를 정의하고 __init__ 메서드와 __call__ 메서드를 다음과 같이 추가하자. from django.http import HttpRequest, HttpResponse class CustomMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request: HttpRequest) -> HttpResponse: some_function() # 요청에 영향을 줄 수 있는 로직 response = self.g..