Log 33

간단한 서버와 API는 금방 만들 수 있게 되었다.

오늘 한 것 SQL 물리 삭제와 논리 삭제에 대해 스터디 모임에서 발표하고 블로그에 정리 글을 올렸다. 2022.02.03 - [Dev/DB] - 물리삭제와 논리삭제를 코드로 구현해 보았다. git에 대해 공부하고 아직 생소한 것은 따로 메모에 정리해두었다. 2022.02.03 - [Dev/Etc] - git 개념 정리 성장한 점 SQL을 설명하기위해 간단하게 서버 API와 SQL문 코드를 만들었는데 2시간 정도 소요되었다. 간단한 앱을 스스로 처음부터 만들 수 있게 되었다는 점이 놀랍다. 기존에 쓰던 git에 대한 쓰임새와 모르던 기능을 제대로 알게되었다. 익숙해지기 위해 평소에 자주 사용해보자. 노력할 점 SQL의 '서브쿼리'나 '조인'에 대해서는 더 공부해야 한다. 오늘 이력서 피드백 세션이 있었는..

Log/Today 2022.02.03

Bidasks, Suulgo 프로젝트 리펙토링

오늘 한 것 Bidasks 프로젝트 리펙토링 로직 순서 정렬, 레이어 분리, 불필요 코드 삭제 레포 링크 Suulgo 프로젝트 리펙토링 매칭알고리즘을 평균 가중치가 아닌 개인별 가중치로 로직 변경 레포 링크 모자른 점 두 개 프로젝트에 대해서 리펙토링을 했지만 더 좋은 코드가 있을 것 같아 스스로 의심이 든다. suulgo 의 경우, DRF의 모듈들을 활용하고 싶지만 반환 값들이 단순하지 않아 어떻게 수정해야할지 감이 안 잡힌다. 개선 방법 '좋은 코드'를 작성하려면 '좋은 코드'를 많이 보는 수밖에 없는 것 같다. 일단 주로 쓰는 라이브러리부터 살펴보고 어떤 구조와 코드로 이루어져 있는지 기록하자. 감이 안 잡힐 때는 더 작게 쪼개자. 우선 DRF로 일대다 관계의 데이터를 합쳐서 반환하는 방법을 찾아보..

Log/Today 2022.02.02

DRF에서 라우터는 왜 사용하는가?

목표 수정과 삭제기능 구현하기 라우터는 왜 사용하는가? 목적 DRF로 간단한 CRUD를 구현하여 기본 구조를 익히고자 함 DRF에서 router를 왜 사용하고 어떻게 사용하는지 이해하기 위함 결과 viewset과 serializer를 이용하여 수정과 삭제 기능 구현 완료 (사실상 어제 완료가 된 것이었으나 uri에 '/'의 위치가 잘못되어 작동하지 않았던 것임) router를 사용하는 이유 viewset과 연계하여 url의 하드코딩을 막을 수 있다. as_view를 통해 각 request method마다 api를 연결시켜주었다면 router는 이를 알아서 연결해줌. message_list = MessageViewSet.as_view({ 'get': 'list', 'post': 'create', }) me..

Log/Today 2022.01.29

DRF를 사용하여 간단한 CRUD 구현해보기

목표 DRF를 사용하여 간단한 CRUD 구현해보기 viewset 이용하기 serializer 이용하기 목적 DRF 기본기능 익히기 결과 viewset과 serializer를 이용하여 읽기(get), 쓰기(post) 기능 구현 수정(update)과 삭제(delete) 기능은 구현하지 못함 # serializers.py class MessageSerializer(serializers.ModelSerializer): class Meta: model = Message fields = "__all__" # views.py class MessageViewSet(viewsets.ModelViewSet): queryset = Message.objects.all() serializer_class = MessageSeri..

Log/Today 2022.01.28

DRF Tutorial 끝내기

목표 Django REST framework Tutorial 끝내기 목적 Django로 취업을 하기 위해서는 DRF를 공부해야함 DRF Tutorial을 통해 전반적인 기능을 눈에 익혀야함 결과 DRF 공식페이지를 통해 Tutorial 1~6번 까지 모두 완료하였음 해당 코드는 모두 깃헙에 push 하였음 serialization과 viewset 등 아직은 추상적이고 어려운 개념들이라 정확하게 이해되지 않음 앞으로 당장 내일 '술고' 프로젝트를 리펙토링하면서 DRF 적용해보기 viewset을 이용하여 DB데이터 반환해보기 레퍼런스 DRF 공식 홈페이지

Log/Today 2022.01.27

메모리에서 파일로 선입선출이 아닌 벌크 이동

목표 메모리에서 파일로 데이터 이동시 선입선출이 아닌 벌크로 이동시키기 문제 메모리에서 파일로 1개씩 선입선출로 이동하는 것은 좋지 않다는 피드백 받음. 생각해보니 메모리와 파일의 데이터를 모두 합쳐 반환하는 로직을 구현하였으므로 굳이 1개씩 보낼 이유가 없었음. 즉, 데이터를 한 번에 옮기는 것이 훨씬 효율적으로 보여 이를 수정하고자 함. 행동 기존에 선입선출을 위해 사용했던 pop() 매서드를 제거하고 대신 데이터 이동 후 clear() 매서드로 데이터를 지워주었다. def memory_data(arg): args.append(arg) if len(args) > 99: insert_file(args) args.clear() # 비워주지 않으면 중복 값이 계속 이동하므로! global memory_ar..

Log/Today 2022.01.19

메모리와 csv파일 데이터 합치기

목표 벌크 요청 시 요청한 수만큼 메모리와 파일 데이터를 합쳐 반환하기 문제 기존에는 벌크 요청을 할 경우 100개를 기준으로 반환하였는데, 사용자의 편의성을 높이기 위해 수량을 직접 선택하여 요청하면 어떨까 하는 생각이 들었다. 행동 들어온 수량에 따라 기존 메모리에 저장된 데이터를 가져오고 만약 모자르면 csv파일에서 나머지 데이터들을 가져오는 로직을 구현하였다. 1. 먼저, 실시간 데이터가 들어오는대로 메모리에 저장한다. args = [] memory_args = [] # 실시간 데이터(arg)를 메모리에 저장하고 다시 전역변수로 변경한다 def recent_data(arg): args.append(arg) if len(args) > 100: insert_file(args.pop(0)) # 전역변수..

Log/Today 2022.01.18

apscheduler를 활용한 예약 실행 성공

목표 파일에서 DB로 옮기는 코드를 장 마감 시간에 맞춰 자동 실행하기 문제 기존에는 파일의 데이터를 DB로 옮기기 위해서는 클라이언트에서 추가로 요청을 해야 했다. 하지만 정해진 시간에 자동으로 작업을 수행하면 요청을 따로 할 필요도 없고 실수로 누락될 일도 없겠다는 생각이 들었다. 행동 스케줄을 사용하기 위해 구글링을 하다 보니 while로 무한 루프를 하는 코드만 있었다. 하지만 다행스럽게도 apscheduler 라이브러리를 사용하면 while을 돌릴 필요없이 다중 스케줄을 사용할 수 있었다. 그리고 실제 적용해본결과 flask서버와도 함께 사용할 수 있었다. 이로써 서버 시작과 동시에 여러 스케줄들을 자동으로 수행하는 것은 물론, 클라이언트로부터 다른 요청도 받을 수 있었다. # apschedul..

Log/Today 2022.01.18

메모리, csv, DB입력, 그리고 데이터 반환

목표 - 메모리와 파일 시스템(csv)을 활용하여 DB에 데이터 입력 - 데이터 요청 시 벌크가 0이라면 해당 종목의 가장 최근 데이터 1개 반환 - 데이터 요청 시 벌크가 1이라면 해당 종목의 가장 최근 데이터 최대 100개 반환 문제 - 메모리에 데이터가 100개 이상이 되면 csv파일로 선입선출 방식을 통해 이동해야 함 - csv파일의 데이터는 한 번에 DB로 이동해야 함 - 유저가 요청하면 종목 코드에 맞는 데이터를 1개 또는 최대 100개까지 가져와야 함 행동 - 리스트 안에 데이터가 100개가 된다면 pop()을 이용해 선입선출로 csv로 이동하는 로직 구현 # ------------------------ # 메모리를 활용한 데이터 관리 코드 args = [] # 최근 데이터는 100개 까지 ..

Log/Today 2022.01.17

파일 시스템으로 DB 인서트 하는 중

목표 파일 시스템을 활용하여 수신 데이터를 저장해두었다가 벌크로 DB에 저장하는 로직 구현하기 문제 파일 시스템으로 csv파일에 데이터를 입력해야 함 DB에 벌크로 입력하는 코드를 작성해야 함 csv에서 DB로 벌크 입력한 후 해당 파일의 내용은 삭제해야 함 최신 데이터 100개를 가져오는 로직을 구현해야 함 행동 csv파일을 생성하고 데이터를 입력하는 로직 구현함 sql문으로 벌크 저장하는 로직 구현함 csv의 전체 데이터를 읽어 들여 DB에 입력하는 기능 구현함 DB에서 최근 데이터 100개 불러오는 로직 구현함 고민 csv 데이터를 요청 때마다 초기화 해주지 않으면 DB로 중복해서 저장될 우려가 있음 csv 전체 데이터를 한 번에 저장하기 때문에 요청과는 별개로 불필요한 부하가 생길 수 있음 앞으로..

Log/Today 2022.01.14