What is VM(Virtual Machine)?

JVM을 설명하기 전에, Virtual Machine이 뭔지 생각해보자.
가상 머신은 소프트웨어로 만들어진 컴퓨터이다.
현실의 컴퓨터는 하드웨어로 이루어져 있다. CPU, RAM, 메인보드, SSD 혹은 하드 디스크, 키보드, 마우스 등등의 실제로 볼 수 있고 만질 수 있는 물리적인 부품들과 운영체제 등의 소프트웨어로 이루어져 있다. 이런 특징을 가진 컴퓨터를 소프트웨어로, 눈에 보이지 않지만 컴퓨터의 기능을 하게끔 만든 게 바로 가상 머신(Virtual Machine)이다. 실제로 가상 머신 또한 자체 운영체제, 스토리지, 네트워킹, 구성 설정 및 소프트웨어가 있다.

그렇다면 가상이란 무엇인가?
가상화(VIrtualization)이란 리소스(서버, 메모리 등)를 논리적으로 통합 혹은 분할 작업을 통해 한 개의 큰 자원 혹은 여러 개의 작은 자원으로 나누는 기술이다.
가상화의 장점과 단점은 더보기 란을 참조하자.

더보기

장점을 나열해보면,
1. 어플리케이션 설치 없이, 별도의 설정 과정이 필요없어진다.
2. 버전을 선택하여 사용할 수 있고, 여러 버전이 공존할 수 있다.
3. 일괄적인 관리를 통해 시스템 관리 비용을 절감할 수 있다.
4. 정보 유출 위험이 감소한다.
5. 원격 액세스가 가능하다.
6. 가상머신을 통해 서버 배포 시에 필요한 공간을 줄일 수 있다.

 

단점을 나열해보면,
1. 사용을 위해 전문적인 지식이 필요하다.
2. 사용환경에 따라, 비용이 상승하는 경우도 있다.
3. 시스템 관리 서버의 의존도가 높다.
4. 물리적 환경에서는 성능이 좋지 않다.

 

What is Java Virtual Machine?

class file에 대한 decomplieig이 가능 - jre

jre = java api(parser) + JVM(동적 컴파일링, 저스트인타임)

library 는 jdk에 깔림

class file이 실제로 구동되는 파일, java 파일은 사용자가 보기 위한 파일

.java → compiler → .class(byte코드로 변환될 타겟(혹은 바이트 코드)) || .jar→ JVM → execution

spring (AOP 특성) >> 관점 지향 프로그래밍(따로 글 쓰기)

java application(.class or .jar) 을 class loader 로 parsing하여 java api와 함께 execution함.

java api : 메인 헤더 파일이라 생각하면 된다.
parsing : 실행할 명세서를 만드는 작업

VM → virtual machine (물리적 컴퓨ㅊ터에 대한 의사 구현) 컴퓨터 안에 컴퓨터

의사 구현 : 같은 기능을 하는 모사체

jvm → stack 기반(레지스터 기반과 다름)

jvm은 하드웨어에 종속적이다. byte code가 하드웨어 독립적인 것.

symbolic reference → 위치를 적어둔 쪽지라고 생각하면 됨. 직접 참조라면 한 번에 찾아갈 수 있지만 이 참조는 위치를 따라 찾아가야함. but, primitive data type 이외 모든 Type( Class, interface) 해당

symbolic ref. : 동적 컴파일링을 하기 때문에 사용한다.
primitive data type : 크기가 이미 정해져 있다. 이 이유는 컴퓨터가 연산하는 비트 수에 따라 자료형이 변환되며 기존의 코드와 충돌할 가능성이 있기 떄문

GC → class instance는 명시적으로 생성(사용자가 만듬)되어 gc에 의해 소멸함

jvm → big endian order, byte order가 big endian 연산임 ordering 의 고정 목적

jvm 은 시스템 아키텍쳐마다 다르다. java는 indepandent 하지만 jvm 은 no

jvm is cloesed source but the java virtual machine specification 를 제공(IBM, JVM, Dalvik)

dalvik : register based, but specification 미준수, 그래서 dalvik runtime machine

java → java byte code → machine code < jvm 이 참여(byte code를 실행)

jvm : class order, dra, execution engine
  • 추상구조트리 ast (abstract structure tree)import 부터 확인 —> 해당 라이브러리를 찾아서 경로를 찾음 PATH,를 설정후에 가져옴. 그 다음에 main 문이 있다는 것을 확인 MAIN = 1 임을 확인함. System.out.println 메서드를 확인, 이를 실행
  • java code를 byte code로 컴파일 할 때 import java.util.list; public static void main(String[] args){ System.out.println(”syso”); }
  • machine code로 만드는 과정

Class loader 가 compile 된 java bytecode 를 runtime data area 에 load 이후 execution engine 이 실행 → 먼저 자주 호출된 호출 빈도를 뽑은 뒤(변수나 함수 등), JIT(컴파일링 방식과 인터프리티 방식이 합쳐짐)

jit : just in time 이 실행되고 최종적으로 수행 되는 곳은 runtime engine이 함.
호출 빈도를 뽑는 이유 : 오버헤드를 줄이기 위해서.

include import의 차이
#include → compiler (not JIT)
import → interpreter + compiler (JIT)

'Java > Java' 카테고리의 다른 글

백준 1406 참고 블로그  (0) 2022.02.03

What is Confluence?

Confluence is a team workspace where knowledge and collaboration meet.

 

Structure of Confluence

 

Key Terms

page 사용자는 여기서 콘텐츠를 만들 수 있습니다. 원하는 템플릿을 사용하여 직관적인 디자인을 사용할 수 있습니다. 물론 빈 파일을 만들어 사용자가 직접 템플릿을 만들어 사용할 수 있습니다.
space page는 space에 저장됩니다. 이 곳에서 협업하고 콘텐츠를 정리합니다. 그룹핑을 통해 콘텐츠를 구분지을 수 있습니다. 물론 프로젝트 별로 그룹핑을 할 수도 있고, 팀 별로 그룹핑을 할 수도 있습니다. 각 space에는 개요(또는 홈페이지) 및 블로그가 제공됩니다. 이를 통해 즉각적인 피드백과 이슈 사항을 쉽게 공유할 수 있습니다.
page tree 빠른 탐색을 위한 계층적 page tree로 space 콘텐츠를 구성합니다. space 와 page 하위에 page를 두어 page를 구성합니다.

 

Tutorial - Step 1 : Learn about Spaces

Tutorial - Step 2 : Create a space

Tutorial - Step 3 : Customize your space overview

Tutorial - Step 4 : Organize your content

Tutorial - Step 5 : Manage users and permissions

 

Reference

https://www.atlassian.com/software/confluence/guides/get-started/set-up#step-5

 

Set up your site and spaces | Atlassian | Atlassian

Follow these 5 simple steps to set up your Confluence Cloud site, create a space, organize content, and manage users and permissions.

www.atlassian.com

 

Overriding : 상위 class 혹은 interface에 존재하는 method를 하위 class에서 필요에 맞게 재정의하는 것을 의미한다. 자바의 경우는 오버라이딩(overriding) 시 동적바인딩(dynamic binding)된다.

Overloading : 오버로딩(Overloading) 메소드의 이름은 같다. return 타입은 동일하거나 다를 수 있지만, return 타입만 다를 수는 없다. 매개변수의 타입이나 갯수가 다른 메소드를 만드는 것을 의미한다. 다양한 상황에서 메소드가 호출될 수 있도록 한다. 언어마다 다르지만, 자바의경우 오버로딩은 다른 시그니쳐를 만드는 것으로, 아예 다른함수를 만든것과 비슷하다고 생각하면 된다. 시그니쳐가 다르므로 정적바인딩으로 처리 가능하며, 자바의 경우 정적으로 바인딩된다.

--- create table here ---

--------

dynamic binding, static binding definition

dynamic binding : ~

static binding : ~

-----compare with dynamic binding and static binding---

dynamic is ~

static is ~

Reference >
https://secretroute.tistory.com/entry/140819

 

정적 바인딩(Static binding) vs. 동적 바인딩(Dynamic binding)

* Binding - 프로그램 구성 요소의 성격을 결정해주는 것 ex ) 변수의 데이터 타입이 무엇인지 정해지는 것  종류 정적 바인딩(Static binding) 동적 바인딩(Dynamic binding)  정의  컴파일 시간에 성격이

secretroute.tistory.com

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Java

 

GitHub - JaeYeopHan/Interview_Question_for_Beginner: Technical-Interview guidelines written for those who started studying progr

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - GitHub - JaeYeopHan/Interview_Question_for_Beginner: Techn...

github.com

 

# Token 인증 이란?

client는 server에 접속을 하기 위해서는 해당 요청이 유효한지 인증을 받는 절차를 가져야 한다. 아무 요청이나 다 받아주면 server에 문제가 생길 수 있기 때문이다. 그래서 Token이라는 이용권을 발급하여 client가 server에 접속할 수 있도록 한다. 비유를 하자면 놀이공원에 들어갈 때 쓰는 자유이용권을 생각하면 된다.
Token 방식에는 2가지 방법이 있다. OAuth(Open Authorization)와 JWT(JSON Wen Token) 이다. 여기서는 OAuth 2.0에 대해서 설명한다. 전자는 protocol, 후자는 standard에 들어간다. protocol과 standard의 차이점은 밑의 글을 참고해보시라.

<link 넣기>


# OAuth 란?

OAuth의 정의는 다음과 같다.

Internet user들이 password를 제공하지 않고 타 website 상의 user의 정보에 대해 website나 application의 접근 권한을 부여할 수 있는 공통적인 수단으로써 사용되는, 접근 위임을 위한 개방형 표준이다.
                                                                                                                                                             - Wiki pedia

조금 더 쉽게 설명해 보자면, 우리가 주로 쓰는 카카오톡, 구글, 페이스북 등의 소셜 아이디로 로그인 하는 방식을 간편하게 사용할 수 있도록 도와주는 protocol이다. 이 밖에도 다른 외부 Web application에서 제공하는 기능들을 사용할 수 있고, password를 제공하지 않기 때문에 보안성이 높다는 장점 또한 있다.
단점은 복잡한 로직 과정이 있고 refresh, access token을 다 저장해야 해서 크기가 크다는 단점이 있다.

먼저 OAuth의 구성 요소들과 주요 용어를 살펴보자.

구성 요소 / 용어 설명
authentication 인증, 접근 자격이 있는지 검증하는 단계.
authorization 인가, resource에 접근할 권한을 부여하는 것.
인가가 완료되면 resource 접근 권한이 담긴 access token client에게 부여된다.
resource owner web service를 이용하려는 유저, resource(개인정보)을 소유하는 자, 사용자.
authorization server 인증/인가를 수행하며 client의 접근 자격을 확인하고 권한을 부여하는 역할을 수행한다.
resource owner 이 server로 id, password를 넘겨 authorization code를 발급 받을 수 있다.
client는 이 server로 authorization code를 넘겨 access token을 발급 받을 수 있다.
client 자사 또는 개인이 만든 application server.
resource server에게 필요한 자원(보호된 자원)을 호스팅하는 관계.
resource server resource owner의 보호된 자원을 호스팅하는 server.
소셜 로그인을 할 때, 해당 회사(Google, Facebook, Kakao, etc.)의 server를 말한다.
access token resource owner에게 resource 접근 권한을 인가했음을 나타내는 만료 기간이 있는 자격증명(token)
보통 15~30분 정도의 만료 기간을 가진다.
refresh token access token 만료시 이를 갱신하기 위한 용도로 사용하는 token.
refresh token이 없다면 resource owner는 다시 로그인을 시도해야 한다.
하지만 refresh token이 있다면 이 token을 통해 access token을 재발급 받을 수 있다.
보통 30일 정도의 만료 기간을 가진다.

# OAuth 의 Protocol Flow

(A) client가 resource owner에게 authorization request를 한다. authorization request는 resource owner에게 직접 authorization request를 할 수 있다. 제일 바람직한 방식은 authorization server를 중개자로 두어 간접적으로 request를 하는 방식이다.

(B) client는 authorization grant를 받는다. resource owner의 authorization을 나타내는 자격 증명으로, 밑의 authorization Grant types 중 하나를 사용하거나, extension grant type을 사용한다.

(C) client는 autorization server로 authentication하고 access token request를 보낸다.

(D) authorization server는 client를 인증하고 권한 부여의 validation을 검사하며, 유효한 경우 access token을 발급한다.

(E) client는 protected resource를 resource server로 부터 요청하고 access token을 제시하여 authentication한다.

(F) resource server는 access token의 유효성을 검사하고, 유효한 경우 request를 처리한다.

# Authorization Grant types

authorization grant types에는 총 4가지 방식이 있다.
- 권한 부여 승인 코드 (Authorization Code)
- 암묵적 승인 (Implicit)
- 자원 소유자 자격증명 승인 (Resource Owner Password Credentials)
- 클라이언트 자격증명 승인 (Client Credentials)

## Authorization Code

authorization code는 autorization server를 사용하여 가져온다. autorization code는 client와 resource owner 사이의 중개자 역할을 수행하게 된다.. resource owner에게 직접 권한을 요청하는 대신, client는 resource owner를 authorization server로 보내고, resource owner를 client에게 전달하기 전에 autorization code, autorization server가 인증을 한 뒤 authorization code를 사용하여 resource owner를 다시 client로 보낸다.

resource owner은 autorization server만 인증하므로,
resource owner의 인증 정보는 client와 공유되지 않는다.

authorization code는 client를 인증하는 기능과 같은 몇 가지 중요한 보안 이점을 제공한다. resource owner의 user-agent를 통해 전달하지 않고, resource owner를 포함한 다른 사람들에게 잠재적으로 노출하지 않고 access token을 client에게 직접 전송한다.

A user agent is any software that retrieves and presents Web content for end users or is implemented using Web technologies. User agents include Web browsers, media players, and plug-ins that help in retrieving, rendering and interacting with Web content.

'Backend > Server' 카테고리의 다른 글

Apache Directory Structure  (0) 2022.07.29

+ Recent posts