전체 글 41

[Spark] 스파크 설치하고 csv 파일 불러오기

스파크는 데이터 과학에서 자주 볼 수 있는 반복 연산에 적합한 개념과 기능을 제공하는 인-메모리 데이터 처리 엔진으로 빠른 속도가 특징이다. 다양한 언어와 데이터 포맷을 지원하고 데이터 전처리를 효과적으로 수행할 수 있어서 빅데이터 파일 시스템으로 많이 쓰이는 하둡과 같이 쓰이기도 한다. 기본적인 분산 처리 기능 뿐 아니라 스파크 SQL, MLlib, 스트리밍 등 여러 구성 요소가 있다. 기본 데이터 구조로는 객체의 분산 시퀀스인 RDD(Resilient Distributed Dataset)를 사용하며 RDD는 다양한 관계 대수 연산자(SELECT, JOIN 등)와 스칼라, 파이썬 변환 로직의 피연산자로 적용될 수 있다. RDD는 또한 RAM에 저장되며 자동으로 결함을 극복하는 메커니즘을 지원한다. 만약..

[Hadoop] 하둡과 분산 파일 시스템

데이터 과학, 데이터 분석에 관심이 있다면 한 번쯤 접하게 되는 이름이 바로 '하둡(Hadoop)'이다. 하둡은 자바 기반의 분산 컴퓨팅 플랫폼으로, 핵심 파일 시스템인 HDFS(Hadoop Distributed File System) 덕분에 대용량의 데이터를 저장하고 다룰 수 있다. 어떻게 이런 관리가 가능할까? 하둡은 구글의 GFS(Google File System)를 기반으로 설계되었는데, 일반적인 파일 시스템을 가진 여러 데이터노드를 묶어서 하나의 분산 파일 시스템을 구축하도록 하였다. 따라서 파일 시스템을 쉽게 확장할 수 있게 되었고 대용량의 데이터를 저장하고 관리할 수 있게 되었다. 이런 HDFS의 설계에는 세 가지의 가정이 반영되었는데 첫 번째, 데이터의 풀 스캐닝을 지원하기 위해서 파일 순..

서평 작성 (5) - 서평 수정하고 삭제하기 (PUT, DELETE)

저번 포스트에서는 서평을 작성하고 불러오는(조회하는) 함수를 작성했다. 이번에는 CRUD 중 Update, Delete 기능을 구현하는 PUT, DELETE 함수를 작성해보려고 한다. 기본 구조는 이전에 작성한 포스트에서 확인할 수 있다. (1) app/urls.py 수정 post, get 과 마찬가지로 호출되는 url 을 함수와 연결한다. path('edit/', views.ReviewView.as_view()), path('delete/', views.ReviewView.as_view()) (2) app/views.py 파일에 함수 작성 APIView 클래스를 상속받아 작성한 클래스 안에 put, delete 함수를 작성한다. ... def put(self, request): data = reques..

[Django] 한 프로젝트 내에서 다른 앱의 모델 사용하기

프로젝트를 여러 명이 함께 진행하다보니 각 팀원이 서로 다른 앱을 구현하게 되는데, 이 때 다른 앱의 모델 필드를 외래키로 사용하거나 모델 자체를 내 앱에서 사용하는 경우 어떻게 사용하면 되는지에 대한 내용을 다뤄보려고 한다. 편의상 내 앱의 이름은 'myapp', 다른 팀원의 앱 이름은 'yourapp'으로 서술하도록 하겠다. 모델들의 내용은 다음과 같다. # myapp/models.py class Review(models.Model): ... userId = models.ForeignKey(User, on_delete=models.CASCADE) ... # yourapp/models.py class User(models.Model): ... Review 모델에서는 User 모델을 외래키로 사용하지만 ..

스터디/Web 2022.02.09

[Django] 모델 수정하고 삭제하기

프로젝트를 진행하다가 초기에 작성했던 모델 내용을 수정하고, 데이터를 모두 삭제해야 할 이슈가 발생해서 관련 내용을 수행하고 글로 정리해보려고 한다. (1) 모델 수정하기 기존에 작성했던 모델의 내용은 다음과 같다. # app/models.py class Review(models.Model): reviewId = models.IntegerField(primary_key=True)# 삭제할 내용 userId = models.ForeignKey(User, on_delete=models.CASCADE) bookId = models.CharField(max_length=30) reviewTxt = models.TextField() 이 내용에서 서평 제목, 서평 평점, 서평 작성날짜 필드를 추가하고 PK인 rev..

스터디/Web 2022.02.08

[Pandas] 판다스와 시리즈 기본

참고 : https://wikidocs.net/75004 Pandas(이하 판다스)는 파이썬 라이브러리로, 데이터 조작 및 분석에 용이하며 사용하기 쉬운 데이터 구조를 제공한다. 데이터프레임, 시리즈, 인덱스 등의 자료구조를 제공하며 관계형 데이터베이스의 테이블과 같은 구조로, SQL과 같은 형태로 데이터를 처리할 수 있기 때문에 쉽게 접근할 수 있다. 단독 사용보다는 NumPy, scikit-leran, matplotlib 과 함께 사용하는 경우가 많다. (1) 판다스의 자료구조 판다스가 제공하는 자료구조이다. 시리즈는 배열 형식, 데이터프레임은 표 형식의 구조이며 시리즈가 모여 데이터프레임을 구성한다. 시리즈 : 값(values) + 인덱스(index) 데이터프레임 : 칼럼(columns) + 인덱스..

서평 작성 (4) - 서평을 DB에 저장하고 불러오기 (POST, GET)

지난 포스트까지 구현했던 서평 작성 기능들은 장고 기본 기능을 이용해서 구현했다. 그러나 우리 프로젝트가 프론트와 백엔드가 나눠져있기 때문에 프론트와 백엔드를 연결하는 방법을 여러 방면으로 모색했다. 그러면서 최종적으로 장고 레스트 프레임워크 (DRF: Django REST Framework) 라이브러리를 사용하여 프론트인 리액트와 백엔드인 장고를 연결하고자 하였다. 그러던 중 오늘 드디어!! 프론트인 리액트 페이지에서 작성한 서평의 내용을 백엔드인 장고 모델에 저장하고 불러오는 것을 완성해서 그 과정을 간단하게 포스팅해보려고 한다. (1) 장고 : review/urls.py urls.py 파일에서는 장고 서버의 url 들을 views.py 의 함수들과 연결하는 내용을 담고 있다. path('', vie..

[Django] DRF : Serializer 기본 사용법, 유효성 검증

참고 : https://www.django-rest-framework.org/api-guide/serializers/ 장고 레스트 프레임워크(Django REST Framework)를 이용해 REST API 환경을 구축하다보면 Serializer를 거의 필수적으로 사용하게 된다. 하지만 Serializer가 어떤 개념인지 잘 와닿지 않아서 Serializer에 대해 공부하고 알게 된 것들을 정리해보려고 한다. (1) Serializer란? 쿼리셋이나 모델 인스턴스 같은 복잡한 데이터들을 네이티브 파이썬 데이터 타입으로 변환하여 json, xml 등의 컨텐츠 타입으로 쉽게 렌더링할 수 있게 한다. 데이터를 직렬화하는 Serializer는 역직렬화 기능 또한 제공하기 때문에 들어오는 데이터를 검증한 후에 분..

스터디/Web 2022.01.30

[Django] DRF : REST API를 통해 장고와 리액트 연결하기

장고와 리액트를 연결하는 여러 방법 중 DRF(Django REST Framework)를 활용하는 방법이 있다. REST API 를 통하면 데이터의 CRUD(Create, Read, Update, Delete)를 쉽게 처리할 수 있는데, 이번 포스트에서는 특히 데이터의 Create, 리액트에서 작성한 글을 장고 모델에 등록하는 과정을 다뤄보려고 한다. (리액트와 장고의 설치는 생략하도록 하겠다.) 장고 REST API 를 구축하는 과정은 이전 포스트에서 다루었다. 장고 모델을 json 객체로 추출하기 (DRF) 장고로 프로젝트를 진행하다 보면 프론트와 연동하게 될 때가 있다. 이 방법들은 이전 포스트(link)에서 자세히 설명했고, 이 포스트에서는 그 중 장고에서 만든 모델을 json 객체로 추출해서 접..

스터디/Web 2022.01.29

프론트와 연결하기 (2) - Axios 활용

이전 포스트에서 리액트와 장고를 연결하는 방법 중에 REST API를 이용해 json 객체를 얻고, 그것을 리액트에서 사용하도록 하는 방법이 있다고 언급했다. 하지만 이후에 계속 회의를 진행하면서 이 방법과 적용할 수 있는 방법을 찾아냈다. 바로 Axios를 활용한 방법인데 Axios란 브라우저, Node.js를 위한 HTTP 비동기 통신 라이브러리이다. Promise API를 사용하며 요청(Request)과 응답(Response)을 json 형태로 변경해준다. 이 때 비동기 방식이란 페이지에 요청(Request)을 보내고 응답(Response)을 받는 행위가 1:1 관계로 이뤄지는 것이 아닌, 페이지를 리로드(Reload)하지 않아도 서버에 계속해서 요청을 보내는 방식이다. Request를 보내기 때문..