Train

    싸피 12기 준비 + 전공자 합격 후기

    저는 사실 글을 티스토리나 다른 블로그에 잘 안쓰고 노션에 공부한 내용을 적는 편입니다. 그래도 싸피 같은 경우는 다른 분들도 보셨으면 해서 이전에 썼던 블로그에 올려봅니다. 1. 싸피를 신청하게 된 이유2024년 8월 졸업 예정이었던 나는 상반기 공채 서류를 미친듯이 쓰고 냈지만 취업을 하진 못했다. 현재 개발 시장이 안좋기도 하고, 나에 대해서 자소서를 잘 작성하지 못한 것도 있는 것 같다. (어학도...) 그래서 공백기 없애기 + 공부 환경을 이유로 보험용 부트캠프들을 지원했었고 그 중 카카오 테크 부트캠프, 싸피 두개를 신청했었다. 그 중 싸피가 일찍 발표났고, 돈도 많이 줘서 카카오 테크 부트캠프는 면접을 취소하고 싸피를 선택했다. 싸피는 서울을 1지망으로 신청했는데, 부산 사는 나의 입장에선 ..

    SQL vs NoSQL

    서버의 DB를 결정할 때 SQL과 NoSQL중 무엇을 선택할 지 고민하게 된다. 다들 프로젝트 초기에 SQL인 MySQL, PostgreSQL과 NoSQL인 MongoDB사이에서 고민한다. 1. SQL(관계형 데이터베이스) SQL은 다음과 같은 특징을 지닌다. 정해진 데이터 구조(스키마)를 따라서만 저장할 수 있다. 해당 스키마를 준수하지 않은 Row는 추가할 수 없다. 데이터는 관계를 통해 여러 테이블에 분산된다. SQL에서는 데이터의 중복을 피하기 위해 관계를 이용한다. 그렇기에 관계는 매우 중요한 개념이 된다. 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점이 있다. 계층적 구조나 데이터를 원하는 모양으로 출력해야할 때 사용..

    Django 개발용, 배포용 설정 분리하기

    현재 프로젝트가 곧 배포를 준비해야하는 단계에 진입할 것 같아 개발용, 배포용 환경설정의 분리가 필요할 것이라 판단되어 분리를 한 뒤 문서를 작성해봅니다. 0. 왜 사용하나? 사실 우리 프로젝트의 규모에서는 안 써도 딱히 불편함을 없다. 왜냐하면 개발용과 배포용 2가지밖에 없기 때문이다. 즉, settings.py에서 단순하게 DEBUG = True, False를 이용해 간단하게 if문으로 개발, 배포 환경을 분리하는 것이 가능하다. 하지만 그러면 settings.py가 너무 길어질 수 있고(이전 프로젝트가 그랬다.) 많은 if, else에 의해 가독성이 떨어지는 settings.py는 유지보수가 힘들어진다. 1. 어떤 방식으로 분리할 것인가? 기본적인 구조는 아래와 같다. PnuNoti/ ├──sett..

    dj-rest-auth로 소셜로그인하기

    요즘은 대부분 소셜로그인을 통해 회원가입, 로그인과정을 진행한다. 실제로 프로젝트 체험단의 설문조사에서도 대부분 카카오, 구글, 네이버 이 셋 중 적어도 하나를 통해 소셜 로그인을 하는 모습을 보였다. 그렇기에 사용자 접근성을 높이기 위한 소셜로그인을 구현해보고자 한다. 프로젝트에서 회원가입 기능을 Dj-Rest-Auth로 해결하였기에 소셜로그인도 같이 Dj-Rest-Auth를 사용했다. Django-Rest-Framework(DRF)로 소셜 로그인 API 구현해보기(Google, KaKao, Github) 참고 사이트(1) [Django] Google 소셜 로그인 (OAuth2.0) 참고 사이트(2) 참고 사이트(1)의 방식을 채택했지만, callback과정에서 django에서 api를 호출하는데 이것..

    Django Channels(Web Socket) - 채팅방스럽게 다듬기

    이번 글에서는 로그인을 통해 사용자를 얻었으니, 1:1 채팅방에 어울리는 형식으로 채팅방을 새로 만들어 볼 예정이다. 먼저 1:1 채팅방을 생각했을 때 자기가 쓴 글은 왼쪽에, 타인이 쓴 글은 오른쪽에 배치할 수 있도록 해야한다. 이에 대해서 먼저 프론트엔드 부분을 수정해주자. 프론트엔드(html, css, js)코드는 아래 블로그를 참고했다. https://dororongju.tistory.com/151 [자바스크립트] 채팅 구현 코드 (프론트) 채팅 구현 코드(프론트) 웹소켓 통신 부분을 제외한 프론트단의 코드입니다. CSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 *{ margin: 0; padding: 0; } .chat_wrap .header { font-..

    Django Channels(Web Socket) - 회원가입 기능 추가하기

    회원가입 만들기 이번 글에는 회원가입 기능을 구현하고자 한다. 먼저 회원가입 페이지인 signup.html을 만들어 다음과 같이 코드를 입력해준다. 회원가입 페이지 {% csrf_token %} email: username: PW: PW확인: 로그인 하기 이후 account/views.py에 회원가입을 위한 코드를 추가해주자 #account/views.py from django.shortcuts import redirect, render ... from .forms import UserForm #... @csrf_protect def signup(request): if request.method == "POST": form = UserForm(request.POST) if form.is_valid(): ..

    Django Channels(Web Socket) - 채팅 유저이름 추가하기

    로그인 추가 구현 및 채팅 응용 이번에는 로그인을 구현하여 채팅방에 들어왔을 때 “유저이름님이 들어왔습니다.”와 누가 채팅했는지 구분할 수 있도록 할 예정이다. 먼저 로그인을 구현하기 위해 로그인 페이지와 User모델을 생성해야하므로 다음 명령어를 통해 account app을 하나 만든다. python manage.py startapp account 이후 socekt_project폴더 내의 setting.py와 urls.py에 다음과 같이 추가한다. # socket_project/setting.py INSTALLED_APPS = [ 'account', 'chat', 'channels', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.con..

    Django Channels(Web Socket) - 동기를 비동기로

    비동기방식으로 변경하기 왜 비동기로 바꾸는가? 사실, 기존의 동기방식은 비동기 방식에 비해, I/O가 끝날때 까지 계속 기다려야 하므로 비효율적이라는 단점이 존재한다. 하지만, 비동기로 작성하는 경우 I/O가 끝나지 않아도 즉시 결과값이 리턴된다. 따라서, I/O과 완료되면 완료된것에 따른 콜백함수가 호출되는 방식으로 진행된다. 때문에, 계속 다른일을 할 수 있어서 더 효율적이게 된다. 이제 동기 방식으로된 코드를 비동기 방식으로 바꾸어 보자. 여담으로, Django ORM은 동기방식으로 작동한다. Channels의 문서를 보면 Django ORM이 동기방식으로 작동하기 때문에 이를 비동기로 바꿔주는 함수가 존재한다. 이는 다음에 설명할 때가 있으면 작성해보는걸로... 수정은 간단하다. chat/cons..

    Django Channels(Web Socket) - Channels 사용해보기

    아마 Restful API를 구현해본 사람들이라면 클라이언트측에서 서버로 신호를 보낸 후 데이터를 받는 것은 익숙하겠지만, 서버에서 자발적으로 클라이언트에 신호를 보내지 못해 힘든 경우가 있다. (Ex: 채팅, 푸시 알람) 이때 소켓통신을 제대로 안다면 이런 걱정없이 채팅을 구현할 수 있다. 물론 FCM을 이용해 푸시 알람을 구현할 수 있고, SendBird를 통해 채팅을 구현하는 것도 가능하다. 하지만 그렇다고 알고 쓰는 것과 모르고 쓰는 것은 매우 다르기에 공부해보려 한다. 오늘도 이 분 글을 통해 공부했다. 장고에서 Channels로 웹 소켓을 연동 해보자! 챕 개요 이번 포스팅에서는 실제로 Channel 라이브러리를 이용해서 웹 소켓 요청을 처리하는 부분을 ..

    Django Channels(Web Socket) - 개발환경 설정

    DRF는 해본적이 있지만 소켓통신을 위한 web socket은 구현해본 적이 없어 공부 시작을 Django의 Channels를 통한 소켓통신을 공부하려한다. 먼저 구현에 앞서 환경부터 셋팅하자면 python 3.8.x에서 진행할것이며 아나콘다를 이용해 간단하게 원하는 파이썬 버전으로 가상환경을 구현했다. 아래 두 글을 보고 참고했습니다. https://semtax.tistory.com/61 장고에서 Channels로 웹 소켓을 연동 해보자! 챕터 1 : 세티 개요 이번 시리즈 에서는, Django에서 웹 소켓을 쓸 수 있게 해주는 라이브러리인 Channels을 이용해서 채팅서버를 만들어보는 예제를 만들어보도록 하겠습니다. Channels? Channels 공식 홈페이지에 들..