- 담임 강사. 하석재.
- 프로젝트 시작하면 매주 조별 미팅. 프로젝트 시작하면 매주 조별 미팅.
과제, 프로젝트 진행.
- 이번 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
- 눈에 보이는 프론트엔드 / 안 보이는 백엔드
- 현재는 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)
이해해야 되는 개념
- 시스템/서비스 구분
- Front-end
- Back-end
- Presentation Layer / Business Logic Layer / Business Object Layer
- 1-tier / 2-tier / 3-tier / N-tier
- Middleware / WAS / Container / Framework
- 네트워크 프로그래밍
- 객체지향 (Object-oriented) 기술
- 클래스/인터페이스 > 타입(Type)
- 상속(extends/implements)
- 오버로딩/오버라이딩/추상클래스
- 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) 오버헤드
- 네트워크 부하 > 시간 지연
- 메모리
- 테스팅이 어려움.
- 서비스 간 트랜잭션 처리
- 커밋과 롤백 처리
- 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