[CS] 백엔드 기초 스터디 1일차.

Java

  • High-LEVEL, Class기반, OOP언어
  • 일반적인 프로그래밍 언어
  • 한번 써서 어디에서든 사용 가능하다(크로스 플랫폼), 즉 한번 컴파일 된 java 바이트 코드는 어떤 jvm에서든 작동한다.(이미 만들어진 어플리케이션을 다르게 개발할 필요가 없어진다.)

OOP?

  • 객체지향 프로그래밍(Object)
  • 프로그래밍을 명령어의 목록에서 벗어나 서로 상호작용하는 객체들의 모임으로 생각하는 프로그래밍 패러다임을
OOP를 쓴다고 OOP를 사용한다고 보기는 어렵다.
  • Encapsulation
  • Composition, Inheritance
  • Polymorphism
SOLD principles
  • Single responsibility
  • Open-closed
  • LisKov substitution
  • Interface segregation
  • Dependency inversion

Web Application이란?

A web application (or web app) is application software that runs on a web server, unlike computer-based software programs that are run locally on the operating system (OS) of the device. Web applications are accessed by the user through a web browser with an active network connection.

(wikipedia)

  • 웹 서버에서 작동하는 웹어플리케이션 소프트웨어

WEB - HTTP

  • HyperText Transfer Protocol -> Hypertext를 전송하기 위한 규약
  • 통신 7계층의 Application Layer에서 작동
  • 일반적으로 사용하는 인터넷 브라우저는 통신을 위해 대부분 Http를 사용.

WEB - Rest

  • Representational State Transfer
  • Rest is a software architectural style.

  • 브라우저와 웹서버가 정보를 주고받기 위한 API 설계방식
  • 일반적인 Http와 기술적 차이가 있는게 아님.

웹 브라우저가 작동하는 법

20210617_050627

  • Front-End : 웹 브라우저에 게시될 HTML의 구현
  • Back-End : 브라우저에 나오는 데이터를 API를 통해 요청을 받고 조작을 하며 결과를 반환하는 서버의 구현

Spring-Boot란?

  • The Spring Framework is an application framework and inversion of control container for the Java platform. The framework’s core features can be used by any Java application, but there are extensions for building web applications on top of the Java EE (Enterprise Edition) platform. Although the framework does not impose any specific programming model, it has become popular in the Java community as an addition to the Enterprise JavaBeans (EJB) model. The Spring Framework is open source.

스프링과 스프링 부트 비교

20210617_051150

20210617_051158

  • 스프링 부트는 스프링과 거의 동일
  • 가장 눈에 보이는 차이는 main의 차이
  • 단독으로 실행 가능하냐의 문제

20210617_053051

Spring IOC Container

20210617_053111

Spring IOC Container로

Inversion of Control(제어반전)

개발자가 개발한 코드에서 제공된 라이브러리 코드를 쓰는게 아니라 기능이 구현된 라이브러리에서 개발자가 개발한 코드를 사용하여 기능을 제공하는 것.

일하는 데 필요한 물품들을 내가 사는게 아니라 회사에서 제공해준다. 어찌보면 IOC일수도.

Spring 쓰는 목적?

  • Web Application을 만드는 것

Web Application이란?

  • Http사용해서 기능을 제공하는 Application을

Http 요청을 받는 서버를 만드는 데 필요한 기능 들 중 공통된 요소는 얼마나 있을까?

  • 통신 가능한 서버설정, 디비 접근 라이브러리, 보안 관련 설정 등.

20210617_054241

Spring에서 Bean이라고 정의된 여러 객체들을 다뤄서 Web Application을 만들게 된다.

@Bean @Controller/ @MemberRegisterController @Service @Repository @Configuration @Component


Kotiln

  • JVM에 돌아가는 바이트코드를 만들기 위한 또 다른 언어
  • JAVA를 컴파일할때 나오는 바이트코드와 동일한 바이트코드가 사용되기 때문에 같은 JVM위에서 작동 됨.

  • Null-Safety, Functional programming등 자바에 포함되지 않은 기능들을 가지고 있음 ‘?’ 연산자를 통한 널 세이프티
  • ‘data class’ 와 같은 데이터 저장을 위한 클래스 정의

  • JAVA와 호환 가능
  • JAVA 코드안에서 코틀린 코드가 호출 가능하며 반대도 가능함.

방향성

  • 프로그램 입출력과 CLI(Linux)
  • 클라우드 서비스
  • Https 이론 및 적용
  • gRPC 개요
  • MSA- microservice architecture
  • Sona type Nexus
  • Nginx/ Load Balancing

20210617_060319

Main 마저 클래스가

캡슐화: 실제 구현 가리고 인터페이스만 노출시키는 것도 포함

getter 세터 통해서 제어 권한 다 가짐

  • 컴포지션 인헤리텐스, 원래 존재하던 객체내용 계승 은행객체 다시 만들 필요 없어
  • 다형성 :

솔리드

  1. 싱글 하나의책임
  • 드라이버 :나사 돌리는 용도 집에 망치 없다고 망치 대용으로 쓰면 안됨 하나의 객체는 하나의 역할

  • Open closed는 확장에 대해서는 열려있고 변형에 대해서는 닫혀있다. 하나의 객체가 변형이 되는 걸 조심해야 한다.

이 기능이 변경되는게 좋지 않다.

  • Liskov 서브스티튜션은 상속과 관련 무작정 다 상속시키고 하는데 이건 상속을 받은 상위랑 하위 객체가 존재. 이 상위 하위 객체에 대해서 리스트 인터페이스, 어레이 리스트 클래스, 링크드 리스트 클래스. 얘들이 기능이 유사한데. 서로가 어디 있는지 있는 리스트 얘들이 리스트 인터페이스 안에 있는 거. 링크드 리스트에서 List 인터페이스 받음 리스트가 가진 인터페이스와 어레이 리스가 가진 기능 어레이리스트가 리스트의 하위계층 리스트의 위치에 있는걸 뺴서 어레이리스트로 뻄. 리스트의 기능을 쓰던 애들이 어레이 리스트 를 넣으면 작동을 안한다.

인터페이스 함수 쓸떄 인텊페이스 존재하는데 극명하게 나눠진게 하나의 인터페이스 여러개 인터페이스 보다 낫다.

(X) ->

원래 인출을 하는 함수가 존재했느넫 거기에 이유태그를 붙이도록 기능 확장시키는데 이 경우에는 원래 함수 변형이 아니라 새로운 함수를 쓰는게 좋다.


디자인 패턴

추상화 하면서 OOP 목적이 재사용 성 가지는데 디자인 패턴 하면 인터페이스나 추상화를 올바르게 쓰는 법.

컴포지션 사이에 계층 존재 안함 여러개 계층이 존재 안하는데

객체가 소유할 수 있는 변수들이 꼭 일반적으로 정의되는 integer,long,boolean으로 복합적으로 가질수 있다.

상속은 그대로 상속받아서 구현한다. 이런거.


#####

자기의 컴퓨터에 존재하지 않는 걸 웹 브라우저

웹서버 웹 애플리케이션

웹 서버에서 가져오고 하드웨어 소프트웨어는 뺴고 브라우저에서 작동하는거 웹앱 서버와 통신하고 사전적인 정의와는 약ㄱ간 벗어남.

  • Internt이 원본에 네트워크 7계층 제일 위에있는거 신호들에 대한 규약을 프로토콜. 일종의 약속

브라우저에 거의 검색창으로 사용 브라우저에 http://쓰면 요청 보내겠다는 뜻. 그거에 대한 웹 서버가 존재하고 그걸 데이터 요청해서 데이터에 뿌린다.


Web- Restful

브라우저와 웹서버가 정보를 주고받기 위한 설계방식. Http와 기술적인 차이가 있는 것이 아니다.

어떤 상황에서 어떻게 쓸건지에 대해 보여주는게 Restful 설계방식

반대로 얘기가 될떄 있는데요 httpp 통신이고 통신을 하는데 이걸 놓치고 지나간다.


REST자체로는 상세한 규칙이 많다. REST 인줄 알았는데 REST 아닌 것도 많다. 찾아보자

URL타고 웹서버 타고 마크업랭귀지를 브라우저 html 를 돌려준다.

웹 브라우저가 작동하는 방법.

데이터 요청 -> 데이터 응답 웹서버 웹 브라우저 각 통신

Front-end


Spring-boot란

웹 어플 만드는 걸 추가가 되고

  • 애플리케이션 프레임 워크
  • IOC 컨테이너

SPring-Boot란 스탠드얼론으로 얘를 서버실행시켜 줄 톰캣이나 설정이 실제로 사용하기 위한 부분을 configure해놔야 정상작동하는데 스프링 부트는 jetty 서버(WAS)를 안에 내장시킴. 스프링 부트에 실행할 게 안에서 돌기 떄문에 스프링 부

스프링 부트는 xml 사용. xml이 거의 프로퍼티에 .xml 메이븐 할떄 폼.xMl, mybatis는 jdbc mapper.xMl 얘들은 스프링의 일부분이라 보기라 힘든다.

메이븐이 실제로 관리도구.

xml에 전혀 안쓴다. 스프링 일부분이 아니다.

xMl

@SpringBootApplication 안에 넣어준다. 메인 함수의 존재 유무가 스프링과 스프링부트

스프링의 프레임 워크는 톰캣에서 리소스 가지고 war

나 혼자 실행이 불가능 해서 main 이 없다.(스프링) 결과적으로는 메인이 없이 돌아간다.

컨테이너에 적합한 스프링 부트를 더 많이 씀.

IOC

  • DI에서 IOC 로 더 한단계 더 나아간다.

IOC도 회사에서 다 제공. 동작에 가까운 설명으로 드림. 스프링 부트 사용해서 계적

어노테이션

위에 어노테이션 붙이면서 스프링 프레임워크에 다뤄야할 객체라는 걸 설명하는 것.

그래서 이러한 기능들이 존재해서 컨테이너에 올릴수 있게 됨.

서비스 로직과 관련되서 @service와 @controller가 @bean = 컴포넌트든 레포지토리든 다 다뤄서 기능제공 해주는 거.

스프링 프레임워크 쓰는 목적 = 웹어플 만드는 거.

http 요청 받는 서버를 만드는 데 필요한 기능들 중 공통된 요소는 얼마나 있을까? = 개발자는 서비스 로직에 관련된 어플리케잇ㄴ에 일부로 올라간다.


완전히 정답이다라고는 못 주지만

POJO 서비스 객체같은걸 POJO 컨피규레이션과

MSA

REST.JS -> 스프링 부트에만 들어가는 어노테이션 SpringBootApplication이 존재해서 main이 존재한다.

IOC 컨테이너는 main 컨테이너 밑에 있는 다른 패키지를 다 가져와서 스프링 기준이 다 들어와진다. main

스프링부트 디버그 보면 정신 나갈 거 같아.

SPring에서는 Bean이라고 정의된 여러 객체들을 다뤄서 Web 어플리케이션을 만들게 된다.


visual studio code는 ide가 아니라 플러그인 지원 소스코드 에디터

모르는 언어를 처음 써보는건 상당히 좋다.


코틀린

변화에 대해 보수적이다. 변하는 거에 대해 민감함. 자바,스프링이 되게 많고 코틀린이 사용되는게 없다.

코틀린 쓰면 코드량이 엄청 줄었다. 그러면서 같은플랫폼 jdk에 들어가서 바이트 코드로 나옴

코틀린도 jdk에 들어가서 바이트코드로 나옴.

그래서 자바랑 코틀린은 호완 가능.

자바에서 널포인터 익셉션을 코틀린에서 방지할 수 있는 수단이 굉장히 많아짐.

자바스크립트같은 언어 쓰면 ? 이런거 쓰면서

코틀린에서는 프리미티브 타입이 없음.

int,long 은 분명한 메모리에 자기 존재 얘들은 자체로서 존재자체가 데이터 가짐.

근데 모든게 객체화 됨.

?를 넣으면 널이 될 수도 있음.

##

MSA는 쪼개서 상호작용하기 위해 만든 아키텍차 방식 여기서 GRPC 쓰는 경우가 많음.

넥서스 = 라이브러리 관리도구 자바 메이븐 레포지토리로도 되지만 npm, 이나 private관리하거 이런거처럼. go나 도커처럼 설정되는데 자바 배포

  • nginx는 서버 포트에 어떤 요청 들어오고 어느쪽으로 보내주는지

그런거들에 대한거들.







© 2021.03. by yacho

Powered by github