분류 전체보기

[AWS S3/Node.js] 안드로이드에서 서버로 이미지 전송하기
지금까지 Aniverse 프로젝트를 진행하면서, 클라이언트 ↔ 서버간 이미지를 전송할 때, 임시로 깃허브 이슈를 통해 생성한 이미지 링크를 전송하는 방식으로 진행했다. (ex. 140559373-3d9b5f13-e1e4-4a51-80ae-b9cdf72769eb.png (474×440) (user-images.githubusercontent.com)) 이번에 사용자 휴대폰의 갤러리에서 직접 사진을 선택하여 서버에 올릴 수 있도록 수정했다. Amazon에서 제공하는 bucket을 이용하였고, 다음 그림은 우리가 개발하고자 하는 방식이다. F) 클라이언트에서 이미지를 얻어 base64 방식으로 인코딩 F → B) base64로 인코딩된 문자열을 서버에게 전송 B) 문자열을 디코딩하여 이미지 얻어내기 얻어낸 이..

[Database/MySQL] Youtube 유튜브 한방쿼리 작성
MySQL + Node.js로 Youtube를 따라 만들며 공부했을 때 직접 설계했던 ERD이다. 💡 영상 조회 select v.videoName, v.videoPlus, u.userName, up.userProfile, # (select count(vv.videoViewIdx) as viewNum # from videoview vv left join video v on vv.videoIdx = v.videoIdx # group by v.videoIdx) as viewNum, # 조회수 ifnull(vieww.viewNum, 0) as viewNum, (select count(subUserIdx) from subscription s group by s.userIdx having s.userIdx = ?)..
[TIL] 2022-01-12
😊 Today I Learned 로컬호스트에 몽고디비 설치 후 데이터그립 연결고민만 해오다가 드디어 NoSQL을 사용해보게 되었다. 아직은 매우 낯설다😶 수정된 인자들, API의 효율성을 고려하여 데이터베이스 수정없앨 수 있는 테이블들을 삭제하고, 순서대로 테이블에 접근하기 쉽도록 데이터베이스를 대폭 수정하였다.흑.. 이번에 프로젝트를 진행하면서, 데이터베이스를 설계할 때 필요한 칼럼들과 테이블간의 조인 뿐만아니라 함수 내에서 데이터들을 삽입하거나 꺼내올 때 연관된 테이블간의 선후관계또한 고려해주는게 중요하다는것을 깨달았다. Aniverse 몽고디비로 데이터베이스 다시 설계 NoSQL버전 데이터베이스는 임베디드 방식을 사용하여 다른 테이블과의 참조관계를 최소화시키고, 5~6개의 테이블만으로 데이터들을 저..
[Design Pattern] Command Pattern
💡 About Command Pattern 커맨드 패턴은 주어진 기능들을 캡슐화함으로써 서로 다른 요청들을 실행할 수 있도록 하는 패턴이다. 간단히 말하자면 객체의 행위(메소드)를 클래스로 만들어 캡슐화하는 패턴인데, A 객체에서 B 객체의 메소드를 실행하려면 B 객체를 참조하고 있어야하는 의존성이 발생한다. → 커맨드 패턴을 적용하면 이런 의존성을 제거하고, 기능들을 수정, 추가할 때 확장성과 유연성이 좋아진다. 💡 Command Pattern Structure Invoker → 기능의 실행을 요청하는 호출자 클래스 Command → 실행될 기능에 대한 인터페이스 실행될 기능을 execute 메소드로 구현 ConcreteCommand → Command 인터페이스 구현 Receiver → Concrete..
[Design Pattern] Adapter Pattern
💡 About Adapter Pattern Adapter Pattern은 인터페이스와 인터페이스간의 호환성 문제를 해결해주는 패턴이다. 콘센트에 사용하는 그 어뎁터의 역할과 동일! 호환되지 않는 인터페이스를 사용하는 코드들은 Adapter Class를 만들어 활용할 수 있다. My existing system → Adapter → Vendor class Object Adapter와 Class Adapter로 구현방법이 나누어진다. 인터페이스가 호환되지 않는 문제가 발생해도 Adapter Pattern을 통해 기존의 코드를 수정하지 않고도 문제를 해결할 수 있다. 💡 Adapter Pattern Structure Object Adapter Pattern Client → Target Interface를 요구..
[TIL] 2021-11-09
😊 Today I Learned 하루종일 Aniverse API 작성 후 연결 😢 Today's error DB 외래키 제약조건을 위반하여 생기는 에러인데, 테이블들의 관계를 생각하지 않고 값들을 한꺼번에 insert해서 생기는 문제이다. post API를 설계할 때 정보들이 DB에 들어가는 순서와 테이블간의 join관계를 고려하여 insert쿼리를 나누어주어야 한다. adoptController exports.postAdoptUserInfo = async function (req, res) { const {animalIdx, userIdx, contactName, contactPhoneNum, adoptComment} = req.body; try{ var adoptListIdx = await adopt..
[TIL] 2021-10-11
😊 Today I Learned Aniverse ERD설계 경소톤에서 구현하게될 "Aniverse"의 디비를 설계해보았다. 17개정도의 테이블을 설계했는데, 이미 출시된 어플을 보고 설계하는게 아니라 어려웠지만 재미있었다. 다시 생각할 부분 앱의 흐름도에 따라 DB에 데이터가 들어갈 순서 다시 생각해서 테이블 수정 MySQL 데이터타입 공부 젤리 지급 알고리즘을 쿼리에 넣을지 js코드에 넣을지 배송지 정보 입력 부분 사진 테이블 (비정형 데이터..) 수정 😢 Today's error 😅 Comment
[TIL] 2021-10-09
😊 Today I Learned 1. 자료구조 → 원형 큐, 덱 구현 - 1학기 알고리즘 스터디에서 배운 큐와 덱을 원형 큐 클래스를 통해 직접 구현해보고, 이 클래스를 활용하여 DFS와 BFS 함수도 작성해보았다. 2. key, value 형태의 NoSQL 공부 경소톤 코멘트로 비정형 데이터에 대한 설계는 요즘 유행하는 key-value형태로 설계하는게 어떻겠냐는 의견을 주셔서 알아보았다. 키-값 데이터베이스 ↔ NoSQL NoSQL의 Key-Value Database는 저장과 조회라는 가장 간단한 원칙에 충실한 데이터베이스 테이블간 조인을 고려하지 않는다 → 외래키, 제약조건들이 필요없다. 간단한 데이터 모델을 대상으로 데이터를 자주 읽고 쓰는 어플리케이션에 적합하다. SQL을 사용하면 좋은 경우 관..
[Design Pattern] Observer Pattern
💡 About Observer Pattern 옵저버 패턴은 간단히 얘기하자면 어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 디자인 패턴이다. pull → 데이터를 받아온다 push → 데이터를 입력한다 기본적으로 데이터의 변경값을 반영하거나 추가할 때, pull보다 push를 통해 처리해주는게 더 빠르다는 아이디어에서 시작된 패턴 ! One-To-Many Relationship → 하나의 신문사에서 구독자를 계속 수정하고, 추가해준다고 생각하면 쉽다. 💡 Observer Pattern Structure Subject → 신문사 역할, ConcreteSubject의 상위 클래스 subject 객체에서 데이터를 관리한다. 데이터가 달라지면 observer에게 notify를 보낸다. Obs..

[Linux] 리눅스 명령어 정리
💡 Fundamental Concepts of Linux Kernel (커널) : The Core of Operating System OS (운영체제)는 핵심적인 부분을 담당하는 커널과 여러 다른 프로그램들(쉘, GCC, 패키지 등)로 이루어진다. linking, unlinking을 왔다갔다 하는 동적 소프트웨어는 주로 커널모드에서 실행된다. Shell (쉘) : 명령어 해석기 명령들을 읽어들이고 인터프리터에 전달한다. 리눅스에서는 GNU라는 쉘을 사용한다. Programs (프로그램) : 살아움직이는 객체 어떻게 수행되는지에 대한 인스트럭션들의 집합이다. 소스코드와 바이너리(machine language) 형태로 나뉜다. Processes (프로세스) 프로그램 실행 객체이다. 프로세스마다 할당된 가상 ..
[Python] 백준 #1966 프린터 큐
1966번: 프린터 큐 (acmicpc.net) 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 💡 알고리즘 자료구조, 큐 💡 접근방법 원소들을 Queue의 가장 뒤에 재배치하고, 가장 앞에 있는 원소는 pop해야한다. → 앞뒤로 pop, append가 자유로운 deque 사용 주어진 예시를 직접 그려보면, 두가지를 신경써서 구현해야 함을 알 수 있다. M번째 수가 몇 번째로 큰 중요도를 갖는가 → deque의 0번째 원소가 max인지 확인 M의 중요도와 같은 중요도가 있는가 → count변수로 해결 💡 코드 f..
[TIL] 2021-08-29
😊 Today I Learned 1. Youtube API 명세서 수정 validation 에러처리 100번대로 수정 일반적 에러는 보편적으로 100~500번대 사용 데이터베이스 에러 → 4000번대 사용 서버 에러 → 5000번대 사용 Response 에러 → 3000번대 사용 Request 에러 → 2000번대 사용 RESTful API에 맞도록 URL이름, 메소드 수정 Dao에서 값이 수정되는 쿼리가 실행되더라도, 삭제 관련 API일 경우에는 메소드를 PATCH가 아닌 DELETE로 변경 메소드가 DELETE, PATCH인 경우 URL에 /delete/, /patch/ 삭제 API 내용에 맞게 주어와 동사 수정 전체적으로 가독성이 좋아지도록 수정 😅 Comment 교내 해커톤 대회 경소톤 회의를 했..