◆졸업 프로젝트◆ Voice Chain
Voice Chain기간
제작기간2020.01 ~ 2020.06
발표2020.06.19
사용기술
사용 기술
AWS
lambda, APIgateway, S3, cloudformation(SAM)
Frontend
React Native(expo), flexbox
Backend
nodeJS
Database
dynamodb, sqlite3
접근 방향녹음의 품질, 네트워크 성능 등을 고려하기 보다는녹음 파일의 무결성을 어떻게 증명할 수 있을지에 대해 고민하고 개발함
개발 동기문제점 : 조작된 녹음 파일로 인한 피해 발생 예시
녹음 파일의 무결성을 다자적으로 공증한다면 무결성 증명 가능
법정에서 증거로 채택 시 효력 강화
블록 체인을 사회적으로 가치 있게 풀어낼 수 있는 개발
구두계약과 같이 대화가 중요한 경우 확실한 증거 보전
관련 연구
기존의 접근 방법
공인된 속기사가 녹음 파일을 한글 문서로 변환
이 과정을 거쳐야만 증거로서 효력이 생김
보완한 점
...
카카오 blind 2019 호텔 방 배정
문제 링크
문제 풀이문제 풀이 방향을 세 번이나 바꿔서 진행했다.
완전 탐색 풀이테스트 케이스는 다 통과하나효율성 테스트에서 통과하지 못함
DP 풀이완전 탐색보다 좋아졌으나 그래도 효율성에서 걸리는 문제가 있음DP특성상 정적 배열을 선언해두므로방 수는 많고 손님이 극히 적을 때 비효율성 때문에 문제가 되었나 싶기도 함
Map을 사용한 풀이Object를 사용해도 되지만 Map에는 Set과 마찬가지로 has 메서드가 있어 편리함이 방법으로 풀어 해결했다
전체 코드123456789101112131415function solution(k, room_number) { const rooms = new Map(); const showMeRoom = (pos) => { while (rooms.has(pos)) { let temp = pos; pos = rooms.get(pos) || pos + 1; rooms.set(te ...
카카오 blind 2019 크레인 인형뽑기 게임
문제 링크
문제 풀이두 가지를 할 수 있어야 한다.
input으로 주어진 board 변수를 N x N 격자 판 전용 2차원 배열에 새로 배치하기.
바구니를 stack으로써 사용하고, 빼내는 조건을 구현하기
전체 코드12345678910111213141516171819202122232425function solution(board, moves) { let answer = 0; const pan = new Array(board[0].length).fill([]).map((v) => []); const outBox = []; while (board.length > 0) { const row = board.pop(); row.forEach((v, i) => { if (v !== 0) pan[i].push(v); }); } while (moves.length > 0) { c ...
programmers sql STRING, DATE
문제 링크
루시와 엘라 찾기1234SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKEFROM ANIMAL_INSWHERE NAME IN ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")ORDER BY ANIMAL_ID
이름에 el이 들어가는 동물 찾기1234SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSWHERE ANIMAL_TYPE = "Dog" AND NAME LIKE "%el%"ORDER BY NAME
중성화 여부 파악하기123456789SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE "Neutered%" OR SEX_UPON_INTAKE LIKE "Sp ...
programmers sql JOIN
문제 링크
없어진 기록 찾기1234SELECT A.ANIMAL_ID, A.NAMEFROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE B.ANIMAL_ID IS NULLORDER BY A.ANIMAL_ID
있었는데요 없었습니다1234SELECT A.ANIMAL_ID, A.NAMEFROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE A.DATETIME < B.DATETIMEORDER BY B.DATETIME
오랜 기간 보호한 동물(1)12345SELECT A.NAME, A.DATETIMEFROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE B.ANIMAL_ID IS NULLORDER BY A.DATETIMELIMIT 3
보호소에서 ...
programmers sql IS NULL
문제 링크
이름이 없는 동물의 아이디1234SELECT A.ANIMAL_ID, A.NAMEFROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE B.ANIMAL_ID IS NULLORDER BY A.ANIMAL_ID
이름이 있는 동물의 아이디1234SELECT ANIMAL_IDFROM ANIMAL_INSWHERE NAME IS NOT NULLORDER BY ANIMAL_ID
NULL 처리하기12SELECT ANIMAL_TYPE, IFNULL(NAME, "No name") AS NAME, SEX_UPON_INTAKEFROM ANIMAL_INS
programmers sql GROUP BY
문제 링크
고양이와 개는 몇 마리 있을까1234SELECT ANIMAL_TYPE, COUNT (*) AS countFROM ANIMAL_INSWHERE ANIMAL_TYPE = "Cat" OR ANIMAL_TYPE = "Dog"GROUP BY ANIMAL_TYPE
동명 동물 수 찾기123456SELECT NAME, COUNT (*) AS countFROM ANIMAL_INSWHERE NAME IS NOT nullGROUP BY NAMEHAVING count >= 2ORDER BY NAME
입양 시각 구하기(1)1234SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNTFROM ANIMAL_OUTSWHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19GROUP BY HOUR
입양 시각 구하기(2)123456789SET @hour = -1;SELEC ...
programmers sql SUM, MAX, MIN
문제 링크
최댓값 구하기12SELECT MAX(DATETIME) AS 시간FROM ANIMAL_INS
최솟값 구하기12SELECT MIN(DATETIME) AS 시간FROM ANIMAL_INS
동물 수 구하기12SELECT COUNT(ANIMAL_ID) AS countFROM ANIMAL_INS
중복 제거하기123SELECT COUNT(DISTINCT NAME) AS countFROM ANIMAL_INSWHERE NAME IS NOT NULL
programmers sql SELECT
문제 링크
모든 레코드 조회하기123SELECT *FROM ANIMAL_INSORDER BY ANIMAL_ID
역순 정렬하기123SELECT NAME, DATETIMEFROM ANIMAL_INS ORDER BY ANIMAL_ID DESC
아픈 동물 찾기1234SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSWHERE INTAKE_CONDITION = "SICK"ORDER BY ANIMAL_ID
어린 동물 찾기1234SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSWHERE INTAKE_CONDITION != "AGED"ORDER BY ANIMAL_ID
동물의 아이디와 이름123SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSORDER BY ANIMAL_ID
여러 기준으로 정렬하기123SELECT ANIMAL_ID, NAME, DATETIMEFROM ANIMAL_INSORDER BY NA ...
Database - SQL vs NOSQL
SQL장점
엄격한 스키마
데이터 무결성 보장
관계는 각 데이터를 중복없이 한번만 저장
단점
RDB이므로 관계를 맺고 있음
JOIN문이 많은 복잡한 쿼리가 생길 수 있음
수평적 확장(Scale out) 어려움, 수직적 확장(Scale up) 가능
수직정 확장 = 하드웨어 업그레이드
도입
relational 데이터가 자주 변경 되는 경우(NoSQL은 여러 컬렉션을 모두 update해야함)
스키마가 확정되어 잘 바뀔 일이 없는 경우(대기업)
NoSQL장점
스키마 없음
데이터 수정이 자유롭고, “필드(컬럼)” 관리도 쉬움
database > collections > documents 구조(mongoDB)
document : key-value형태의 BSON(Binary JSON). 쿼리 속도 빠름
수직 확장, 수평 확장 쉬움
단점
data update 불리함
댓글 컬렉션 => {댓글:A}
글 컬렉션 => ...
