SW 아카데미 특강 1

김재현·2022년 8월 13일
0

SWAcademy

목록 보기
1/4
  • 담임 강사. 하석재.
  • 프로젝트 시작하면 매주 조별 미팅. 프로젝트 시작하면 매주 조별 미팅.
    과제, 프로젝트 진행.
  • 이번 programmers 과정은 절대 쉬운 과정이 아님.
    난이도가 꽤 높다.
  • 컴퓨터 전공자가 알아야하는 언어 BIG3
    • 자바 JAVA
    • 자바스크립트 JS
    • 파이썬 Python
  • 자바 - 백엔드 하는 사람이면 다 필요.
    백엔드, 프론트엔드(안드로이드)
    자바와 자바 스프링.

  • 자바 스크립트 – 웹, 앱에 특화됨.
    프론트엔드, 백엔드(Node.js)
    학교에서 자바는 가르침. 파이썬도 가르침.

  • 파이썬.
    딥 러닝. 데이터 사이언스. 자동화(Automation)
    글루 언어. 여러 언어를 호환시켜주는 언어. 틈새를 메워준다. 효용이 높다!

하나 더 추가한다면, +고어

백엔드 과정 (난이도 ★★★★★, 활용도 ★★★, 취업 적합도 ★★★★)

자바심화+DBMS
오픈소스
객체지향 + MVC + IoC/DI
스프링 프레임워크 + 스프링 MVC
스프링 삼각형
스프링 부트 + 스프링 JPA + 스프링 시큐리티

클라우드 과정(난이도 ★★★, 활용도 ★★★★★)

리눅스
TCP/IP
도커/쿠버네틱스
가상화
미들웨어, WAS등으로 인해 백엔드와 연계됨.

AI과정 (난이도 ★★★, 활용도 ★★★★)

파이썬 + 데이터 사이언스
자바스크립트 / 마이크로 프레임워크(Flask/Django)
웹스크래핑(HTTP + HTML + DOM + BeautifulSoup + Seleniun)
EDA(Exploratory Data Analysis : 탐색적 데이터 분석)
텐서플로 2 ( 신경망/ 회귀/ 분류/ 클러스터링 /추천)
DBMS + NoSQL + 빅데이터

현재 상황(AS-IS)

  • 각 과정간 차이 해소 및 개발자가 이해해야 할 사항.
    • 리눅스는 클라우드만? GitHub는 백엔드만?
    • 데이터베이스는 공통임.
      • NoSQL이나 빅데이터를 백엔드나 클라우드에서 같이 사용.
    • 백엔드 과정의 데이터베이스 설치를 도커로.
    • 파이썬은 객체지향언어 > 텐서플로/파이토치
    • 스프링의 IoC/DI 개념은 프론트엔드인 Angular.js에서도 핵심 사항.
    • 네트워크 없이 인터넷(서버, 클라이언트, 모바일 등)이 돌아가나?
    • 대다수의 서버는 리눅스임.
  • 하나만 해서 먹고 살 수 있나 ?
    • 당연히 가능. BUT 아주 잘 해야함. 대부분의 경우 다양한 기술을 적용하고, 기술 사이클이 빠르고 경쟁이 심함. 트랜드 이해가 필수이다.

백엔드부터

객체 지향의 역사

  • 앨런 케이 - 객체지향의 아버지.
    객체지향의 핵심은 - 메시징. 캡슐화. 동적 바인딩.
  • 스몰토크 언어.
    절차지향 언어와 비슷한 시기에 개념이 나오게 됨.
  • 자바와 C++차이. - 단일상속과 다중상속.
  • 스프링. IoC/DI

Front-end / Back-end

  • 눈에 보이는 프론트엔드 / 안 보이는 백엔드
    • IBM기반의 금융시스템에서 유래.
  • 현재는 Presentation Layer / Business Logic Layer / Business Object Layer로 구분.
    표현 계층 / 비즈니스 계층 / 비즈니스 객체 . 뒤의 두 개가 백엔드가 나눠졌다고 보면 됨.

Spring, SpringMVC, SpringBoot

  • 스프링 프레임워크.
    • 비즈니스 로직을 프로그래밍하는 분산컴포넌트 기반의 프레임워크.
    • DI(Dependency Injection) 기반 프레임워크.
  • 스프링 MVC
    • 표현계층(Presentation Layer)을 담당. cf. Struts 1/2
    • SpEL(Spring Expression Language)를 사용해서 렌더링(rendering)
      • 표현계층에서 최대한 로직관련 코드를 제거.
        비즈니스 계층에는 코드가 있어야되지만, 표현계층에는 코드를 최대한 제거해야한다.
    • 프론트 컨트롤러 패턴 적용한 MVVM(Model/View/ViewModel) 사용
  • 스프링부트
    • 스프링 프레임워크에서 가장 어려운 설정 / DI관련 자동화 적용해서 사용하기 쉽도록 개선.
      DI 주입을 더 편하게 해줌. 스프링 프레임워크가 수동이라면, 스프링부트는 오토.

Spring JPA(Java Persistence API)

  • 비즈니스 오브젝트를 담당하는 프레임워크.
  • ORM(Hivernate) 와 SQLMapper(MyBatis)
    • ORM이 JPA로 됨.

이해해야 되는 개념

  • 시스템/서비스 구분
    • Front-end
    • Back-end
      • Presentation Layer / Business Logic Layer / Business Object Layer
    • 1-tier / 2-tier / 3-tier / N-tier
    • Middleware / WAS / Container / Framework
  • 네트워크 프로그래밍
    • 소켓 프로그래밍 기반 vs RPC/RMI
      • Sun RPC vs DCE RPC
  • 객체지향 (Object-oriented) 기술
    • 클래스/인터페이스 > 타입(Type)
      • 메소드, 필드
    • 상속(extends/implements)
      • 단일상속 vs 다중상속
    • 오버로딩/오버라이딩/추상클래스
    • DDD(Domain-Driven Design)/TDD(Test-Driven Development)
    • MVC(Model-View-Controller)
      • MVVM(Model/View/ViewModel) > SpringMVC 기반

객체지향

  • 배경
    • 소프트웨어 위기(software crisis)
      • 디버깅의 비중이 기하급수적으로 증가.
  • 객체지향
    • 캡슐화 (encapsulation) >> 아주 효용성이 높다.
      • 전역변수에 너무 많이 접근함 > 전역변수를 private으로 정의해 제한.
      • getter/setter를 통해서만 접근하자.
    • 코드 재사용 (inheritance) >> 생각보다는 애매했다. 보완 필요.
      • MS/구글 등의 평가(기존 구축해놓은 코드가 있는 곳. IP의 재사용이 가능한 곳) : 아주 좋은 기능.
      • IP(지적재산권) 코드 구할 수 없다면? : 쓸모 없는 기능.
      • 코드가 공개되지 않으면서 재활용 가능한 방법은?
        • 컴포넌트(component) - 스프링 >> MSA(Micro Service Architecture)
  • 같은 표현이라고 할지라도 받아들이는/표현하는 의미가 달라질 수 있다.

tier

  • 1-tier (서버 클라이언트가 한 번 중첩됨.)
    • Web Browser(Client) - Apache WebServer(Server)
  • 2-tier
    • Web Browser - WebServer/DB Client - DB Server
      WebServer(JSP)안의 내용이 실행되면서 데이터 베이스에 접근, 내용이 읽어와 화면에 출력. 실제 내가 원하는 내용은 DB에 있는데, 요청은 웹 서버에 했을 때.
  • 3-tier
    • Web Browser - WebServer/WAS client - WAS Server/DB Client - DB Server
    • 중간에 여러 처리를 끼워넣음.
    • 트랜잭션/로드밸런싱, 장애대응, 로그 취합..
  • N-tier

왜 백엔드를 해야할까?

  • 전자정부 프레임워크
    • 행안부의 NIA(정보화진흥원 > 한국지능정보사회진흥원)
    • 주로 자바기반의 스프링 프레임워크 기반.
    • 정부 서비스의 모든 서버가 있다고 보면 됨.
  • 일정규모 이상의 프로젝트에서 사용 의무화(법제화).
    • 공공사업에서는 전자정부 프레임워크를 사용해야한다.
    • 대학교 두 군데에서 교육한다.

exploit (착취)

  • 보안 취약점(해킹)
  • 재정거래

개발자의 딜레마

  • 오픈소스 사용 : 내가 짠 것이 아니다. 레퍼런스 사용의 문제점.

객체지향의 상속은

  • 상속은 소스레벨 재사용성
    • 하지만 소스가 있어야만 가능하다는 한계가 있다.

컴포넌트

  • 컴파일된(바이너리)레벨의 재활용 기술 등장.
  • 프로퍼티(Property)를 통한 호출 및 제어가능
    • Reflection - 자바
    • Interface Definition Language(IDL) - MS IDL (MIDL)
  • CORBA (Common Object Request Broker Architecture)
    • 원조.
  • MS
    • COM (Compoment Object Model) / COM+ / DCOM(Distributed COM)
    • ActiveX
  • 자바
    • 자바빈(Java Beans)
    • Enterprise Java Beans(EJB) : 스프링 출시 전에는 이것을 썼음.
      • Enterprise : 서버에서 돌아간다는 뜻.
    • Spring Bean

분산 컴포넌트 기술

  • RMI/RPC 기술을 응용, 컴포넌트를 분산아키텍쳐에서 사용하도록 만듬.
    • RMI/RPC : 함수 호출식으로 네트워크 작성
  • COBRA(IIOP)가 원조.
  • JavaEJB(Enterprise Java Beans) / MS DCOM(Distributed COM)
  • 현재는 Spring Bean이 주류.
  • SOA/MSA로 발전.

SOA

  • 서비스 기반 구조 (Service-Oriented Architecture)
  • 모든 것을 웹서비스(WebService)로 구현
  • WS-* 되어있는 프로토콜의 집합.
    • 주로 xml로 되어 있고 SOAP(Simple Object Access Protocol) 기반
    • 무거운 서비스로 인해 JSON과 RESTful로 대체되어 발전.
  • ESB(Enterprise Service Bus)때문에 무거워짐.
    • 복잡하고 무거워서 실패.

MSA

  • Micro-Service Architecture
  • SOA를 가볍게 만든 구조
    • 기존의 모노리틱 구조를 개선

  • 일반적으로 모노리틱 구조는 따로따로 증설이 안됨. 하지만,
    어플리케이션 로직을 분리, 여러 개의 어플리케이션으로 마이크로 서비스를 만들고, 서비스로 별도 로드밸런서를 연결하는 방식.

  • 데이터 저장방식
  • 각자 따로 쪼개서 저장하자.

  • API Gateway
    • SOA의 ESB(Enterprise Service Bus)의 경량화 버전
    • 미들웨어

  • 조각을 내더라도 효율성을 유지해야한다.

MSA 장점

  • 배포
    • 필요한 부분만 부분 배포 가능.
  • 확장성
    • 부하가 많은 서비스만 확장 가능.
    • 독립적으로 서비스를 증설하거나 데이터 저장을 분리하거나 할 수 있다.
  • 컴포넌트별로 팀을 독립적으로 운영 가능.
    • 컨웨이의 법칙(Conway's law) : 소프트웨어의 구조는 그 소프트웨어를 만드는 조직의 구조와 일치한다.

MSA 단점

  • 성능
    • 마샬링(Marshalling) 오버헤드
      • xml/JSON <-> Java Object
    • 네트워크 부하 > 시간 지연
  • 메모리
    • 메모리 효율성이 떨어짐
  • 테스팅이 어려움.
  • 서비스 간 트랜잭션 처리
    • 커밋과 롤백 처리
      • XA(eXtended Architecture) 분산 트랜잭션 필요
  • 분산형 거버넌스(Governance)
    • 시스템을 개발하는 조직의 구조와 프로세스가 변해야 함.
  • 비효율이 발생할 수 있다. 채널이 복잡해지고 작업이 느려질수 있다.

MSA와 오케스트레이션/PaaS

  • 오케스트레이션과 좋은 궁합.

MSA 현재 상황

  • 구현기술
    • JSON-RPC(text기반) > gRPC(binary 기반)
  • 트랜잭션
    • Local > Global(분산) 트랜잭션
    • Commit/Rollback > 2 Phase Commit(2PC)
  • API 게이트웨이
    • Kong > Netflix OSS(zuul)
    • 배민, 쿠팡 등등..
  • 스프링 클라우드 vs Kubernetes

0개의 댓글