반응형

전체 글 136

#3. 연결리스트 (Linked list) / python으로 구현

2023.10.01 - #2. 배열 (Array) / python list #2. 배열 (Array) / python list 데이터역량 키우는 하루하루의 기록 hanawithdata.tistory.com array는 이전글 참고해주세요. 이전글에서 List의 종류에는 array list와 linked list가 있다고 분류했습니다. 이 글에서는 Linked List를 알아보고 코드로 구현해보도록 하겠습니다. 연결리스트의 구조 메모리상에 연속적으로 데이터를 저장하는 배열과 달리 연결리스트는 메모리상에 연속적이지 않게 데이터를 저장할 수 있는 자료구조입니다. 노드라는 단위로 구성되었고, 노드는 데이터와 다음 노드를 가리키는 주소로 만들어집니다. 그리고 연결리스트의 가장 첫 노드를 가리키는 head가 존재합..

#2. 배열 (Array) / python list

배열은 데이터를 저장하는 아주 기본적인 자료구조이다. 데이터를 순차적으로 저장하는 List는 크게 Array List 와 Linked List로 나뉘는데 먼저 배열부터 살펴보자. List Array List Array Dynamic Array (Python의 list) Linked List 배열은 다시 또 두가지로 나뉘는데 기본 정적 배열을 보완하여 동적 배열을 구현했다고 보면 된다. 파이썬의 리스트 타입 자료구조는 동적 배열로 구현되어 있다. 배열 (array) 배열의 두가지 특징 고정된 저장공간 순차적인 데이터 저장 배열 메모리 할당 int arr[5] = {1,2,3,4,5} 예를들어 위에 처럼 크기5의 배열을 선언한다면 int (4byte) * 5 = 20 byte의 공간을 메모리에 할당하고 각각..

#1. 해시테이블 (hash) / python dictionary

정의 빠른 탐색을 위해 key-vlaue 쌍을 저장하는 자료구조이며 key는 중복될 수 없고 순서가 없다. 파이썬에서는 dictionary 데이터 타입이 해시테이블을 제공한다. *코드 예시 student = { 1 : "최하나", 2 : "최두리", 3 : "최세찌", 4 : "최네찌" } 해시테이블은 저장, 삭제, 검색 모두 O(1)의 시간복잡도를 가져 매우 빠르다. In 연산자와 사용 특정 key값이 해시테이블에 있는지 조회할 때 in과 사용하면 매우 효율적이다. (리스트는 O(n) 인데, 해시테이블은 O(1) 시간복잡도를 가짐) 만약에 1000명의 학생중에 "최하나" 라는 학생이 있는지가 궁금하다고 할 때 students = ['김xx' , '이xx', ....., '최xx'] 이렇게 리스트로 정의..

장고 ViewSet 으로 list, retrieve, update, create, delete 직접 구현하기

1. ModelViewSet 사용하기 장고에서 DRF를 사용하면 무려 코드 두줄로 기본 CRUD를 완성할 수 있다. ModelViewSet 을 상속받아서, 쿼리셋과 Serializer만 설정해주면 된다. 그리고 라우터 한줄을 추가해주면 알아서 관련된 CRUD 엔드포인트를 만들어준다. [Post 예시] # views.py class PostViewSet(ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer # urls.py router = DefaultRouter() router.register('post', views.PostViewSet, basename='post') urlpatterns= [ *router.url..

장고 django ManyToMany (N:M 다대다 관계)

N:M 관계 예시 인스타그램 같은 서비스를 생각해보면, #맛집 이라는 태그는 여러개의 포스트에도 달릴 수 있고, 하나의 포스트에는 #맛집, #아이스크림 이렇게 여러개의 태그가 달릴 수 있습니다. 이럴 때 ManyToMany로 정의해줄 수 있습니다. 정의 방법 N쪽에 정의를 해줘야하는 ForeignKey와 달리 어느쪽에 정의해주어도 상관없습니다. (대신 한쪽에 해줬으면 한쪽에는 X) 하지만 활용하는 쪽에 정의해주면 좀더 자연스럽습니다. 태그와 포스팅 관계에서는 태그를 활용하는 포스트에 정의를 해주는 것이 좋습니다. class Post(models.Model) ... Tag = models.ManyToMany('Tag', blank=True) class Tag(models.Model) name = model..

장고 django ForeignKey (1:N 관계)

1:N 관계 예시 한명의 유저는 여러개의 포스트를 작성할 수 있다. -> 1:N 하나의 포스트는 여러개의 댓글을 가질 수 있다. -> 1:N 이렇게 하나의 객체가 여러개의 객체를 가질 수 있을때 1:N 관계라고 하고 ForeignKey로 관계를 정의 할 수 있다. 정의 방법 N에 해당하는 객체에 ForeignKey 로 지정해준다. Post, Comment 예시로 들면 아래처럼 작성할 수 있다. class Post(models.Model): ... class Comment(models.Model): post = models.ForeignKey(Post, on_delete= models.CASCADE) Queryset 작성 방법 1. N 객체에서 관계된 객체의 값 조회하기 comment = Comment.o..

장고 (djagno) Rest framework tutorial #2 데이터 보내기(POST)

2023.09.05 - 장고 (djagno) Rest framework tutorial #1 데이터 가져오기 (GET) 장고 (djagno) Rest framework tutorial #1 데이터 가져오기 (GET) 데이터역량 키우는 하루하루의 기록 hanawithdata.tistory.com 먼저 이전글을 참고하면 기본적인 세팅과 GET 뷰를 작성할 수 있습니다. 오늘은 POST로 JSON data를 전송할건데, 아주아주 간단합니다. api > views.py에 함수 추가 - 이전에 만들어준 ItemSerializer함수에 request.data (입력 데이터)를 넘겨줍니다. - 유효한 데이터라면 저장해주고 응답을 줍니다. @api_view(['POST']) def addItem(request): se..

장고(django) 회원가입 (UserCreationForm)

2023.08.11 - 장고 (django) - LoginView, LogoutView, LoginRequireMixin 설정하기 장고 (django) - LoginView, LogoutView, LoginRequireMixin 설정하기 데이터역량 키우는 하루하루의 기록 hanawithdata.tistory.com 로그인 관련해서는 위에 글 참고! 1. 기본적인 회원 가입 화면 생성 1) views.py def register(request): if request.method=='POST': form = UserCreationForm(request.POST) if form.is_valid(): form.save() form = UserCreationForm() context = {'form':form} ..

프로그래머스 lv2. 기능개발 (스택/큐로 풀기)

https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 스택과 큐를 공부하고 프로그래머스의 스택/큐 카테고리에 있는 Lv2 문제에 적용시켜보았습니다. 기능 구현의 속도와 진행 상태를 받아서, 배포할 때 몇개의 기능이 동시에 배포될 수 있을지 계산하는 문제인데요. 현실에서 사용할 법한 문제라서 재미있게 풀었습니다 스택: LIFO (싱크대에 쌓여있는 접시를 생각하면, 마지막에 쌓인 접시가 먼저 세척됨) append() : 맨 뒤에 붙임 pop(): 맨 뒤..

장고 asgi(비동기) 채팅기능 구현하기

ASGI (Asynchronous Server Gateway Interface) & WSGI (Web Server Gateway Interface) 웹 애플리케이션과 웹 서버간에 표준화된 통신 인터페이스를 제공하는 통신 프로토콜인데, ASGI는 비동기적인 프로토콜이며 WSGI는 동기적인 프로토콜입니다. 동기적: 작업이 끝날때까지 요청을 처리하지 않고 대기해서 I/O 작업이 있는 애플리케이션에서 성능이 저하될 수 있음 -> 실시간 기능을 지원하기 어려움 비동기적: 작업이 끝날때까지 요청을 블로킹하지 않고 다른 작업을 처리하여 더 빠른 응답 시간과 더 높은 동시성 제공 -> 실시간 기능을 구현할 수 있음 , 따라서 채팅, 실시간 업데이트 , 실시간 게임과 같은 애플리케이션 개발에 좋음 장고에서 ASGI 사용..

반응형