시스템 구조

hyyyynjn·2021년 5월 31일
1
post-thumbnail

✅클라이언트

안드로이드

  • MVVM 디자인 패턴
  • Databinding
  • RxJava

MVVM

  • View가 ViewModel이 가진 데이터를 옵저빙 하고 있다가 ViewModel의 데이터가 변경되면 자동으로 View도 갱신되는 방식
  • ViewModel은 View에 대한 참조를 가지지 않는다

Databinding

  • findViewById 같은 것 없이 바로 xml의 UI 구성요소와 java간의 데이터를 바인딩 할 수 있도록 해준다
  • 화면 데이터 상태와 세션 데이터 상태가 일치하도록 만들 수 있다
  • MVVM과 별개의 개념이다

RxJava

  • ReactiveX(Reactive Extensions)를 Java로 구현한 라이브러리
    • 🖐ReactiveX
      • 관찰 가능한(Observable) 스트림을 사용하는 비동기 프로그래밍을 위한 API
  • 🖐반응형 프로그래밍(Reactive Programming)
    • 시간 순으로 들어오는 모든 데이터의 흐름을 스트림(Stream) 으로 처리한다.
  • 관찰 가능한(Observable) 스트림을 사용하는 RxJava
    👉 화면(UI)을 변경할 수 있는 것은 메인 쓰레드 뿐이기 때문에 비동기 처리가 필요하다
    👉 비동기 처리 (동시성 문제, 다중 이벤트 처리, 백그라운드 처리) 등의 문제를 아름답게 해결해준다

✍라이브러리

  • 라이브러리
    • Koin
    • AppAuth
    • STOMP API
    • FCM : firebase-messaging
    • Retrofit2

👏Koin

  • Kotlin 개발 환경에 쉽게 적용할 수 있는 경량화된 DI 프레임워크

    🖐DI(Dependency Injection; 의존성 주입)

    • 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉
    • 클래스 내부에서 객체를 생성하지 않고 외부에서 객체를 생성해 주입 받는 방식
    • 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라 특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것
      👉DI로 얻을 수 있는 장점
      • 클래스에 변화가 생기면 해당 의존성을 갖는 모든 클래스가 변경해야하는 문제를 해결해준다
      • 객체 간의 의존(종속) 관계를 직접 설정할 수 있다
      • 객체 간의 결합도를 낮출 수 있다
  • ❓ 그럼 왜 안드로이드에서 DI 적용해 ❓
    • Activity나 Fragment에서 객체를 생성하는지에 따라 context가 계속 바뀌기 때문에 같은 클래스 타입 객체임에도 다르게 동작한다.
    • context의 영향을 받지 않고도 공통으로 재사용할 수 있는 객체를 구현하기 위함이다.

👏AppAuth

  • AppAuth는 OAuth 2.0 및 OpenID Connect를 사용하여 최종 사용자를 인증하고 권한을 부여하는 네이티브 앱용 클라이언트 SDK이다.

🖐OAuth 2.0

  • OAuth(Open Authorization)
    • 인증을 위한 오픈 표준 프로토콜이다
    • 제 3의 앱이 자원의 소유자인 서비스 이용자를 대신하여 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법
      • 쉽게 말하면, 구글, 페이스북, 카카오톡으로 로그인이 가능하도록 하는 API이다

🖐OpenID Connect(OIDC)

  • OpenID Connect가 OAuth 2.0을 기반으로 상위계층에서 좀 더 간편하게 인증을 처리할 수 있도록 고안되었다
  • 신원확인 서비스(IDP)를 통해 보다 안전한 방식으로 사용자 정보를 제공한다

🖐SDK

  • Software Development Kit 의 약자이며, 프로그래머들을 위해서 제공하는 개발 도구들이다.
  • SDK 안에는 IDE(통합개발환경) 을 포함하는데, 이에는 여러 API, 디버깅, 문서 등 여러 도구가 들어가있다
  • SDK 의 종류
    • 안드로이드 SDK : 안드로이드용 앱개발을 위한 도구
    • JDK : 자바 개발자를 대상으로 오라클에서 제공하는 도구

👏STOMP API

  • STOMP (Simple (or Streaming) Text Oriented Message Protocol) 는 텍스트 기반의 메세징 프로토콜이다
  • STOMP 사용 환경은 TCP 나 WebSocket 과 같은 신뢰성있는 양방향 streaming network protocol 상에 사용된다.
  • SEND → request → response → Message 과정으로 메시지가 전송된다
    • SEND에서 /app, /topic 을 보낸다
      • /app 으로 channel broker을 등록한다
      • /topic을 통해 통신한다

👏FCM : firebase-messaging

  • Firebase 클라우드 메시징(FCM)은 무료로 메시지를 안정적으로 전송할 수 있는 교차 플랫폼 메시징 솔루션이다.
  • 서버에서 클라이언트(iOS, Android, Web 등) 앱으로 알림을 보낼 수 있다.
  • 클라이언트 앱에서 서버로 알림을 보낼 수 있다.

👏Retrofit2

  • 안드로이드에서 API서버와 통신하기 위한 방법으로 사용되는 통신 라이브러리이다.
  • REST API 통신을 위해 구현된 동일 Squareup사의 OkHttp 라이브러리의 상위 구현체이다.
    • Retrofit은 OkHttp를 네트워크 계층으로 활용하고 그 위에 구축됨
  • AsyncTask 없이 Background Thread 실행 -> Callback을 통해 Main Thread에서 UI 업데이트되는 특징이 있다

✅서버

Spring Boot Application

  • Spring Boot

Spring Boot

👏스프링 프레임워크

  • 자바 기반의 애플리케이션 프레임워크이다
    • 프레임워크 = 디자인패턴 + 라이브러리

🖐디자인 패턴

  • 객체를 어떻게 설정하고 객체 간 관계를 어떻게 정할 지 중요해짐
  • 설계 개념을 설명하기 위해서 기존 개발 건 중에 설계가 잘 된 케이스들을 뽑아서 이름을 붙이고 목적과 용도, 그리고 구현 방법을 잘 정리해놓은 것이 바로 디자인 패턴이다

🖐라이브러리

  • 어떠한 기능을 다른 사람들도 사용할 수 있도록 만들어 놓은 것

🖐프레임워크

  • 애플리케이션을 개발할 때 사용하는 일종의 틀이다
  • 프레임워크를 사용하면 여러가지 유용한 기능을 통해 개발자는 구현해야 하는 핵심 로직에 집중할 수가 있다
  • ✋스프링의 핵심 기능
    • IoC (Invertion of Control: 제어 역행)
      • 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것
      • 개발자는 프레임워크에 필요한 부품을 개발하고 조립하는 방식의 개발을 하게 된다.
      • 조립된 코드의 최종 호출은 개발자에 의해서 제어되는 것이 아니라 프레임워크의 내부에서 결정된 대로 이뤄진다.
    • DI (Dependency Injection; 의존성 주입)
      • 제어의 역행이 일어날 때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하기위해 사용
    • AOP (Aspect-Oriented Programming; 관점 지향 프로그래밍)
    • 스프링 MVC 웹 애플리케이션과 RESTful 웹 서비스 프레임워크
    • JDBC, JPA, JMS 지원
      👉 스프링은 여러가지 모듈로 이뤄져 있어서 내가 필요한 모듈만 뽑아서 사용할 수가 있다

👏스프링 부트

  • 스프링의 여러가지 프로젝트 중 하나이다. (스프링 부트는 스프링 프레임워크라는 큰 틀에 속하는 도구)
    • 설정할 내용도 굉장히 많은 스프링의 단점을 보완하여 자동화시켜 간단히 실행할 수 있는 것이 스프링 부트이다.
    • 설정할 것도 거의 없고 그냥 실행 만 시키면 내장 서버에 배포된다.
  • ✋스프링 부트의 핵심 기능
    • 내장 서버
      • WAR 파일을 배포할 필요 없이 내장된 Tomcat, Jetty, Unertow 를 이용해 실행할 수 있다
    • starter (특정 목적을 달성하기 위한 의존성 그룹)을 통한 dependency 자동화
      • 라이브러리 관리가 간단해졌다
      • 많이 사용하는 라이브러리를 모아놓은 스타터 (Starter) POM 파일로 메이븐 설정이 쉬워졌다
    • jar file을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다

✍라이브러리

  • 라이브러리
    • Websocket
    • Lombok
    • JPA (spring-boot-starter-data-jpa)
    • Jsoup
    • jbcrypt
    • spring-boot-starter-mail
    • firebase-admin

👏Lombok

  • 자바 클래스를 만들때 자주 사용되는 getter/setter나 toString 등의 코드를 애너테이션으로 대체해서 선언하고 java 코드를 컴파일 할 때 그에 맞는 코드를 생성해주는 것
    • @Data 어노테이션
    • @Builder 어노테이션

👏JPA (spring-boot-starter-data-jpa)

  • JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다
    • 내부적으로 JDBC API를 활용하여 모든 SQL에 대해 개발자 대신 JPA가 자동으로 해결해 준다.
    • JPA라는 ORM 기술 표준을 구현한 것이 Hibernate이다
      • JPA를 사용하려면 Hibernate를 사용하면 된다.
        👉 이를 통해 개발자는 관계형 DB를 사용해도 객체지향 어플리케이션 개발에 집중할 수 있게 된다

✋ORM

  • ORM(Object-Relational Mapping)은 객체와 관계형 DB를 매핑한다는 뜻이다
    • 객체를 마치 자바 컬렉션에 저장하듯 저장할 수 있고, 이에 대해 ORM 프레임워크가 적절한 SQL을 생성해서 DB에 객체를 저장해준다.

✋Hibernate

  • 자바 진영의 다양한 ORM 프레임워크 중 가장 많이 사용되는 성숙한 프레임워크

👏Jsoup

  • jsoup은 자바(Java)로 만들어진 HTML 파서(Parser)이다.
    • URL, 파일, 문자열을 소스로 하여 HTML을 파싱할 수 있다.
    • DOM 구조를 추적하거나 익숙한 CSS 선택자를 사용하여 데이터를 찾아 추출할 수 있다.
    • 크롤링 작업에 사용되는 라이브러리이다

👏jbcrypt

  • java로 만들어진 Bcrypt
  • Bcrypt
    • 단방향 암호화를 위해 만들어진 salting과 키 스트레칭을 구현한 해시 함수 중 대표적인 함수

0개의 댓글