공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지 196

OAuth2 정리

OAuth2 Open + Authorization Version 2를 의미함. Authorization Framework : 해당 사용자가 특정 행동을 할 수 있는 권한을 부여하는 것. ex) 페이스북 계정을 통한 소셜로그인 -> 로그인한 애플리케이션에서 페이스북에 등록된 정보를 사용할 수 있음. Delegated Framework : 아이디 / 패스워드 없이도 로그인이 가능하고, 사용자에게 제한된 권한만을 부여하는 식으로 작업할 수 있음. OAuth 2.0 등장 이전의 로그인방식은 아래와 같았음 어느 SNS로 로그인할지 체크 아이디 / 패스워드 입력 로그인할 애플리케이션이 이 정보를 직접 SNS에 들고가서 로그인하는 방식. 보안에 취약하다. 서드파티 애플리케이션에 직접 정보를 줘야 하고 서드파티는 해당..

JIT Compiler

Just in Time Compilation, and the Code Cache 자바 컴파일러가 .java -> .class 바이트코드 파일로 변경. 이 변경된 .class 파일이 JVM 위에서 실행된다. 바이트코드로 변환된 후 jvm에서 runtime에 실행되는 구조 : 어느 하드웨어에서건 동일한 실행이 가능하다. 단순히 바이트코드 변환하는 용도뿐만 아니라, 일반적인 인터프리터보다 효율적으로 동작하도록 설계되어 있음. 기본적으로 인터프리터는 코드 한 줄씩 런타임에서 읽어들여 실행하는 구조. 느린 편이다. JVM의 바이트코드 interpretation은 느린 속도를 해결하기 위해 JIT compilation (Just in time compilation) 을 사용한다. 어떤 코드가 가장 자주 실행되는지를..

WebRTC - 개념과 통신방식, 프로토콜

WebRTC Real time Communication on Web Browsers / Mobile App을 가능하게 하는 Framework. 즉 text 형태로도, video 형태로도 가능하다는 뜻. P2P만을 말하는 건 아니다. 단순한 P2P보다 훨씬 복잡함. 크게 네 가지 step을 거쳐 동작한다. Signalling Connecting Securing Communicationing. 보통 WebRTC를 사용한 통신의 대부분이 P2P인 것뿐이다. 왜 등장했는가? WebRTC 이전에는 Server가 MiddleMan 역할을 했다. 즉, 사용자 간 통신의 모든 부하를 서버가 떠맡는 구조였다. Scalable에 한계가 있는 구조 / 유지하기 비싸다. 그럼 아예 이렇게 통신하게 하면 어떨까? 중간에 서버가..

머신러닝야학 2기 - Tensorflow 102. CNN

opentutorials.org/module/5268 Tensorflow 102 - 이미지 분류(CNN) 이 수업은 머신러닝 야학 진도에 맞춰서 공개됩니다. 공개일정은 진도표를 참고해주세요. 머신러닝 야학은 온라인으로 머신러닝을 학습하는 무료학교입니다. 머신러닝을 시작하고 싶다면 1월 opentutorials.org 데이터와 차원. 차원 (Dim)을 정의하는 두 가지 관점 '표'에서의 열 데이터의 포함 관계 데이터 공간 ('표 형태') 표에서 Column의 개수가 2개 = 2차원 평면의 한 점. 3개 = 3차원 공간의 한 점 n개 = n차원 공간의 한 점. 즉 관측치 = "N차원 공간의 한 점". 그러면 변수의 개수 (column의 개수) = 공간의 차원 수와 동일함. 데이터를 (관측치를) 차원의 한 점..

학습일지/AI 2021.01.12

Architecting with Google Compute Engine - Design Process ch4. Presentation Layer

Presentation Layer Overview Presentation Layer : 사용자와 시스템 간, business logic, stored service 간 데이터 flow를 말한다. 간단히 말해 Networking. Presentation Layer : Network Configuration Networking 에서 가장 중요시해야 할 건 Location. 이게 latency 차이를 만드는 핵심이기 때문. Distributed network일수록 outage tolerance가 강해지지만, round trip time is slower between distant elements 문제 때문에 performance limitation은 반드시 존재한다. 미국 - 유럽 간 통신은 1초당 최대 6..

Architecting with Google Compute Engine - Design Process ch3. Data Layer

Data Layer Overview Storage / retrieval of data를 다루는 영역. Storage / retrieval 영역인 database / file system뿐만 아니라 access method; SQL and API 등등을 포함한다. 하지만 transport of data는 다루지 않음. (Into, around, out of the system) transportation 부분은 presentation layer module에서 다룬다. Data Layer Design : Classifying and Characterizing Data 사용자 입장에서 중요한 건 Data integrity. Underlying tech에는 관심 없고, data loss / data corru..

Architecting with Google Compute Engine - Design Process ch2. Business Logic Layer

Business_logic Layer Design OverView Business Logic = code that implements business logic (Computer Science에서의 정의) that determines what happens to data. = processing. Ex) 비행기 티켓 예매라고 하면, 예매 인터페이스가 앱이건 키오스크건 상관없이 ‘티켓 예매’라는 데이터 처리는 동일하다. 이게 business logic. Microservices = specific kind of Service Oriented Architecture (SOA) -> leverages small, stateless processing for improving scalability and res..

[Design Pattern] Facade

Facade Facade 패턴은 '하위 시스템을 보다 쉽게 사용할 수 있게 해주는 인터페이스를 정의하는 것' Adapter 패턴과 거의 같은 방식으로 작동하지만, 목적이 다르다. Adapter : 원래 코드를 다른 코드와 작동할 수 있도록 하는 Wrapper를 제공 Facade : 원래 코드를 더 쉽게 처리할 수 있는 Wrapper를 제공 객체나 클래스, 인터페이스가 복잡할 경우, 쉽게 사용할 수 있도록 프론트 인터페이스를 제공하는 형태. 캡슐화되지 않은 코드를 처리할 때 / 원하는 코드를 다시 작성할 수 없을 때 주로 사용한다. 단, 원래의 클래스, 인터페이스 코드가 변경될 경우 Facade 패턴도 변경해야 한다. 패턴의 특징 여러 복잡한 클래스를 하나로 간주해서 편하게 다루는 방법 따라..

[Design Pattern] Strategy

Strategy 패턴 여러 알고리즘을 하나의 추상적인 접근점 (인터페이스)을 만들어서, 인터페이스에서 알고리즘이 서로 교환 가능하도록 하는 패턴. 동일한 목적의 알고리즘 여러 개 중 특정 알고리즘을 선택해야 할 때. 인터페이스는 '기능의 선언 (구현부와 분리)' 역할을 담당. 하나의 인터페이스로 여러 가지 기능을 구현하기 위한 단일 통로를 생성하는 것. ex) 워드에서 프린터 명령어 -> 어느 기종의 프린터를 사용하건 상관없이 프린트 명령어가 실행됨 기능 위임 (Delegation) 예시코드. // AObject : 객체 정의. 이 객체에서 수행할 기능을 인터페이스에 위임하는 방식 public class AObject { BInterface bInterface; // 객체 생성 시, 기능을..

[Design Pattern] Bridge

Bridge 두 가지 개념을 먼저 정리해야 한다. 기능 클래스 계층. = 새로운 기능을 추가하고 싶은 경우 구현 클래스 계층. = 새로운 구현을 추가하고 싶은 경우 즉, 클래스를 생성할 때 생성의도를 먼저 고민해야 한다. 기능을 추가할 것인가? 구현을 추가할 것인가? public interface IRobot { void powerOn(); void powerOff(); } public class RobotModel1 implements IRobot { @Override public void powerOn() { System.out.println("type1 : power on"); } @Override public void powerOff() { System.out.println("type1 : pow..