API (Application Programming Interface)
in Programming on C#/Java
- 다른 사람이 만들어 놓은것을 쓰는 것. 안내문, api documentation.
- JAVA8 버전의 Documentation 확인 가능 reference - JAVA API Document
- https://docs.oracle.com/javase/8/docs/api/index.html
in Programming on C#/Java
in Programming on C#/Java
: Encapsulation, Inheritance, Polymorphism 의 특징을 가진다.
in Programming on C#/Java
in Programming on C#/Java
메모리에 로딩된 프로그램은, CPU에 전송돼 실행돼고, 그 결과가 메모리로 이동한 후에 화면에 출력하게 된다.
in Programming on C#/Java
혼자 야매로 하다가 처음부터 배울 기회가 생겨서 좋다.
in Project
Servlet은 로직 구현시에는 편하지만, HTML을 쓰기엔 좀 불편하다. JSP는 반대로 로직 구현시 불편하지만 HTML은 편하다. 그래서 둘을 연동 시킨다.
in Web Dev
*기계 중심의 언어.
기계어(0,1로 이루어짐), 어쎔블리어(기계어와 1:1 대응을 가지는 기호)
프로그램 유지 보수가 어렵다.*
*사람 중심의 언어
웹 개발 관련 고급언어
Python (데이터 과학 뿐 아니라 웹개발에서도 사용) PHP (웹의 80% 이상이 이 언어로 작성 ) JavaScript (원래는 브라우저에서만, 그치만 이제는 서버에서도) JAVA (큰 규모의 소프트웨어 개발에 많이 사용된다.) Ruby (빠른 개발에 사용, 단순하고 세련된 웹 만들기 가능하다.)*
HTTP(Hypertext transfer protocol) 웹 브라우저 ~ 웹 서버, 통신하기 위해서는 규약이 필요하다. HTTP v0.9 (최초) ~ HTTP v2(현재)
HTTP v1.1 기준. 하나의 물리적 컴퓨터에는 여러가지 소프트웨어 서버가 동작 가능하다. 이 서버의 포트값은 달라야한다. http 포트는 80
HTTP 작동방식
서버/클라이언트 모델 (클라이언트가 서버에 요청하면 서버가 응답한다) 무상태(Stateless) 방식 : 응답이 끝나고 나면 서버와 클라이언트의 연결이 끊긴다. 같은 클라이언트가 연속해서 요청을 하더라도, 서버는 그게 같은 클라이언트인지 모른다.
장) 불특정 다수에게 서비스하기 좋다. 클라이언트와 서버가 계속 연결돼있지 않기 때문에, 최대 연결수보다 더 많은 요청과 응답 처리 가능.
단) 클라이언트의 이전 상황을 모른다. (난 분명 장바구니에 청바지 담았는데 결제누르니까 사라짐.) 그래서 쿠키가 등장
-URL (Uniform Resource Locator) 세부분으로 나누어짐 접근 프로토콜://IP주소나 도메인 이름/문서경로/문서이름 http ://www.yejip.com /docs /Webbasics/
크게 세부분으로 나뉨 요청 헤더 (빈줄) 요청 바디
예시 GET /servlet/query?a=10&b=90 HTTP/1.1 Host: www.sk.com user-agent: mozilla/4.0 Accept-language: kr
자세히 요청 헤더 GET /servlet/query?a=10&b=90 HTTP/1.1 요청 method 요청URI(자원 위치) 프로토콜 버전 Host: www.sk.com user-agent: mozilla/4.0 Accept-language: kr
빈줄 빈줄이다.
요청 바디 빈칸 (GET 방식은 요청 바디가 없다. URI에서 가져가서)
크게 세부분으로 나뉨 응답 헤더 (빈줄) 응답 바디
예시 HTTP/1.1 200 OK Date: Server: Last-Modified: Content-Length: Content-Type:
요청 메소드 GET : 정보를 요청하기 위해서 사용. (SELECT) POST : 정보를 밀어넣기 위해서 사용. (INSERT) PUT : 정보를 업데이트 하기 위해서 사용. (UPDATE) DELETE : 정보를 삭제하기 위해서 사용. (DELETE) HEAD : (HTTP)헤더 정보만 요청, (해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용) OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청 TRACE : 클라이언트의 요청을 그대로 반환한다. (서버 상태 확인 목적)
in AWS CDA
AWS CLI 를 window에서 사용하는 법은 간단하다. 여기서 https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html aws에서 MSI installer 로 설치하면 된다.
그 후 cmd에서 aws –version 하면 이렇게 뜬다.
aws:command not found the aws executable 이 PATH env variable에 없다. (PATH 는 너의 aws 실행파일이 어디있는지 시스템에게 알려주는 역할을 한다.)
IAM 서비스에서 users => security credentials 가서 create access key.
download .csv file 한다. 이 파일은 super secret임.
주의 ! 절대 ec2 머신에서 하지 말것. ec2 머신에 personal credentials 넣는거 안좋다.
command line 에서 aws configure 치면, 다음을 차례로 입력해 주면 된다.
$ aws configure
AWS Access Key ID [None] : [여기 access key 입력]
AWS secret Access Key ID [None] : [여기 secret access key 입력]
Default region name [None] : [여기 region 입력]
앞서 한 것 처럼하면 아주 큰일 난다. EC2 Instance에 이런 중요한 정보 업로드하면 안된다. 대신, IAM ROLE을 이용한다.
ec2 머신에 ssh 접속한다. aws configure
AWS Access Key ID [None] : [엔터]
AWS secret Access Key ID [None] : [엔터]
Default region name [None] : [여기 region 입력]
IAM 롤에 가서 , create role 한다. aws service => ec2 => policy 찾는다.
내가 만약 이 ec2 instance에 s3 에 접속 권한을 주고 싶으면, AmazonS3ReadOnlyAccess를 선택하고 role name과 description 써준다. 그리고 next 누르면 끝.
Policy 생성해서 role에 부착한다. 그 role을 ec2에 부착한다.
EC2 management 콘솔에 가서 instance setting, attach/replace IAM role 에서 내가 방금 만든 role을 attach 해준다.
그럼 해결~~~
inline policy : 그냥 그 역할을 위해 사용한다. 다른 객체한테 부착불가. 추천하지 않는다.
AWS Simulator 검색해서 들어가면, policy simulator 에서 권한 확인 가능 https://policysim.aws.amazon.com/home/index.jsp
aws ec2 run-instances --dry-run --image-id [ami-아이디입력] --instance-type t2.micro
ec2에서 내 계정이랑 연결을 안해서 오류가 났다.
admin role을 attach 해주고 돌리면 제대로 된다.
https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html
decode-authorization-message
--encoded-message <value>
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
이걸 사용하기 위해서 STS decode 권한을 부여해야한다. Policy에서 설정한 후, 이 policy를 내 ec2 instance에 붙어있는 role에 추가한다.
권한 설정을 마쳤으면, 다음과 같이 돌리면 된다.
aws sts decode-authorization-message --encoded-message
JSON 형식으로 정보가 DECODE된다.
http://169.254.169.254/latest/meta-data/ 이 url로 접속하면, EC2 INFO를 볼 수 있다.
EC2 instance에 접속해서,
curl http://169.254.169.254/latest/meta-data/
을 하면
다음과 같이 많은 정보를 확인할 수 있다.
주의
ec2 instance에 계정을 두개 이상 연결하고 싶을 때는 어떻게 해야할까? cat credentials 을 하면 현재 AWS accounts 나온다.
이럴때는 새로운 profile 만들면 된다.
ex) my-other-ID 프로필 생성 과정
aws configure --profile my-other-ID
AWS Access key ID [None] : 여기에 입력
AWS Secret Access key [None] : 여기에 입력
그 후 몇가지 정보 더 입력해주면 끝. cat credentials 하면 이제 현재 계정 뿐 아니라, 프로필에 추가된 계정도 함께 나온다.
이것을 이용하기 위해서는 STS GetSessionToken API call 이 필요하다.
STS GetSessionToken API call
aws sts get-session-token --serial-number arn-of-the-mfa-device --tokencode code-from-token --duration-seconds 3600
arn-of-the-mfa-device는 계정에서 MFA 등록하면 나오고, code-from-token – 는 내 auth 앱에서 실시간으로 받은 코드다.
IAM => Security credential Assign => MFA device => virtual MFA device setup 간다. 두개의 MFA code 로 인증. 이렇게 등록이 끝나면, Security credential 의 Assigned MFA device 에 있는 arn을 복사한다.
aws sts get-session-token --serial-number [arn-of-the-mfa-device] --tokencode [code-from-token]
위 STS GetSessionToken 을 돌리면, access key, secret key, session token 정보가 나온다.
aws configure --profile mfa
AWS Access key ID [None] : 여기에 입력
AWS Secret Access key [None] : 여기에 입력
cat ~/.aws/credentials
//후 credential 파일에 aws session token 정보 입력
aws_session_token = 토큰 정보 (긴거) 입력
내 앱에서 AWS를 바로 이용하려면, SDK(Software development kit)사용.
ex) java, python, go , ruby,PHP 등등이 SDK이다.
AWS CLI는 PYTHON SDK 이용 (BOTO3)
AWS Limits (Quotas)
Exponential Backoff
throttlingException, retry mechaism, Service Ouatas(service limits)
내 account 에서 리밋에 도달하면 , exponential backoff.
API call을 retry할 때마다 시간이 두배씩 늘어난다. 1초 기다릴거, 한번 리트라이 해서 2초, 4초,8초… 이렇게 시간을 벌면 limit 이 풀려서 정상 작동하게 된다.
CLI는 다음과 같은 우선순위로 credential 을 찾는다.
AWS SDK(JAVA)는 다음과 같은 우선순위로 credential 을 찾는다.
AWS Credentials Scenario
EC2에 배포된 APP이 IAM user로 부터 S3 API를 부를 때 env var에 있는 credentials 을 사용한다.
IAM user은 S3FullAccess permissions을 가지고 있는데, 이 APP은 한 S3 Bucket만 ACCESS 한다.
best practices:
이 EC2 Instance를 위한 IAM Role & EC2 Instance Profile을 만든다.(한 s3 bucket에만 access를 할 수 있는 롤을 붙인다.)
==> 하지만, IAM Instance Profile이 EC2 instance에 할당됐음에도, 모든 s3 버켓에 접속이 가능하다. 왜냐면 credentials chain 이 env var를 먼저 체크하기 때문이다. instance profile credentials은 맨 마지막에 체크한다.
==> 따라서, credential 관련 env var를 unset 하면 된다.
HTTP가 전송한 AWS 요청에 인증 정보를 추가하는 프로세스
Your requests to AWS are signed using your credentials, and so you are authenticated against AWS
Any API Calls done in AWS needs to be signed with your credentials.
in AWS CDA
in AWS CDA
KEY WORDS: VPC, subnet, internet gateways, NAT gateways, Security Groups, Network ACL(NACL),VPC Peering, VPC End points, site to site VPN & Direct connect