본문 바로가기

분류 전체보기

(249)
페이스 룰렛(2) - 서버 개설 및 카카오톡 플러스 친구 등록 1. 카카오톡 REST API 우리가 목표하는 어플리케이션은 카카오톡 이라는 플랫폼 위에서 작동한다. 카카오톡은 이를 위해 REST API 를 제공한다. REST API 란, 그냥 쉽게 말해서 우리가 카카오 서버에 특정 URL로 어떤 '요청' 을 하면, 카카오 서버는 해당 요청에 대한 '응답' 을 주는 방식이다. 예를 들어, http://www.naver.com/getNickname 이라는 url로 내 아이디를 담은 정보를 보내면 (이를 request 라고 한다.), http://www.naver.com 서버에서 내가 보낸 정보를 검토한 후에, 내 닉네임 정보를 돌려준다. (이를 response 라고 한다.) 아무튼 핵심은, 특정 URL 을 통해서 어떤 함수 요청과 정보를 넘..
데이터베이스 첫걸음 데이터베이스란 기본 기능 데이터의 검색과 갱신 동시성 제어 장애 대응 보안 종류 계층형 데이터베이스 ex. 조직도, 전체구조도 관계형 데이터베이스 ex. 2차원 테이블 NoSQL 데이터베이스 관계형 데이터베이스란 데이터베이스에 얽힌 돈 이야기 초기비용 라이선스료 프로세서 라이선스 사용자 라이선스 서브스크립션료 에디션과 옵션 운영비용 기술지원(유지보수)에 대한 비용 기술지원 수준은 매년 내려간다. 데이터베이스와 아키텍처 구성 역사와 개요 Stand-alone 클라이언트 / 서버 웹 3계층 웹 서버 계층 애플리케이션 계층 데이터베이스 계층 가용성과 확장성의 확보 심장전략 신장전략 DB 서버 다중화 Stand-alone Clustering Shared-Nothing Shared-Disk Active - Act..
페이스 룰렛(1) - 얼굴인식 기반 카카오톡 제비뽑기 1. 개요 이 프로젝트는 2018 서강대학교 해커톤에서 만든 어플리케이션으로, 밥이나 술자리에서 찍는 단체 사진을 가지고 좀 더 재밌게 놀 수 없을까? 라는 생각으로 시작하였다. 단체사진을 올리면, 사진 안에서 얼굴인식을 한 후, 특정 기준을 가지고 하나의 얼굴을 선정해준다면, 밥 값, 혹은 술 값내기에 쓰이기 좋겠다는 생각이 들었다. 이러한 목표를 가지고 차근차근 2박 3일 동안 4명이서 개발하게 되었고, 최종적으로 간단한 프로토 타입을 만들어, 대회에서 Best Engineering 상을 수상하게 되었다. 앞으로 쓰게 될 이 시리즈는 2박 3일동안 해당 어플리케이션을 어떻게 개발하게 되었는지와, 그 간의 이슈와 고민들, 코드 개발과정을 기록하기 위해서다. 처음부터, 다시 개발한다는 생각으로 차근차근 ..
재귀적으로 문제 해결하기 (1) 재귀적으로 문제 해결하기(1) 재귀적으로 문제 해결하기.재귀적으로 문제를 푼다는 것은 무엇일까? 가장 대표적인 예인 피보나치 문제를 떠올려보자.피보나치 수열f(n+2) = f(n) + f(n+1) 를 만족하는 수열을 피보나치 수열이라고 한다. 수로 표현하면1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... 과 같다.n을 입력받아 n번째 피보나치 수를 구하여라.이 문제를 아래와 같이 푼다면 재귀적으로 푼 것이다.long long fibo(int n){ if ( n == 1 || n == 2 ) return 1; else return fibo(n - 1) + fibo(n - 2); }쉽게말해, 함수 내에서 호출된 함수를 또 호출하는 것이 재귀이다.탈출조건이 있어야 한다.( 여기에선 n == ..
미래를 바꾼 아홉가지 알고리즘 1. 검색엔진 매칭과 랭킹 인덱싱 인덱싱 단어 위치 트릭 위치(근접성) 과 랭킹 메타워드 트릭 페이지 랭크 하이퍼링크 트릭 권위 트릭 무작위 서퍼 트릭 웹 스팸, 링크 기반 랭킹 알고리즘 2. 공개키 암호화 공유비밀 덧셈 트릭 디피-헬먼 키 페인트 혼합 트릭 공개키 알고리즘 개인 수, 공개 수 공개 - 개인수 (PPN) 3. 오류 정정 코드 검출과 정정 반복 트릭 리던던시 트릭 심벌 - 코드워드 (해밍 코드) 체크섬 트릭 핀포인트 트릭 (이차원 패리티) 4. 패턴인식과 인공지능 인접이웃 트릭 (KNN) 스무고개 트릭 (의사결정 나무) 인공 신경망 (ANN) 5. 데이터 압축 무손실 압축과 손실 압축 무손실 압축 런-렝스 인코딩 전과 같음 트릭 더 짧은 심벌 트릭 손실 압축 생략 트릭 JPEG 생략 기법 ..
큐 구현하기 만약에, 면접장에서 큐를 구현해보라는 말을 들으면 어떻게 해야할까? 이런 기본적인 자료구조를 바로 짜보라는 질문에 대비하여, 지금 다시 한번 복습해보자. 1. 배열로 구현하기 기본 자료구조를 먼저 정의해보자. 배열을 이용하여 queue의 사이즈를 정하여 선언한다. head, tail 그리고 queue의 현재사이즈를 담는 선언한다. #define QUEUE_CAPACITY 8 int queue[QUEUE_CAPACITY]; int head = 0; int tail = -1; int queue_size = 0; 이제 큐에 원소를 삽입, 삭제하는 함수를 짜보자. void enqueue(int n){ if ( queue_size == QUEUE_CAPACITY ){ printf("queue is full! \n..
개발 공부하며 티스토리하기 당신이 컴퓨터공학과 출신이거나 혹은 신입 개발자 취업 준비를 해왔다면, 수 많은 개발자 분들의 블로그를 보았을 것이다. 나 역시 그러했다. 세상엔 참 천재같으면서도 친절한 사람이 많더라. 알고싶은 것들에 대해 키워드만 넣어 구글링하면, 이미 공부하신 다른 분들의 지식, 그들의 고민과 노력에 대해서 알 수 있게 된다. 나는 단지 후발주자로서 많은 혜택 받고 산다. 이러한 생각과 느낌은 비단 나만 그런 것은 아닐 것이다. 처음에 한 두번은, 그냥 간단히 검색겸 혹은 전공 수업에서 이해 안되는 것들에 대해서 하나씩 검색해보다가, 어느 순간 이런 지식의 공유는 개발자들 사이의 독특한 문화임을 깨닫는다. 그리고 감사하면서도, 너무나 모자른 나 자신이지만 스멀스멀 하나씩 뭔가를 기록하고 공유하고싶은 생각이 들기 시..
연결리스트 구현하기 자료구조를 공부해본 사람은 누구나 연결리스트가 뭔지 알 것이다. 이를 복습차, 코드로 다시 구현해보자.1. 노드 정의먼저 연결리스트의 각 노드의 구조체를 정의해보자. 이는 교과서 처럼 다음과 같다.struct _node{ int key; struct _node *next; } note_t; typedef struct _node node_t;여기서는 int 라고 했는데, int 가 아니여도 좋다. 저 구조체 안에 추가적으로 넣고 싶은 변수를 더 넣어도 된다.next 라는 포인터를 통해 다음 노드와 연결된다.2. 노드 삽입연결리스트에 노드를 삽입한다는 것은 일반적으로 리스트 끝 노드에 노드를 추가하는 것이다.연결리스트는 또한 일반적으로 리스트 앞부분을 가리키는 포인터인 head와 끝을 가리키는 포인터인 ta..