Project

    TIL(30) 21-10-29 : 서버리스 백엔드로 게시판 API 만들기

    TIL(30) 21-10-29 : 서버리스 백엔드로 게시판 API 만들기

    💫 Facts ✅ Lambda와 (+VPC + NAT + SecretsManager + Proxy + S3 +RDS) 연동해서 인프라 구성하기 NAT 게이트웨이를 이용해 외부 인터넷 연결 ✅ Lambda를 이용해 실제 API 만들기 ✅ API를 사용한 게시판 만들기 💫 Findings ✔️ Lambda와 (+VPC + NAT + SecretsManager + Proxy + S3 +RDS) 연동 Lambda 함수에서 RDS 연결은 Dateproxy를 사용하도록 권장해서 Lambda에 VPC 추가를 한다. Lambda 함수에 VPC를 연동하면 외부통신이 되지 않는다. 외부통신을 하기 위해서 지정한 서브넷에 NAT 게이트웨이를 설정한다. 🤔 인프라 구성할 때, VPC와 NAT까지 설정까지하는 이유는 무엇일까?..

    TIL(29) 21-10-28 : 서버리스 백엔드

    TIL(29) 21-10-28 : 서버리스 백엔드

    💫 Facts ✅ EC2로 구성된 기존 아키텍처의 문제점 이해 ✅ 서버리스에 대한 개념 이해 ✅ Lambda와 (+ VPC + SecretsManager + RDS) 연동해서 인프라 구성 💫 Findings ✔️ Cloud란 물리적인 컴퓨터를 사용하지 않아도, 을 통해 를 사용하는 것 ✔️ EC2로 구성된 기존 아키텍처의 문제점 EC2 만으로 백엔드 인프라를 구성해도 관계가 없지만 좀 더 유연한 인프라를 구성하는 데는 분명히 한계가 있다. 왜냐하면, EC2 인스턴스로 백엔드를 구성하면 EC2를 직접 관리해 줘야 한다. 만약 운영하고 있는 서비스에 갑자기 트래픽이 몰린다면? 🤯 EC2를 추가해서 부하를 분산 시켜 줘야한다. 운영 중인 서비스에서는 대응이 힘들 것이다. 😭 확장의 유연성을 위해 어떻게 하면 ..

    TIL(28) 21-10-27 : 서버리스 프론트엔드

    TIL(28) 21-10-27 : 서버리스 프론트엔드

    Facts ✅ NGINX를 이용해 프론트 페이지 관리 ✅ HTTPS를 사용하기 위해 인증서 설치 ✅ S3 정적웹호스팅 기능을 사용하여 서버리스로 프론트엔드 페이지를 관리 ✅ CloudFront와 Certification Manager를 사용하여 HTTPS를 인스턴스 없이 생성 ✅ WAF를 이용하여 좀 더 보안을 강화 ✅ Route53을 이용하여 DNS를 이전

    TIL(27) 21-10-25 : Brute Force, DP, Greedy

    TIL(27) 21-10-25 : Brute Force, DP, Greedy

    Facts ✅ 완전탐색 2문제 ✅ DP 1문제 ✅ Greedy 1문제 Findings Fibonacci 공식을 Recursive와 Dynamic Programming으로 구현시 차이점 Recursive f(n) = f(n-1) + f(n-2) f(1) = 1 f(2) = 1 def fibonacci(N): if N == 1 or N == 2: return 1 return fibonacci(N-2) * fibonacci(N-1) Dynamic Programming f(n) = f(n-1) + f(n-2) f(1) = 1 f(2) = 1 계산이 중복되므로, 계산 값을 자료구조에 저장하여, 두번 이상 벌어지는 로직에 대해 그 값을 쓰게 한다. def factorial(N): dp = [0 for i in ra..

    TIL(26) 21-10-22 : 탐색(힙, 그래프, DFS, BFS)

    TIL(26) 21-10-22 : 탐색(힙, 그래프, DFS, BFS)

    Facts ✅ 힙 2문제 ✅ DFS/BFS 3문제 Findings BST의 평균의 시간이 걸리는 케이스와 최악의 시간이 걸리는 케이스 ✔️ Binary Search Tree 아래의 조건들을 다 만족하는 트리를 말한다. 이진각 노드가 2개 이하의 자식 노드를 갖는 트리 노드가 왼쪽 자식 노드를 가진다면 그 노드가 가지는 값은 그 부모 노드가 가지는 값보다 작다. 노드의 오른쪽 자식 노드를 가진다면 그 노드가 가지는 값은 그 부모 노드가 가지는 값보다 크다. 평균의 시간 복잡도는 O(logN) 최악의 시간 복잡도는 O(N)이다. 그 이유는 Binary Search Tree의 시간복잡도는 O(height)이기 때문이다. 평균의 시간 복잡도는 O(logN)이지만, 이는 트리가 균형잡혀있을 때의 평균 시간복잡이다..

    TIL(25) 21-10-21 : 자료구조 (스택, 큐, 해쉬)

    TIL(25) 21-10-21 : 자료구조 (스택, 큐, 해쉬)

    Facts ✅ 스택 3문제 ✅ 큐 1문제 ✅ 해쉬 3문제 Findings 1️⃣ 스택 스택은 넣은 순서를 쌓아두고 있기 때문에 순서가 필요한 경우에 사용한다. 스택은 파이썬의 list 를 이용해서 스택으로 사용한다. stack = [] # 빈 스택 초기화 stack.append(4) # 스택 push(4) stack.append(3) # 스택 push(3) top = stack.pop() # 스택 pop print(top) # 3! 2️⃣ 큐 큐는 순서대로 처리되어야 하는 경우에 사용한다. Ex) 주문이 들어왔을 때 먼저 들어온 순서대로 처리해야 할 때, 혹은 먼저 해야 하는 일들을 저장하고 싶을 때 큐를 사용한다. 3️⃣ 해쉬 테이블 ✔️ What? F(key) → HashCode → Index → V..

    TIL(24) 21-10-20 : 구현, Linked List, 이진 탐색, 재귀

    TIL(24) 21-10-20 : 구현, Linked List, 이진 탐색, 재귀

    Facts ✅ 구현 11문제 ✅ Linked List 2문제 ✅ 이진 탐색 3문제 ✅ 재귀 1문제 Findings 배열과 링크드 리스트의 장단점 배열 배열은 크기가 정해진 데이터 공간이다. 인덱스를 통해, O(1)내에 접근할 수 있다. 배열은 원소를 중간에 삽입/삭제하려면 모든 원소를 다 옮겨야 한다. 최악의 경우, 배열의 길이 N만큼을 옮겨야 하므로, O(N)의 시간복잡도를 가진다. 링크드리스트 링크드리스트는 크기가 정해지지 않는 데이터 공간이다. 포인터로 이어주기만 하면, 자유자재로 늘어날 수 있다. 링크드리스트는 특정 원소에 접근하려면 포인터를 따라 탐색해야 한다. 최악의 경우에는 모든 화물 원소를 탐색해야 하므로 O(N)의 시간 복잡도를 가진다. 링크드리스트는 원소를 중간에 삽입/삭제 하기 위해서..

    TDP 2차 회고록 (2021.10.20)

    TDP 2차 회고록 (2021.10.20)

    🚧 Keep 📌 느슨하지만 Deadline 하지만 Deadline = Deadline 개발자는 끈기의 아이콘, 그 누구에게도 내 작업 영역을 뺏길 수 없다! 🙋🏻 "조금만 더 하면 될 것 같아요!" 🤗 "네! 조금 더 힘내요! 파이팅! " 🤦🏻‍♂️ "조..조금만 더" 🤔 "흠.." 협업에 있어서 가장 중요한 부분은 "실력", "loc"가 아니에요! 📈 빠르게 성장하는 개발자의 Uncheck_list! ◻️ 혹시 내가 rush hour, deadlock 제공자!? ◻️ 회의 시간은 내가 맡은 부분 브리핑하는 시간이지! ◻️ Convention? 귀찮아 내 스타일! 우리 팀은 짧은 deadline, 반납 횟수를 반영하며, 반납 기간을 "독촉"하기 위해 찐한 관리로 매일 아침 To do list 점검했다. ..

    TIL(23) 21-10-19 : 2차 프로젝트 완료🚀, 팀원들과 함께 되돌아보며

    TIL(23) 21-10-19 : 2차 프로젝트 완료🚀, 팀원들과 함께 되돌아보며

    💫 2차 프로젝트 때, 새롭게 구현한 기능 회원가입 CRUD, JWT 인증 방식으로 로그인 구현 Notification TIL 글 좋아요 UP 기능 Comment (본인 댓글만 삭제할 수 있게, 댓글 달 수 있게) My Profile Update 💫 기술적으로 새롭게 배운 것 ✅ JWT 인증 방식으로 로그인 구현 일반적인 데이터를 다음 페이지로 넘겨주는 것을 넘어 사용자의 id와 password를 이용해 검증된 사용자에게 발급되는 token을 이용하였고, 보안적인 이슈에 대한 고민의 순서를 뒤로 늦추기 위해 로컬, 세션에 저장하지 않고 일단 쿠키에 넣었다. token을 쿠키나 storage에 저장하지 않는다면 문제가 생긴다. 왜냐하면, 페이지가 여러 개면 변수가 share 하지 않기 때문이다. 우리는 t..

    TIL(22) 21-10-18 : 배포 그리고 보안의 중요성

    TIL(22) 21-10-18 : 배포 그리고 보안의 중요성

    Facts ✅ Server에 MongoDB Auth 설정 ✅ Server에 configuration value 설정 Feelings 우리 프로젝트에 보안 이슈가 생겼다. 😂 현업 때 겪지 않음에 감사하며, 미리 보안 이슈에 철저히 대응해야겠다고 명심하게 되었다. 우리의 서버 Database는 랜섬웨어로 다 날라갔다. 그래서 서버부터 다시 구축하게 되었다. 다같이 날밤새며 🥱 보안 이슈를 해결하고, 서버에 배포하는 것까지 완료했다. 보안 이슈를 해결하기 위해, 우선적으로 Configuration Value 처리가 안 되어 있는 부분이 있는지 체크해 주었다. 보안을 강화하기 위해, 방화벽, SSL 인증서 등 여러 요소들을 적용하는 것도 함께 생각해보기로 했다.