본문 바로가기

전체 글

(67)
[네트워크] OSI 7계층 계층 분리 큰 하나의 일련의 과정을 세부적으로 쪼개어 모듈화, 분업화 각 모듈은 본인에게 할당된 일에만 집중할 수 있고, 다른 부분 신경 X 인접한 모듈에게 약속된 서비스를 받고 주기만 하면 됨 내부 구현 방식에 변화가 있더라도 다른 모듈들에게는 영향 X → 독립성 $\uparrow$ 1. 물리 계층 (Bit) 리피터, 케이블, 허브 등 신호로 변환하여 전송하는 계층 데이터를 전지적인 신호로 변환해서 주고받는 기능 ⇒ 데이터를 전송하는 역할만 진 물리적 기기에서 물리적 특성과 기능 정의 비트 처리 방식 결정 → 0과 1을 나타내는 전압 정의 전송 매체 결정 전송 방식(simplex, duplex, half duplex 등) 결정 데이터 전송 속도 결정 2. 데이터 링크 계층 (Frame) 브릿지, 스위치..
21.04.28 친구 관계 설정, EC2, RDS, nginx, gunicorn 설정 최근 자소서와 코테 때문에 많이 진행하지 못했다... 곧 면접도 있어서 cs 공부도 해야되어서 예전만큼 시간을 할애하지 못할 것 같다.. ㅠ 그래도 할때는 열심히! 채팅방이나 인증 등을 직접 테스트 해보려면 프론트가 있으면 좋겠어서 팀원을 구했다. 프론트 갓 시작하는 2명을 영입했다. 회의에서 뭐 더 넣어보고 싶은 기능이 있으면 말해달라고 했었는데, 친구 추가 같은 기능도 있었으면 좋겠다고 해서 친구 관계도 추가했다. 친구 관계 설정, EC2, RDS, nginx, gunicorn 설정 친구 관계 설정 유저 N : M 관계로 일반적인 1: N 관계와는 다르게 선언해줬어야 했다. RDS에서 N:M 관계를 중간 관계 테이블을 두어 N:1, 1:M 두는 것처럼, 중간 테이블을 두어 user_id, friend..
동기/비동기, 블로킹/논블로킹 FastAPI를 하면서 파이썬의 비동기 프로그래밍을 접해보았다. 하지만 정확한 이해 없이 마구잡이로 async를 하니, 속도가 오히려 떨어지는 상황을 겪게되는 경우가 있었다. 이러한 사태를 다시 겪지 않기 위해 기초부터 다시 찾아보기로 했다. 동기/비동기 vs 블로킹/논블로킹 우선 둘의 차이점을 먼저 말하고 가는 것이 뒷부분을 이해하는데 편할 것 같다. 동기/비동기 작업하는 주체의 관점 작업의 완료 여부에 따라 블로킹/논블로킹 여러 작업의 흐름 관점 1개의 작업이 다른 작업의 실행을 막는지 여부 동기 vs 비동기 작업을 수행하는 2개 이상의 주체가 시작, 종료 시간을 서로 맞출 것인지? 동기 작업 요청을 했을 때 요청의 결과값(return)을 직접 받는 것이다 def a(): # do something ..
21.04.23 - 소켓 통신 테스트 및 소켓 인증 방식 리서치, Authentication / TrustedHost Middleware 추가 소켓 통신 테스트 및 소켓 인증 방식 리서치, Authentication / TrustedHost Middleware 추가 소켓 통신 테스트 데이터 송수신 테스트 및 채팅방 여러개 테스트 (아직 유저 구분은 하지 않았음) 클라이언트가 페이지를 나가면 소켓 객체 삭제 → 이 부분은 나중에 알림과 같은 부분이 어떻게 구현되는지 보고 다시 봐야되겠다. JSON 형식으로 데이터 주고 받기 → 인코딩 문제 있는데 서버에서 출력하면 제대로 나온다. 그럼 클라이언트에서 디코딩 해야되나? 미들웨어 추가 TrustedHost == allowed host 지금 당장은 필요 없지만 보인 김에 같이 했다. Authentication Django에서처럼 request.user를 하면 현재 로그인 된 유저가 나올 수 있도록 하기..
21.04.21 - 메시지 조회 및 생성 기능, 다른 api 버그 수정 채팅방을 만들었으니 이제 메시지를 만들어볼 차례이다. 별다른 어려움은 없었다. 고민해야 될 점 메시지 생성 시기 및 처리 방법 1 웹 소켓이 유저로부터 메시지를 받음 메시지 생성을 함 완료되면 채팅방에 연결된 소켓들에게 뿌림 방법 2 메시지를 받음 채팅방 소켓에서 바로 뿌림 메시지를 생성함 → background task로 하는 메시지 전송 에러 감지 방법 1에서는 손쉽게 가능 방법 2에서는 어떻게 해야되지....?
21.04.20 - 채팅방 생성 및 조회 기능, Class Based View 유저를 만들 수 있게 되었으니 이제 채팅방 crud를 만들어볼 차례. CBV 인턴에서 FastAPI 사용했을때는 함수형으로 작성했었다. 그러다보니 main.py 파일이 너무 길어지고 수정이 필요할 때 찾기도 불편했다. 그래서 Flask에서처럼 클래스로 뷰를 관리하는 게 있었으면 좋겠다고 생각했는데, 역시 있었다. Class Based Views 생각보다 너무 좋았다. 매번 함수에서 공통적으로 필요한 부분(db, request, user_id)을 선언하지 않아도 클래스 변수로 가져올 수 있다니 신세계다. 한가지 좀 애를 먹었던 것은 user_id를 가져오는 부분이었는데, 나는 해당 함수의 파라미터 이름을 맘대로 지어도 되는줄 알았는데 안되는 것이었다... token: str = Header(...) 이렇게..
21.04.16 - 채팅에 관한 간단한 리서치, JWT 인증 구현 채팅에 관한 간단한 리서치, JWT 인증 구현 인턴을 하면서 저번에 리더님이 나에게 해보고 싶은 것 있냐고 물어보셨을 때, 웹소켓이나 인증 부분을 다뤄보고 싶다고 말했었다. 그래서 리더님이 그걸 기억하시고, 이번 NIPA 챗봇 외주 개발 프로젝트에 나를 넣어주셨다. 해당 프로젝트는 기존 서비스에 장고로 연결되어 있던 것을 떼와서 FastAPI로 바꾸는 것이었어서 처음부터 끝까지 다뤄보지는 못했다. 그래서 뭔가 아쉬워서 혼자라도 간단한 채팅을 구현해보고 싶어서 이 프로젝트를 시작했다. NIPA에서는 웹소켓은 Node.js로 이루어져있었고, REST API로 Fast API한테 메시지를 전달하면 AI의 응답을 담아 다시 웹소켓에 쏴주는 형식이었다. 즉, FastAPI 는 socket client 역할을 했었..
05-1. FastAPI, Query Parameter Filtering 2021.01.06 - [FastAPI] - 05. Fast API, REST API Query Parameters 설정 저번 Query Parameter 글에서 한 분이 댓글에 질문을 남겨주셨다. 필터링 처리를 쿼리파라미터로 7개 이상으로 받게될 경우 어떻게 해야하나요? 파이썬 패킹 처리를 할 것 같은데... FastAPI에서 어떻게 하는지 궁금하네요 이 부분은 나도 궁금해서 한번 실험을 해보았다. from fastapi import Query my_query_parmas = {"a": Query(...), "b": Query(None)} @app.get("/") async def p(*args, **kwargs): pass @app.get("/test") async def p(x: dict = my_..