본문 바로가기

2017/089

[자료구조 알고리즘] 리스트#1 - ADT, ArrayList js구현, syntax tip [리스트 특징]- 1열에 나란히 데이터를 저장함 : 1줄로 연결된 형태, 탐색- 중복된 데이터를 허용함 - 데이터 참조가 쉬움, 내부적으로 index를 기반으로 first / next 동작 - 삭제 과정에서 이동이 빈번하게 일어남, 외부적으로는 index를 기준으로해서 옮기는 것이 아니라 first / next 함수를 호출해서 cursor를 움직임=> 탐색이 빈번하게 일어나는 기능에서 자료를 저장하는 구조로서는 부적합 [리스트 구현방법에 따른 종류]- 주의할 점 : 구현 방법에 따라 나눈 것이지 ADT가 다른 것이 아님- 순차리스트 : 배열을 가지고 구현한 리스트- 연결리스트 : 메모리 동적할당을 가지고 구현한 리스트 [C로 배운 리스트 자바스크립트로 구현하기]- 어차피 ADT가 달라지는 것도 아니고, .. 2017. 8. 26.
[자료구조, 알고리즘] 재귀호출 - 헷갈리면 모르는것 [특징 및 이해할 때 필요한 개념](1) 재진입 개념이 아닌 복사본 개념 : 스택에 쌓인 함수는 각각의 함수(2) 반복 : 이전의 연산에 기반해서 현재의 것을 연산할 때 사용 : 함수에서 함수를 호출=> 동일 패턴 반복 (3) 문제 -> 논리 세우기 -> 코드화 / 패턴화(함수, 0 - 1 - ---- - n-1 - n - n+1)(4) 메모리(코드) - CPU(연산) : 언어 런타임 별 메모리 할당 구조 살펴보기(5) 함수 호출 관계 - 순서 한번쯤 따져보기=> 호출한 함수가 모두 끝난 후(return) 되돌아와서 실행=> 수학의 함수 개념 : 정의역, 공역, 치역(특정 값을 도출해내기위한 패턴) (6) 성능상 좋지않으나(재귀 두갈래 이상 out of memory 조심) 간결한 코드 [예시](1) 팩토.. 2017. 8. 21.
[node.js] 프로젝트를 마무리하면서 - 정리, 그리고 해커톤 [서비스 URL]- http://www.politics-watch.com/ [기술 스택]1) 웹 서비스 : Express(nodejs), firebase(auth) - AWS EC2 2) 크롤링 : request, cheerio, mecab-ya(nodejs) / crond - AWS EC2 3) DB: mysql server(AWS RDS) [프로젝트 관련 지식](1) 목표, 컨셉, 디자인, 기능, 사용자 기능 사용 단계, 개발 순서 등 모든 계획을 짜놓은 뒤(초기 계획) 개발(2) 버젼 계획이 있어야함 : 초기 버젼 계획을 세우고 추후 생각나거나 기획된 기능은 다음 버젼, 개발 단계에 돌입했다면 최대한 수정없이(3) 무작정 개발보다는 프로젝트 단계를 지켜나갈 것 : 필요한 정보 설계(DB) -> 기능.. 2017. 8. 20.
[node.js] 프로젝트 개발 일지 - 댓글 CRUD + ajax [지금까지]- 설명에 대한 댓글쓰기, 보기(C / R) 기능은 구현되어져있음 - Update / Delete 기능 구현하기 : C, R과 마찬가지로 ajax 서버콜 [조건]- 작성한 유저와 현재 유저가 같을 때 : user_id(유저를 구별할 수 있는 고유값)로 비교한 후 => comment 테이블 레코드마다 user_id를 가지고 있음 => 업데이트, 삭제 쿼리를 날릴 때 WHERE 2개 조건 : AND 조건(유저가 맞고, 삭제하려는 코멘트의 id가 맞아야함) [구현하기]1) 댓글 레이아웃 수정 : 이름 / 내용 / 버튼 2개(수정하기 토글, 삭제 버튼) 2) 수정하기 토글 : 클릭하면 댓글 내용 수정할 수 있도록 DOM 교체 : /comment 컨트롤러 내 함수 만들기 => 토글 클릭 : 댓글 작성한.. 2017. 8. 11.
[node.js] 프로젝트 - 핫키워드 + 댓글 한번에 뽑기 : mysql 테이블 join [댓글 조회기능]- 프로젝트에서 사용하는 테이블(1) 키워드 => mysql 데이터타입에 관한 문서 : https://dev.mysql.com/doc/refman/5.5/en/data-types.html - id MEDIUMINT - 키워드들 VARCHAR - 키워드설명 VARCHAR - 저장된시간 DATE (2) 댓글 : 현재 게시되어져있는 키워드 랭킹에 대한 유저들의 반응 => 1개의 키워드 랭킹이 여러개의 댓글을 가지는 관계(1:N) => 키워드 테이블에 저장된 레코드의 id를 댓글 레코드를 저장할 때 같이 저장함 : 저장된 댓글 레코드는 어떤 키워드 레코드와 연결되어있는지(쿼리문 - join) - id MEDIUMINT - 유저명 VARCHAR - 코멘트내용 VARCHAR - 키워드테이블명_id .. 2017. 8. 8.
[node.js] 프로젝트 - 로그인 구현 : 파이어베이스 [시작하기]1) 파이어베이스 프로젝트 생성 -> 콘솔 -> Authentication -> 페이스북 활성화 -> 인증 토큰 리디렉션 URL 복사 2) 페북 개발자 페이지 -> 프로젝트 생성 -> 콘솔 -> 제품 추가 - 로그인 -> 로그인 메뉴 - 설정탭 - 인증 토큰 리디렉션 URL 붙여넣기 - 저장 => 정해진 URL로만 인증토큰이 전송됨 : 파이어베이스 API 키가 노출되더라도 큰 피해가 없지만… 3) 페이스북 프로젝트 대시보드 -> 앱 ID / 시크릿 코드 복사 -> 파이어베이스 Auth 페이스북 대시보드에 붙여넣기 4) 프로젝트에서 파이어베이스 API키로 파이어베이스를 이용하려면 Authentication 대시보드 > 승인된 도메인에 프로젝트 도메인을 추가해야함 => https://support.. 2017. 8. 5.
[node.js] 프로젝트 - 테스트 시간 기다리면서 여태 추가한 내역 [mysql]1) centos/rhel repo 추가 : rpm으로 2) RDS Instance 접속 : 보안설정해두기(아무나 접속 가능하지않도록) 3) 파싱한 자료 분석 -> mysql 저장 => mysql 모듈 사용 => 테이블 생성 쿼리 : word 데이터베이스 > best 테이블 CREATE TABLE best (id MEDIUMINT NOT NULL AUTO_INCREMENT, words VARCHAR(50) NOT NULL, description VARCHAR(400) DEFAULT "", time DATE, PRIMARY KEY(id)); 4) 어플리케이션 인스턴스에서는 가장 최근 것 하나만 빼오도록 쿼리 작성, mysql 접근=> 환경변수 undefined 때문에 몇시간을…버렸군…. : p.. 2017. 8. 3.
[node.js] 프로젝트 - pm2 : 노드 어플리케이션 프로세스 유지 [정치 핫키워드 어플리케이션 프로세스 매니저 - pm2] [pm2]- 노드 어플리케이션 프로세스 매니져 모듈 - 서버(express) 온을 일일이 시키지않더라도 계속해서 돌아가도록 설정할 수 있음 - express 코드를 수정할 경우 서버를 껐다켜지않더라도 리로드할 수 있음 : 업데이트 사항 반영 - npm 으로 설치 [pm2 사용하기](0) 도움말 : $pm2 -h (1) 시작 : $pm2 start ./bin/www (2) 리스트 조회 : $pm2 list => 자세히보기 : 리스트 조회 후 id나 App name 기록 > $pm2 show [id | name] => pm2 monit : 앱의 cpu, 메모리 점유율 보여줌 => 모니터 관련 어플리케이션 : $pm2 register (http://do.. 2017. 8. 1.
[node.js] 프로젝트 - 고정 IP, 네임서버 변경, 도메인 연결, 프록시 서버 [어플리케이션 고정 IP 발급, 네임서버 도메인 매칭]1) instance management page > Elastic IPs 발급 2) 발급받은 고정 IP 선택 > Actions > Associate address > 인스턴스와 연결 3) 네임서버 설정 : 구매한 도메인이 고정 IP(어플리케이션 컴퓨터, 서비스)를 가리키게 만들기 => AWS Route53 : AWS DNS 서비스 - https://console.aws.amazon.com/route53/home?region=us-east-1#DomainListing: => AWS에서 도메인을 구매해서 바로 Route53 사용해도되고, 외부 업체에서 도메인 구매하고 외부 업체 네임서버를 사용하면됨 => 닷홈에서 도메인을 사고, 도메인 네임 서버를 AW.. 2017. 8. 1.