[TIL] 2019-10-30
공부 중에 모르는 것들 메모해둔 것 정리.
- Dependency: bundle.gradle의 dependancy {}에 사용할 API의 모듈을 추가하기
--> 디펜던시 링크 - Gradle / Marven
- Intent, Intent_filter (안드로이드 개발자사이트 국문) 아래 참고.
- 아래 코드 이해하기 (try, catch)
Try-catch
예외처리. 프로그램 실행 중 예외나 에러가 발생할 경우 처리해주는 것. 예외나 에러가 발생할 경우try에서 벗어난다. 벗어나게 되면 기다리고 있던 catch가 예외나 에러를 잡아 처리하는 것.
마빈과 그레이들
빠른 기간동안 계속 늘어나는 라이브러리의 추가와 프로젝트를 진행하며 라이브러리의 버전을 동기화하기 어렵기에 빌드도구가 등장함. 초기의 java 빌드도구로는 Ant라는 도구를 많이 사용했으나 늘어나는 라이브러리를 관리하기 위해 Maven, Gradle 등 기존 ant 를 보완한 빌드도구들이 생겨남.
즉, 마빈과 그레이들을 빌드도구다.
- Apache Maven: 프로젝트에 필요한 모든 ‘dependency(종속성)’을 리스트 형태로 마빈에게 알려 관리할 수 있도록 돕는 방식. Dependency를 관리하고 표준화된 프로젝트를 제공
- Apache Gradle: JVM 기반의 빌드 도구. 기존이 Ant와 Maven 보완. 출처: JJ’s Once a week 블로그
//
Groovy란 언어를 기반으로 만들어진 빌드 도구. 안드로이드 스튜디오의 공식 빌드 시스템. Groovy는 Java 가상 머신에서 실행되는 스크립트 언ㅇㅓ. java처럼 소스코드를 작성하고 jvm에서 동작하지만 java와 달리 소스 코드 컴파일 필요없이 소스 코드를 그대로 실행. Java와 호환 되고 java class file 그대로 groovy 클래스로 사용할 수 있다. 간편하게 사용할 수 있는 java라고 할 수 있는 groovy를 사용하여 빌드 처리 작성하고 실행하는 것이 gradle이다. (출처: 아무것도아니다) – 카톡링크
API(Application Program Interface)
응용 프로그램을 구현하도록 한 인터페이스. / 기업에서 미리 개발해 놓은 기능들을 가져다 쓸 수 있도록 제공하는 것.
REST API
인터넷 상의 컴퓨터 시스템간 상호 운용성을 제공하는 방법 중 하나.
http기반 표준 프로트콜로 서버 구성 가능 / http 기반으로 필요한 자원에 접근하는 방식(프로토콜)을 정해놓은 네크워크 아키텍쳐.
*html: 웹 문서를 만들기 위하여 사용하는 기본적인 웹 언어의 한 종류. 인터넷의 대부분 웹 페이지들은 html으로 작성.
자원이란 저장된 데이터는 물론 이미지/동영상/문서(pdf 등)와 같은 파일, 서비스(이메일전송, 푸쉬메시지) 등을 모두 포함.
REST 제약조건을 준수하는 웹서비스를 RESTful하다고 한다.
REST 기반으로 서비스 API를 구현하는 것을 REST API라고 한다.
java, c+ 연동 가능
주요 구성요소
ㆍ 리소스: 접근할 대상, url을 통해 식별
ㆍ 메소드: 어떤 자원을 생성(POST), 조회(GET), 수정(PUT) 삭제(DELETE) 할지
ㆍ 메시지: 메시지를 어떻게 처리해야할지 정보 포함. http바디(최근에는 json, xml으로 사용)와 헤더, 응답상태코드를 활용
어떤 자원을 어떤 행위를 어떻게 할지 http기반으로 정의해놓은 아키텍쳐
ㆍ End Point: 특정 url을 정의하는 것. 어떻게 처리할지. 리소스, 메소드, 등 매핑. -> 어떤 리소스를 어떻게 처리(METHOD)할지 구현된 항목을 ENDPOINT라함.
컨텐츠 타입: application/json , test/plain 등
200 정상, 201 생성요청 성공. 400. 요청이 부적절.
델파이 REST API >HTML 라이브러리인가?
EMS 프로그램으로 엔드포인트 할 수 있음.
Q. 델파이? 8080PORT?
델파이: 프로그램 개발의 단위. 프로그램 개발에 필요한 정보(소스코드, 폼, 리소스, 옵션 등)들을 모아놓은 것.
REST: Representational State Transfer
Graph.facebook.com
Maps.googleapis.com/maps/api/geocode/json?adress=Chicago&seonsor=false
Apigee.com/console/Instagram?req
Programmable.com
HTTP Request Methods:
GET: what you’ve seen us do so far by passing these URL parameters
POST: Postman
Access token (oAuto 1.0)
Pass it to another . pashing
HTTP: WEB의 프로토콜
rress분산 하이퍼미디어 시스템(웹)을 위한 아키텍쳐 스타일 (제약조건의 집합)
re
from생활코딩
웹브라우저에서 코드를 처리하기 때문에
PHP. 웹서버에게 요청. : PHP engine/interpreter에게 위임. 읽어서 해석 후 웹서버에게 전달. / 서버쪽에서 처리 해서 전달
Js의 경우 웹브라우저가 실행해서 해석 및 처리 / 웹브라우저 쪽, 클라이언트에서 처리함
OAuth
방문객이 회사에 방문해서 직원의 확인을 받고 방문증을 발급받아 회사에 들어갈 수 있는 것.
사용자:
방문증: authentication
Open ID: 인증(Authentication)
OAuth: 허가(Authorization)
문자코드 UTF-8
OAuth 의 인증 원리와 API 가이드를 샅샅이 이해해보고 싶어 ‘Tiwitter API 기초 지식’이란 책을 읽기 시작했다.
ㆍ BASIC 인증: 유저 이름과 패스워드를 포함한 문자열을 Base64 인코드한 것을 HTTP request header(Autorization header)에 첨부해서 이루어지는 인증.
ㆍ OAuth 인증: 유저 이름과 패스워드 대신 규약에 따라 정해진 순서로 입수한 토큰(Access token)을 사용해서 인증하는 방식. 유저가 자신의 패스워드를 애플리케이션에 입력할 필요가 없기 때문에 보안적인 측면에서 BASIC 인증보다 안전.
(p.31)
1. 애플리케이션을 twitter에 등록하고 consumer key와 consumer secret 취득
2. Request Token 취득 API(oauth/request_token)를 실행하여 Request Token 취득
3. Request Token의 token을 사용해서 유저에게 접속 허가를 요구하기 위한 url을 생성
데스크톱 애플리케이션의 경우 그 URL을 지정해서 웹브라우저를 실행. 웹 애플리케이션의 경우는 그 URL로 리다이렉트함. (웹 브라우저로 표시되게 함) -(동의페이지 / 허가/ 말하는건가)
4. 유저에 의한 접속 허가로 Twitter에 접속. 허가 클릭하면 Twitter 접속, 그렇지않으면 여기서 종료.
5. 데스크톱 애플리케이션의 경우, Twitter로부터 발행되는 PIN 취득. / 웹 애플리션의 경우 callback URL로 리다이렉트 되기 떄문에 콜백될 떄 url로부터 oauth_verifier 파라미터 취득
6. Access Token 취득 API를 실행하여 Access Token 취득(token 2 or token2 secret)
7. 이후 consumer key, consumer secret, token, token secret을 사용해서 서명(oauth_signature)을 생성해서 서명된 api 실행.
ㆍ xAuth: OAuth와 가장 큰 차이점은 유저에 의한 브라우저 조작(브라우저 겨융의 접속을 허가)이 필요 없다는 점. Request Token을 얻지 않고 바로 Access Token을 얻음. 유저에 의한 브라우저 저작이 필요없는대신 유저로부터 유저 이름과 패스워드를 맡아둬서 Access Token을 얻음. OAuth의 변종으로 Access Token 취득이후에는 OAuth와 동일.
리다이렉트 url로.. (tiwitter에서는 callback URL로 칭함)
Java 기능
Public/Private
Public 모든 class에 접근 가능.
Private 같은 클래스 내에서만 접근 가능
Public class의 경우는 클래스 명과 소스코드의 파일명이 같아야함.
public class PublicNameDemo{} // PublicNameDemo.java로 이름을 등록해야함.
하나의 클래스 안에는 하나의 public class만 존재.
Abstract
상속 받는 클래스를 만들어서 사용
Abstract 클래스나 pathem는 반드시 상속해서 사용하도록 강제
추상 클레스는 객체로 만들 수 없다.
객체를 더 이상 인스터화하지 않게 만들려면 클레스에 abstract를 만들면 됨.
*인스턴스화: 클래스를 가지고 객체를 만드는 일
Final: 상속/변경을 금지.
static final double PI = 3.14 // 사용자가 절대로 바꾸지 않도록 설정
파이널로 지정되면 overriding할 수 없음
Class나 메소드 앞에 final 붙이면 오버라이딩도 금지할 수 있음.
Interface
클래스를 가지고 객체를 만드는 일을 인스턴스화(Instantiation)라고 함. (인스턴스화를 막으려면 abstract 붙이면됨)
어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드를 구현해야 한다.
하나의 클래스가 여러 개의 인터페이스 할 수 있음.
인터페이스도 상속된다.
인터페이스의 멤버는 반드시 public이다
Abstract와 비슷한 기능. 인스턴스는 클래스가 아닌 인스턴스라는 고유한 형태를 가지고 있음. 구체적인 로직이나 상태를 가지고 있을 수 없음
추상클래스는 일반적인 클래스임. 구체적인 로직이나 상태를 가지고 있을 수 있다.
l 선언 방법
- 식별자 명명 관례에 따라 인터페이스의 이름은 대문자로 시작하는 명사나 형용사
메소드의 이름으느 소문자로 시작하는 동사
- 인터페이스에 속하는 메소드는 무조건 추상 메소드로 선언. 굳이 메소드 앞에 abstract 안 써도 자동으로 프로그램에 추가됨.
- Class [class name] implements [interface name]
l 콜백 : 호출된 함수를 알려 주어 다른 프로그램 또는 다른 모듈에서 함수를 호출하게 하는 방법. 일반적으로 운영 체계(OS)가 호출할 애플리케이션의 함수를 지정해 특정한 사건 또는 메시지가 발생했을 때 호출되도록 지정할 수 있다. 이런 함수를 콜백함수라 한다. (출처: 네이버 지식백과)
l js에서 나중에 불러하는 함수. 리턴값일수도있고, 다른 값을 불러올 수도 있음. 1급객체
l 나중에 실행하라고 다른 함수에 인자로 넘겨주는 것(!) 내부 함수에 넘겨주었다면 동기적이고, 외부 API에게 콜백을 넘기면 비동기적일수도있음. (from 코드종)