[GDSC 프로젝트 트랙] 6. 게시글 CRUD, 댓글 CRUD API 구현
·
팀 프로젝트/[2024] GDSC 프로젝트 트랙
아이를 맡기고 맡는다는 핵심 로직의 구현이 어느 정도 완료되어 서브 커뮤니티을 구현하기 시작했다. 게시글과 각 게시글에 달리는 댓글을 관리하는 CRUD 를 구현하였다. 문서 필드는 위와같이 구성하였다. comment_count 를 따로 속성으로 빼둔 이유는, 전체 글 리스트를 조회할 때 댓글 개수는 필요하지만, 댓글 데이터 자체는 필요하지 않기 때문에 댓글 갯수를 별도 필드에 저장하도록 하였다. 그런데 지금 생각해보니 댓글 개수 정보는 하위 컬렉션에 저장해두고 매번 API 호출 시 댓글 컬릭션의 문서 갯수를 세서 반환하므로 굳이 DB 필드로 존재할 필요는 없었을 것 같다. 삭제를 고려해야겠다. 댓글은 위와 같이 구성하였다. 내용과 댓글 작성 시간, 작성자 정보만 저장하였다. 기능 구현 자체는 게시판 만들..
[crontab, postfix] MAIL (mailed bytes of output but got status 0x004b from MTA#012) 대처 방법
·
Infra/Oracle Cloud
이메일을 보내는 파이썬 스크립트를 단독 실행했을 때는 분명 잘 되는데, crontab 에 등록을 하니 위와 같은 에러가 뜨면서 메일이 발송되지 않았다. 나의 경우는 MTA 에 등록된 hostname 과 파이썬 스크립트에 등록된 hostname 이 일치하지 않아서 생긴 문제였다. https://tsy0668.tistory.com/11 [Ubuntu] Ubuntu에 Postfix 설치, Gmail SMTP 설정, 메일 보내기 ◆ Gmail 계정 준비◆ Ubuntu 18.04 LTS 버전◆ Ubuntu 클라우드에서 Postfix를 SEND-only SMTP로 구성 1. Ubuntu 실행 후 Root로 이동 sudo su Root의 Password 입력을 요구하는 라인이 나오고 Password를 입력하면 Roo..
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. 해결 방법
·
Tool & Language/Python3
파이썬으로 메일링 기능을 구현하는 도중 위와 같은 문제를 만났다. 이 에러는 username 이 잘못되었거나, password가 잘못되었거나, 구글에서 지원하지 않는 방식으로 로그인을 시도할 때 발생한다. 1. 앱 비밀번호를 이용하기 우선, 2022년 5월 이후로 기존의 '아이디-비밀번호' 방식으로는 서드파티에서 이메일을 전송을 위한 구글 계정 로그인을 할 수 없게 되었다. 따라서 아래 과정을 통해 로그인을 해야한다. https://myaccount.google.com/security Google 계정 myaccount.google.com 먼저 구글 계정의 보안탭으로 이동한다. 그리고 2단계 인증을 활성화해준다. 오른쪽 화살표를 클릭하여 상세 페이지로 이동한 후, 화면을 밑으로 내려주면 아래와 같은 앱 ..
[개인프로젝트] 수원시 공고알림 크롤링 및 메일링 프로그램 제작
·
개인 프로젝트/토이 프로젝트
수원시 공고 사이트에서 원하는 정보가 새로 올라왔을 때, 해당 정보를 메일로 받는 프로그램을 제작해보았다. https://www.suwon.go.kr/web/saeallOfr/BD_ofrList.do?q_currPage=1&q_sortName=&q_sortOrder=&q_rowPerPage=&q_searchKey=SJ&q_searchVal= 공고/고시/입법예고 : HOME > 수원소식 > 공고/고시/입법예고 8792 수원시 장안구 파장동 공고 제2024-13호 주민등록신고 미이행자에 대한 최고공고 파장동 2024-02-08 2024-02-08 ~ 2024-02-26 24 8791 수원시 영통구 공고 제2024-75호 2024년 경로당 활성화 문화교실 강사모 www.suwon.go.kr 크롤링, 메일링 모..
[GDSC 프로젝트 트랙] 5. 장고(Django) 배포 & Github Action 이용한 CI/CD 구축
·
팀 프로젝트/[2024] GDSC 프로젝트 트랙
일단 무작정 배포하기 처음 프로젝트를 시작할 때는 프론트에서 API를 사용하기 위해 백엔드 레포지토리에서 코드를 받아 직접 로컬에서 서버를 실행시킨 뒤, localhost:8000 으로 요청을 보내는 방식을 사용해야했다. 하지만, 아무리 readme에 서버 구동 방법을 자세히 적어두어도 파이썬 설치, 가상환경 설정과 같은 개발환경 세팅을 장고를 학습해보지 않은 프론트가 따라하기에는 어려움이 있을 수 밖에 없었다. 프론트 멤버가 개발을 하기도 전에 백엔드 개발환경 세팅으로 고생하는 것을 보고 이건 아니다 싶어서 일단 빨리 서버에 배포부터 하자고 생각했다. 서버는 어떤 서버를 사용할 지 생각을 해봤는데, pythonanywhere 같은 호스팅 사이트를 사용하는 것도 괜찮은 듯 보였으나, 이번 기회에 직접 장..
[GDSC 프로젝트 트랙] 4. 채팅 구현 방식 결정 & API 작성
·
팀 프로젝트/[2024] GDSC 프로젝트 트랙
로그인 API 구현 이후로는 채팅 API를 구현하게 되었다. 우선 실시간 채팅 API를 구현하기 위해 Firestore 에서 제공하는 document 변경 감지 기능을 사용하는 것을 고민해보았다. https://firebase.google.com/docs/firestore/query-data/listen?hl=ko Cloud Firestore로 실시간 업데이트 가져오기 | Firebase 의견 보내기 Cloud Firestore로 실시간 업데이트 가져오기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. onSnapshot() 메서드로 문서를 리슨할 수 있습니다. 사용 firebase.google.com 채팅방에 해당하는 문서를 만들고, 그 문서 안에서 채팅 내역 데이터가 바..
[백준] 20055 - 컨베이어 벨트 위의 로봇
·
알고리즘 (PS)/BOJ
https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 간단한 시뮬레이션 문제이다. 나는 생각을 어렵게 해서 쌩 배열로 구현해서 그런지 구현이 빡셌지만.. 난이도 매기는 사람들 의견보니 구현은 쉬운편이라고.. 그냥 덱 자료구조로 하면 더 쉽게 할 수 있을 것 같다. Python 리스트 (배열) 사용 풀이 배열과 리스트는 다르지만 사실상 리스트를 배열처럼 활용하여 풀었다. 나는 2N 개의 배열을 미리 잡아두고 '올리는 위치(put_..
[GDSC 프로젝트 트랙] 3. 로그인 API 구현
·
팀 프로젝트/[2024] GDSC 프로젝트 트랙
핵심 기능인 아이 돌보기 / 돌봄 맡기기 데이터의 CRUD API 를 구현하였으니, 다음으로는 로그인을 구현하기로 했다. 로그인을 빠르게 구현한 이유는 각 유저마다 '아이 돌보기' 데이터를 하나만 생성할 수 있도록 세운 정책에 의해 '돌보기' 데이터의 생성 API 는 현재 로그인된 유저의 정보를 가져오도록 코드를 작성하여 로그인이 필요했기 때문이다. 구현을 시작하기 전에는 전에 플러터로 개발한 앱에서 Firebase로 로그인을 해봤으니 금방 구현할 수 있겠다고 생각했었으나, 막상 해보니 내가 03 있었던 점이 있었음을 깨달아서 난관에 부딪혔다. 클라이언트 Firebase vs 서버 Firebase 내가 착각하고 있었던 점은 플러터 + Firebase 로그인을 할 때는 플러터 앱(클라이언트) 에서 Fire..
[GDSC 프로젝트 트랙] 2. 맡기 CRUD API 구현 & 배포
·
팀 프로젝트/[2024] GDSC 프로젝트 트랙
API 명세 논의 24년 1월 8일, 사당 스타벅스에 모여 회의를 진행했다. 내가 작성한 명세서를 토대로 더 추가해야할 API 가 있는지, API 에서는 어떤 형식의 데이터를 주고 받아야 하는지를 논의하였다. 논의 결과 아래와 같은 형태로 데이터를 주고 받게 되었다. { "start_time": 1100, "date": "20240115", "child_age": 2013, "rating": 4.2, "address": "서울시 마포구 와우산로 70 홍익대학교 T동 702", "end_time": 2000, "email": "test2@example.com", "status": "waiting", "gender": "f", "id": "test2@example.com" } 이걸 논의하면서 프로젝트 기획의..
[Git] (맨 처음 커밋을 포함한) 특정 커밋들만 삭제해서 새 레포지토리로 옮기기
·
Tool & Language/Git
현재 상황 1. 학교 개발 동아리에서 팀 프로젝트를 하기 위해 레포지토리를 만들었는데, 처음에 만들 때 프론트와 백 레포지토리를 분리하지 않고, 하나의 레포지토리에서 모두 작업하며 만들었다. (프론트는 리액트 네이티브, 백엔드는 장고였는데, 이를 하나의 레포지토리에 통합해서 진행했다. 왜 처음부터 분리를 안했는지 묻는다면.. 동아리 활동 운영 정책상 분리를 하면 안되는 줄 알았기 때문이다.) 2. 그 상태에서 프론트도 커밋을 올렸고, 백엔드도 커밋을 올렸다. 3. 그런데 동아리 운영공지로 백엔드와 프론트 레포지토리를 분리해서 만들라는 공지를 받았다. 4. 단순히 백엔드 소스코드만 복사해서 새 레포지토리에 커밋을 할 수도 있겠으나, 그렇게 하면 지금까지 작업한 커밋들이 모두 사라지는게 아쉽다. 그래서 지금..