
저번에 서버리스 컴퓨팅에 대한 포스팅을 썼었다. 저 땐 사실 서버리스로 딱히 뭘 만들어보겠다는 생각은 없었고 그냥 "대학원 시절에 서버리스란 개념을 배웠었는데 직접 개발을 해보진 못했었지, 리뷰하면서 한번 람다 써보기나 해볼까" 같은 느낌으로 쓴 거였다. 그런데 람다를 써보면서 생각을 해보니까 전에 만들었던 (정확히는 얼추 만들긴 했는데 '완성' 하진 않고 있었던) EZ2AC 성과사진 분석기를 람다 기반으로 바꿔서 다시 만들면 더 낫지 않을까, 라는 생각이 들더라. 왜냐면 람다 같은 서버리스 컴퓨팅 서비스들의 특징이 종량제 과금, 그러니까 '요청을 보낸 횟수만큼만' 과금을 한다는 것인데, 이 성과 분석기라는게 많은 사람들이 쓰는 것도 아니고 딱 1명을 위해서 만들어진 서비스이기 때문에() EC2 서버를 ..
대부분의 프로그래밍 언어에서 기본적으로 제공하는 sort 함수를 사용하면 일반적인 숫자나 문자열이 들어있는 배열을 정렬하는 것은 쉽다. 하지만 여러 속성이 들어있는 '객체' 들이 들어있는 배열이 있다면 어떻게 정렬할까? 예를 들어서 '학생' 클래스에는 학번, 이름, 전화번호, 성적이라는 속성들이 들어있는데 이 학생들을 성적순으로 정렬해야 한다면? 파이썬에서는 lambda 표현식이라는 걸 사용하면 dict를 값 기준으로 정렬한다던지 하는 것이 가능했었다. res = sorted(genres_plays.items(), key=(lambda x: x[1]), reverse = True) 자바에서도 비슷한 일을 해야 할 일이 생겼다. '기록' 이라는 클래스가 있다. '기록' 클래스의 속성으로는 제목, 레벨, 난..
- Ajax 브라우저의 새로고침 없이 서버로부터 데이터를 얻어오는 방법 부스트코스 2-2에서도 잠깐 다뤘었으니 다시 보고 오자. > 왜 비동기 통신이라 하는가? 페이지를 쭉 그리다가, 서버로부터 데이터를 추가로 요청하는 코드가 나오면 send() 로 요청을 보내놓고 나머지 작업을 수행한다. function ajax(data) { var oReq = new XMLHttpRequest(); oReq.addEventListener("load", function() { console.log(this.responseText); }); oReq.open("GET", "http://www.example.org/getData?data=data"); oReq.send(); } addEventListener 안에 있는 f..

100일 앱에 이은 남자친구를 위한 (물론 내 개인적인 공부를 위한 것이기도 하다) 프로젝트 2탄. 이지투는 그 파란만장한 역사 (...) 덕에 현재 제대로 돌아간다고 말할 수 있는 아케이드 리듬게임 중에 거의 유일하게 네트워크 개인화 시스템을 지원하지 않는 게임이다. 그래서 기록을 저장하고 남들이랑 공유하기 위해서는 직접 사진이나 영상을 찍어서 남기는 방법밖에는 없다. 남자친구가 이지투를 주로 하는데, 핸드폰 사진함에 '이지투 성과' 라는 폴더를 만들어서 성과 사진을 거기 모아서 관리를 하고 있더라. 딱 봐도 불편해 보이는데, 예전에 플레이했던 곡 기록을 찾으려면 쭉 내려가면서 사진 썸네일을 대충 보고 이건가 하고 눌러봐야 한다. 특히 같은 곡의 기록을 갱신했을 경우엔 예전 사진을 지우는데, 이걸 하기..
- DOM? Document Object Model. 그러니까 HTML을 구성하는 각 요소들. 자바스크립트의 DOM API를 이용하면 HTML 요소를 찾고 동적으로 변경시킬 수 있다. - document. 으로 접근가능한 메서드들 (링크) document.addEventListener() document.getElementById() document.getElementByName() document.querySelector() document.createElement() - element. 으로 접근가능한 메서드들 (링크) element.childNodes() element.classList() element.firstChild() element.contains() element.innerHTML - 유..

- JavaScript에서의 배열 > 선언: var a = []; > 한 배열 안에 모든 타입의 원소가 들어갈 수 있다. 숫자, 문자, 배열 (-> 2차원 배열), dict 등... > 선언할 때 길이를 정해주지 않는데... a[500] = 10; 이렇게 해줘도 에러가 발생하지 않고 알아서 배열 길이가 501이 된다. 이 상태에서 정의해주지 않은 중간 값들 (a[250] 이라던지) 을 띄워보면 undefined가 뜸. (아무 쓰레기값이 뜨는게 아니다) - 유용한 배열 메서드들: 자바의 ArrayList 메서드들이랑 크게 다르지 않다 > push() > indexOf() > join() > concat() 주의: 메서드에 따라 원래 배열을 조작하는 것도 있고, 원래 배열은 그대로 두고 새 배열을 반환하는 ..

부스트코스를 공부하면서 배웠던 서블릿과 JSP, 빌드 도구 Maven을 이용해서 조그마한 자바 웹 애플리케이션을 만들고 있었다. 로컬에서 테스트하면서 기능적인 부분을 거의 다 완성하고 나니 이걸 실제로 서버에서 돌리려면 어떻게 해야 하나, 라는 생각이 들었다. 이걸 누가 쓴다 치면 내 컴퓨터를 항상 켜놔야 서버가 돌아가는건데 그럴 수는 없으니까. 이럴 때 이용할 수 있는 서비스가 AWS 같은 클라우드 서비스다. 클라우드에서 VM을 만들고 그 안에 웹 서버 소프트웨어랑 내가 만든 애플리케이션을 넣어서 서버로 쓰는 것이다. 근데 이렇게 하려고 보니까 나는 윈도우에서 GUI로 작업을 했는데 서버용 VM은 리눅스 CUI라는 점이 생각났다. 윈도우에서 앱을 만들기 위해서 했던 과정들 (이클립스에서 Maven Pr..
- REST API (REpresentational State Transfer API) 란? > 널리 사용되는 의미: HTTP 프로토콜로 제공하는 API > 일반적인 프로그래밍 언어를 사용할 때 'API를 사용한다' 고 하면 누가 이미 만들어놓은 함수 (메서드) 를 가져다 쓴다는 의미였다 > 'HTTP Request를 통해서' 서버에서 이미 만들어놓은 기능을 동작시켜 그에 따른 Response를 받는 것 > 보통 Response로는 JSON 파일을 받게 된다 > REST의 의미: 엄밀하게 RESTful이라고 하려면 다음과 같은 것들을 지켜야 한다 >> client-server >> stateless >> cache >> layered system >> code-on-demand: 여기까지는 HTTP를 사..
- JDBC (Java DataBase Connectivity) 자바를 이용해서 DB를 다루기 위한 API. 각 DB 벤더들마다 JDBC 인터페이스를 구현한 드라이버를 제공한다. - JDBC 사용법: 안드로이드에서 SQLite 쓸 때나 PHP에서 MySQL 쓸 때 어떻게 했는지 떠올려보자. 비슷하다. 1) JDBC 드라이버 설치 및 Import Maven에 의존성을 추가해서 쉽게 드라이버 라이브러리를 다운로드받을 수 있다. mysql mysql-connector-java 5.1.45 다운로드 받았으면 .java (혹은 .jsp) 파일에서 -> import java.sql.* 2) 연결 (Connection) 드라이버를 로드하고, 드라이버 매니저를 이용해 Connection 인스턴스를 얻는다. 이때 DB의..

사진에 들어있는 텍스트를 컴퓨터로 인식하는 것 (OCR: Optical Character Recognition) 은 컴퓨터 비전의 한 분야로서 예전부터 꾸준히 연구되어왔던 분야인데, 요즘은 머신러닝 기술이 발전하면서 예전보다 훨씬 높은 인식률을 구현할 수 있게 된 것 같다. 특히 뉴럴 네트워크의 한 종류인 CNN (Convolutional Neural Network) 이 이미지 인식에 많이 사용되는 기술이라고 알고 있다. 하지만 이런 머신러닝 기술을 직접 로우레벨부터 구현하기엔 많은 노력이 필요하다. 뉴럴 네트워크를 구축하고 데이터를 모아서 학습을 시키고 파라미터를 조절하고... 이런걸 OCR을 이용한 서비스 하나 만들어보겠다고 다 배우는 것보다 편리한 방법은 클라우드 서비스를 이용하는 것이다. AWS나..