CEOS 19기에 지원하면서 그 준비 과정을 정리하고자 한다. CEOS 동아리 정보 https://ceos-sinchon.com/ CEOS | 세오스 CEOS는 연세대학교, 서강대학교, 이화여자대학교, 홍익대학교 학생들이 모인 최고의 IT 창업 학회입니다. ceos-sinchon.com 세오스는 신촌 연합 IT 창업 동아리이다. 단순 IT 동아리가 아니라, '창업' 동아리임을 강조한다. 모집 대상은 '창업' 에 관심있는 사람이라고 했는데, 면접 파트에서 후술하겠지만 나의 경우 창업 질문은 나오지 않았다. 매주 수요일 정기 세션을 진행한다. 정기 세션에서는 창업과 관련된 활동을 진행한다. 나는 백엔드로 지원하였고, 위 사진은 '개발' 파트 모집 공고에 올라온 내용이다. 스터디 커리큘럼은 위와 같이 나와있었..
https://www.acmicpc.net/problem/21609 21609번: 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록 www.acmicpc.net BFS 를 활용하는 시뮬레이션 문제이다. 구현할 때 모든 조건을 꼼꼼히 살펴야하고, 작은 사소한 실수 하나로도 문제를 틀리기 때문에 난이도가 높다. N, M = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(N)] score = 0 while True: x, y, size = find_block..
아이를 맡기고 맡는다는 핵심 로직의 구현이 어느 정도 완료되어 서브 커뮤니티을 구현하기 시작했다. 게시글과 각 게시글에 달리는 댓글을 관리하는 CRUD 를 구현하였다. 문서 필드는 위와같이 구성하였다. comment_count 를 따로 속성으로 빼둔 이유는, 전체 글 리스트를 조회할 때 댓글 개수는 필요하지만, 댓글 데이터 자체는 필요하지 않기 때문에 댓글 갯수를 별도 필드에 저장하도록 하였다. 그런데 지금 생각해보니 댓글 개수 정보는 하위 컬렉션에 저장해두고 매번 API 호출 시 댓글 컬릭션의 문서 갯수를 세서 반환하므로 굳이 DB 필드로 존재할 필요는 없었을 것 같다. 삭제를 고려해야겠다. 댓글은 위와 같이 구성하였다. 내용과 댓글 작성 시간, 작성자 정보만 저장하였다. 기능 구현 자체는 게시판 만들..
이메일을 보내는 파이썬 스크립트를 단독 실행했을 때는 분명 잘 되는데, 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..
파이썬으로 메일링 기능을 구현하는 도중 위와 같은 문제를 만났다. 이 에러는 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 크롤링, 메일링 모..
일단 무작정 배포하기 처음 프로젝트를 시작할 때는 프론트에서 API를 사용하기 위해 백엔드 레포지토리에서 코드를 받아 직접 로컬에서 서버를 실행시킨 뒤, localhost:8000 으로 요청을 보내는 방식을 사용해야했다. 하지만, 아무리 readme에 서버 구동 방법을 자세히 적어두어도 파이썬 설치, 가상환경 설정과 같은 개발환경 세팅을 장고를 학습해보지 않은 프론트가 따라하기에는 어려움이 있을 수 밖에 없었다. 프론트 멤버가 개발을 하기도 전에 백엔드 개발환경 세팅으로 고생하는 것을 보고 이건 아니다 싶어서 일단 빨리 서버에 배포부터 하자고 생각했다. 서버는 어떤 서버를 사용할 지 생각을 해봤는데, pythonanywhere 같은 호스팅 사이트를 사용하는 것도 괜찮은 듯 보였으나, 이번 기회에 직접 장..
로그인 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 채팅방에 해당하는 문서를 만들고, 그 문서 안에서 채팅 내역 데이터가 바..
https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 간단한 시뮬레이션 문제이다. 나는 생각을 어렵게 해서 쌩 배열로 구현해서 그런지 구현이 빡셌지만.. 난이도 매기는 사람들 의견보니 구현은 쉬운편이라고.. 그냥 덱 자료구조로 하면 더 쉽게 할 수 있을 것 같다. Python 리스트 (배열) 사용 풀이 배열과 리스트는 다르지만 사실상 리스트를 배열처럼 활용하여 풀었다. 나는 2N 개의 배열을 미리 잡아두고 '올리는 위치(put_..
핵심 기능인 아이 돌보기 / 돌봄 맡기기 데이터의 CRUD API 를 구현하였으니, 다음으로는 로그인을 구현하기로 했다. 로그인을 빠르게 구현한 이유는 각 유저마다 '아이 돌보기' 데이터를 하나만 생성할 수 있도록 세운 정책에 의해 '돌보기' 데이터의 생성 API 는 현재 로그인된 유저의 정보를 가져오도록 코드를 작성하여 로그인이 필요했기 때문이다. 구현을 시작하기 전에는 전에 플러터로 개발한 앱에서 Firebase로 로그인을 해봤으니 금방 구현할 수 있겠다고 생각했었으나, 막상 해보니 내가 03 있었던 점이 있었음을 깨달아서 난관에 부딪혔다. 클라이언트 Firebase vs 서버 Firebase 내가 착각하고 있었던 점은 플러터 + Firebase 로그인을 할 때는 플러터 앱(클라이언트) 에서 Fire..