오몰내알 데엔

오늘은 몰라도 내일은 알자!
개발/Git&Github

git checkout시 발생하는 오류 error: Your local changes to the following files would be

❗에러 git checkout 시 발생하는 에러 📑에러 내용 error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches. Aborting ❓발생 이유 다른 브랜치로 이동하기 전 작업하고 있던 브랜치에서 변경사항이 있는데, 제대로 커밋(저장)하지 않아 발생하는 오류이다. 💡해결 방법 사실 오류 메시지에 해결 방법이 이미 나와있다. Please commit your changes or stash them before you switch branches. 해당 브랜치를 커밋(commit)하거나 ..

프로젝트/알라딘 중고책 프로젝트

알라딘 중고책 프로젝트 (6) - 프로젝트 결과 & 회고

지난 포스팅 - 알라딘 중고책 프로젝트 (5) - superset 프로젝트 코드 - https://github.com/kgw7401/used_book_project 이제 프로젝트의 최종 결과물을 살펴보고, 지금까지 달려온 과정을 회고하면서 부족한 부분은 무엇인지, 다음 프로젝트에서 보완할 수 있는 점은 무엇이 있는지 살펴보려고 한다. 프로젝트 결과물 프로젝트의 최종 결과물이 어떤지 한 번 보도록 하자. 어떤 방식으로 프로젝트 결과물을 게시할까 고민하다가 전체적인 모습을 보여주는 것이 좋겠다는 생각에 시연 영상을 보여주는 방식을 선택했다. 대시보드는 크게 아래와 같은 차트를 가지고 있다. (차트 이름, 차트 종류) 전체 중고책 수(big_number_total) 필터(filter_box) 카테고리별 중고책..

알고리즘

다이나믹 프로그래밍

다이나믹 프로그래밍은 메모리 공간을 약간 더 사용함으로써 연산 속도를 비약적으로 증가시킬 수 있는 알고리즘이다. 다만 항상 다이나믹 프로그래밍을 사용할 수 있는 것은 아니고, 아래의 조건을 만족시킬 때 사용할 수 있다. 큰 문제를 작은 문제로 나눌 수 있다. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 위의 조건은 대부분 점화식 형태를 가지고 있기 때문에 다이나믹 프로그래밍인 것 같다면 문제에 알맞는 점화식을 떠올리는 것이 좋은 방법이다. 메모이제이션 메모이제이션은 다이나믹 프로그래밍을 구현하는 방법 중 하나로, 한 번 구한 결과를 메모리 공간에 메모해두고, 같은 식을 호출하면 메모한 결과를 그대로 가져오는 기법이다. 탑다운과 보텀업 탑다운 방식: 재귀 함수를 이용하여 큰 문제를 ..

프로젝트/알라딘 중고책 프로젝트

알라딘 중고책 프로젝트 (5) - superset

저번 포스팅 - 알라딘 중고책 프로젝트 (4) - RDS, EC2 구축하기 서비스를 위한 인프라는 모두 구축했고, 데이터도 적재했으니 이것들을 이용해서 이제 시각화를 해볼 차례이다. 시각화를 위한 도구는 무엇으로 할까 고민하다 오픈소스에 사용법도 간단한 Superset을 최종으로 선택했다. 각설하고 본격적으로 슈퍼셋을 설치하고 실제 시각화하는 과정까지 이야기해 보도록 하겠다. Superset 설치 우선 슈퍼셋을 어디에 설치할지가 고민이었다. 첫번째 후보는 로컬이었는데, 컴퓨터에 쓸 데 없는(?) 프로그램이 설치되는 것을 좋아하지 않아 탈락하였다. 결국 EC2에 설치하기로 하였는데, 선택한 가장 큰 이유는 일회용으로 사용할 수 있다는 것이었다. 사실 이 부분은 도커로 설치하면 똑같이 일회성으로 사용할 수 ..

알고리즘

범위를 반씩 좁혀가는 이진탐색

이진탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다. 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어든다는 점에서 시간 복잡도가 O(logN)이다. def binary_search(array, target, start, end): while start target: end = mid - 1 else: start = mid + 1 이진 탐색 알고리즘은 가급적 외우고, 탐색 범위가 2000만을 넘어가면 접근해보는 것을 권한다.

프로젝트/알라딘 중고책 프로젝트

알라딘 중고책 프로젝트 (4) - RDS, EC2 구축하기

저번 포스팅 - 알라딘 중고책 프로젝트 (3) - 데이터 적재하기 | 코드 완성 이번 포스팅에서는 본격적으로 코드가 돌아갈 서버(EC2)와 DB(RDS)를 구성했던 과정을 작성하려 한다. 생각보다 오류가 많았어서 ㅠㅠ 이 과정에서 내가 했던 삽질도 상세하게 적어보려고 한다. 먼저 RDS부터 시작해보자!🚌 RDS 구축하기 데이터베이스 생성 어떤 걸 먼저 구축할까 고민하다 일단 DB에 데이터가 잘 적재되는지 테스트하는게 먼저일 것 같아서 RDS를 먼저 구축하기로 결정하였다. 사실 RDS DB를 생성하는건 그리 어렵지 않아서 생략할까 하다가 그래도 내가 했던 과정을 자세하게 밟아나가면 나 또한 큰 공부가 되지 않을까 하는 생각에 DB 생성부터 상세하게 글을 작성하기로 하였다. 우선 RDS는 PostgreSQL..

알고리즘

기준에 따라 데이터를 정렬

선택 정렬 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복한다. 시간 복잡도는 O(N^2)이다. 선택 정렬을 이용하는 경우 데이터 개수가 10000개 이상이면 속도가 급격히 느려진다. for i in range(n): min_index = i for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i] 삽입 정렬 정렬하려는 데이터 앞 쪽의 정렬되어 있는 데이터 리스트에서 적절한 위치를 찾은 뒤에, 그 위치에 삽입된다. 다시 말해 특정한 데이터..

알고리즘

탐색 알고리즘 DFS/BFS

사전 지식 인접 행렬: 2차원 행렬로 그래프의 연결 관계를 표현하는 방식 ex. [[0, 7, 5], [7, 0, INF], [5, INF, 0]] 인접 리스트: 리스트로 그래프의 연결 관계를 표현하는 방식 ex. [[(1, 7), (2, 5)], [(0, 7)], [(0, 5)]] 인접 행렬은 메모리를 잡아먹지만, 그만큼 탐색 속도가 빠르고, 인접 리스트는 메모리를 효율적으로 쓸 수 있지만, 연결된 데이터를 하나 씩 확인해야 하기 때문에 속도가 느리다. DFS 그래프에서 깊은 부분을 우선적으로 탐색하는 깊이 우선 탐색 알고리즘이다. 스택과 재귀를 이용하여 구현하고 동작 과정은 다음과 같다. 아래의 동작 과정을 꼭 숙지하자!! 탐색 시작 노드를 스택에 삽입 후 방문 처리 스택의 최상단 노드에 방문하지 않..

프로젝트/알라딘 중고책 프로젝트

알라딘 중고책 프로젝트 (3) - 데이터 적재하기 | 코드 완성

저번 포스팅 - 알라딘 중고책 프로젝트 (2) - 데이터 추출하기 중복될 수 있는 데이터를 적재하는 방법 데이터를 추출했으니 이제 추출한 데이터를 DB에 적재해야 한다. 그런데 여기서 주의해야 할 점이 한 가지 있었다! 이 프로젝트에서는 새로 들어온 중고책 데이터를 사용한다. 하지만 얼마의 주기를 가지고 매번 어느정도의 데이터가 생성되는지는 알 수 있는 방법이 없기 때문에 데이터가 중복될 가능성이 있다. 조금 더 쉽게 설명해보도록 하자. 내가 지금 1000개의 데이터를 추출한다고 가정하자. 그러면 DB에는 1000개의 데이터가 적재될 것이다. 시간이 지나고 6시간 뒤 다시 1000개의 데이터를 추출하고 적재해보자. 그러면 DB에는 2000개의 데이터가 존재할까? 정답은 아닐 수 있다이다. 만약 6시간 동..

알고리즘

아이디어를 코드로 바꾸는 구현

코딩 테스트에서 구현은 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 의미한다. 구현은 언어의 문법을 잘 이해하고 경험이 있어야만 바로 떠올릴 수 있다. 구현은 크게 모든 경우의 수를 다 계산하는 완전 탐색과 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야 하는 시뮬레이션으로 나눌 수 있다. 구현 시에는 메모리나 시간에 대해 특히 조심해야 한다. 메모리는 사용량 제한보다 더 적은 크기의 메모리를 사용해야 한다는 점 정도만 기억하고, 시간은 1초에 2000만 번의 연산을 수행한다고 가정하면 안정적이게 풀 수 있다. 구현은 문제 길이가 굉장히 긴 편이지만 고차원적인 사고력을 요구하지는 않기에 파이썬 문법에 익숙해진다면 다른 문제에 비해 오히려 쉽게 풀 수 있다. 핵심: 파이썬 문법..

오몰내알
오몰내알