▶
서버와 클라이언트
- 서버 : 서비스를 제공하는 컴퓨터 (service provider)
서비스를 제공하는 소프트웨어가 실행되는 컴퓨터
- 클라이언트 : 서비스를 사용하는 컴퓨터 (serivce user)
서버에 요청을 보내고 응답을 받는 역할
서버는 클라이언트로부터 요청을 받아 응답을 내려주고
클라이언트는 서버에 데이터를 요청하고 응답을 받는다.
재화와 서브스의 개념에서 가져와 서비스라고 일컫는다.
▶
웹 접근성을 위한 시맨틱 태그
시맨틱 : 의미를 가지는
<header> <nav> <aside> <section> <article> <footer>등
의미가 있는 태그의 내용을 명확하게 정의해줌
장점 : 검색엔진 최적화
시각장애를 가지고 있는 클라이언트가 스크린 리더를 사용할 때 웹 접근성이 높아짐
애플리케이션 , 기업 및 커뮤니티에서 데이터를 공유하고 재사용 할 수 있다.
▶
반응형 웹 페이지와 flex, grid 레이아웃
하나의 웹 사이트에서 여러 디바이스에 따라 UI/UX가 다르게 적용되도록 하는 것
(타블렛, 모바일 , PC 등 )
flex 는 콘텐츠 위주의 정렬 / 열 혹은 행
grid는 레이아웃 위주의 정렬 / 2차원 정렬
▶▶▶▶▶▶▶▶
JavaScript와 DOM
Dom = 문서 객체 모델
▶▶▶▶▶▶▶▶
브라우저 동작방식(요청~응답 흐름)
흐름(웹브라우저에서 Spring MVC로 요청했을 떄)
요청된 URL을 dispatcher-servlet에 전달 ->
핸들러 매핑(매핑 핸들러가 아닌듯)은 해당 URL에 매핑된 컨트롤러가 있는지 검사 후 컨트롤러에 전달 ->
해당 컨트롤러가 로직을 처리 ->
결과를 ModelAndView 객체 생성 후 담아 dispatcher-servlet에 전달 ->
dispatcher-servlet은 전달 받은 View(jsp)가 있는지 검사하기 위해 ViewResolver로 보냄 ->
ViewResolver는 받은 View(jsp)가 있는 지 검사 후 View로 보냄 ->
View에서 Model과 같이 View(jsp)를 그린 후에 dispatcher-servlet으로 전달 ->
최종적으로 컨텐츠를 클라이언트에게 전달.
++++
[http요청의 흐름]
브라우저에서 먼저 URL에 적힌 값을 파싱하여, HTTP 요청 메세지를 만든다. 만든 메세지를 웹 서버로 전송하는데, 이때 웹 브라우저 직접 전송을 하는것이 아니라 OS에 보내주십쇼~ 하고 의뢰를 하게 된다. OS는 DNS서버를 조회해서 Host이름을 보내야 할 IP 주소로 변환하게 된다.
프로토콜 스택(운영체제에 내장된 네트워크 제어용 소프트웨어, TCP/IP 계층)과 LAN 어댑터 에서 브라우저로부터 메시지를 받는다. 브라우저로부터 받은 메시지를 패킷 속에 저장한다. 그리고 수신 주소를 제어정보에 덧붙인다. 그 다음, 패킷은 LAN 어댑터에 넘긴다. LAN 어댑터는 패킷을 전기 신호로 변환시켜 LAN 케이블에 송출하게 된다.
허브, 스위치, 라우터 에서 LAN 어댑터로부터 송신한 패킷을 수신한다. 라우터는 패킷을 ISP에 전달, 인터넷으로 들어가게 된다.
액세스 회선, ISP : 액세스 회선이라는 것은 인터넷의 입구에 있는 통신 회선이다. 액세스 회선에 의해 통신사용 라우터(POP, Point Of Presence)까지 운반된다. POP를 거쳐 인터넷의 핵심부로 들어가게 된다. 고속 라우터들 사이로 목적지까지 패킷이 흘러가게 된다.
방화벽, 캐시서버 : 인터넷 핵심부를 통과한 패킷은 목적지의 LAN에 도착하게 된다. 방화벽이 먼저 패킷을 검사한 후, 캐시서버로 보내서 웹 서버까지 갈 필요가 있는지 검사한다.
웹 서버 : 패킷이 물리적 웹 서버에 도착하면, 웹 서버의 프로토콜 스택이 패킷을 추출하여 메시지를 복원하고, 웹 서버 애플리케이션에 넘긴다. 애플리케이션은 요청에 대한 응답 데이터를 넣어 클라이언트로 회송한다. 온 방식 그대로 전송되게 된다.
▶
DB 사용 이유?
[데이터베이스 장점]
데이터 중복 최소화
데이터 공유
일관성, 무결성, 보안성 유지
최신의 데이터 유지
데이터의 표준화 가능
데이터의 논리적, 물리적 독립성
용이한 데이터 접근
데이터 저장 공간 절약
[데이터베이스 단점]
데이터베이스 전문가 필요
많은 비용 부담
데이터 백업과 복구가 어려움
시스템의 복잡함
대용량 디스크로 엑세스가 집중되면 과부하 발생
▶
비동기 처리
어떤 일에 대한 요청과 응답이 동시에 이루어질 필요 없이 따로 이루어지는 것.
특정 로직의 실행이 끝날 때 까지 기다려주지 않고
나머지 코드를 먼저 실행하는 것
ajax 등..
▶▶▶▶▶▶▶▶
MVC 패턴
모델-뷰-컨트롤러의 약자로, 디자인 패턴의 하나이다. 비즈니스 처리 로직과 사용자 인터페이스를 구분시켜 서로 영향없이 개발이 가능하다는 장점이 있다.
M은 Model로 응용프로그램의 동작 및 데이터를 관리합니다.
V는 View로 UI를 화면에 표출시킵니다.
C는 Controller로 사용자에게 입력을 받아 Model을 조작하고, View를 업데이트 시킵니다
▶▶▶▶▶▶▶▶
객체지향 프로그래밍
OOP
객체 지향 프로그래밍은 인간 중심적 프로그래밍 패러다임이라고 합니다.
학교를 예를 들면, 학생, 과목, 선생 등 현실 세계에서 객체들의 필요한 특징들을 뽑아와 프로그래밍하는 것을 말합니다.
이것을 객체 지향 프로그래밍의 특징인 추상화라고 합니다.
다른 키워드로는 클래스/인스턴스, 캡슐화, 상속성, 다형성이 있습니다.
추상화
- 공통의 속성이나 기능을 묶어 이름을 붙이는 것을 말합니다. (객체지향 관점에서는 클래스를 정의합니다.)
캡슐화
- 정보은닉, 관련 된 기능을 한 곳에 모으고 분류 한 것
++
다른 클래스를 가져와 사용할 수 있고, 상속받을 수 있어 코드의 재사용성 증가
절차지향보다 유지보수가 간단
클래스 단위로 모듈화가 가능하여, 대형 프로젝트에 적합
[단점]
처리속도가 상대적으로 느리다.
객체가 많으면 용량이 커진다.
설계시 많은 노력과 시간이 필요하다.
[OOP의 6가지 키워드]
- 클래스
현실 세계의 객체를 추상화시켜, 속성과 메서드로 정의한 것 (논리적 개념)
- 인스턴스
클래스에서 정의한 것을 토대로 만든 실제 메모리상에 할당된 것, 실제 데이터
- 추상화
객체지향 관점에서 클래스를 정의하는 것, 불필요한 정보 외 중요한 정보만 표현함으로써 공통의 속성과 기능을 묶어 이름을 붙이는 것.
- 캡슐화
코드를 수정없이 재활용 하는 것을 목적으로 함. 클래스라는 캡슐에 기능과 특성을 담아 묶는다. 목적을 기준으로 묶는다.
은닉화와의 차이 - 은닉화는 캡슐화의 일부라고 볼 수 있으며, 목적으로 묶인 캡슐 안을 사용자는 볼 수 없다는 것이 은닉화.
- 상속
클래스로부터 속성과 메서드를 물려받는 것을 말함. 다른 클래스를 가져와서 수정할 일이 있다면, 그 클래스를 직접 수정하는 대신 상속을 받아 변경하고자 하는 부분만 변경
- 다형성
하나의 변수명이나 함수명이 상황에 따라 다르게 해석될 수 있음. 대표적인 다형성이 오버라이딩과 오버로딩
▶▶▶▶▶▶▶▶
상속과 다형성(오버라이딩)
부모 클래스의 속성과 기능을 그대로 이어 받는 '상속' , 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 수정 및 정의하여 사용 할 수 있음
다형성 하나의 변수명이 상황에 따라 다른 의미로 해석 될 수 있는 것을 말한다.
자식 클래스가 부모클래스의 상속을 받고 있으면 부모의 속성을 가져다가 사용할 수 있지만, 자식 클래스의 상황에 맞지 않을 때, 오버라이딩을 통해 해당 클래스에서만
함수를 재정의 할 수 있습니다.
같은 이름의 함수를 사용하거나, 매개변수의 종류를 다르게 선언하는 것으로 다양한 매개변수를 받을 수 있는 오버로딩도 있습니다.
▶▶▶▶▶▶▶▶
스프링 IoC
Inversion Of Control,
제어의 역행이라는 뜻으로,
인스턴스의 생성 및 소멸을 개발자 대신 스프링 컨테이너가 한다.
그외 제어권을 프레임워크에서 가져간다는 말로도 쓰인다.
▶▶▶▶▶▶▶▶
스프링 AOP
+++ 스프링 DI
DI 란?
Dependency Injection, 의존성 주입이라는 뜻으로,
IOC를 실제로 구현하는 방법. 의존성이 있는 컴포넌트를 개발자가 코드로 명시하는 것이 아니라 Spring이 런타임에서 연결해 처리해준다.
XML파일을 통해 설정한대로, Bean객체 생성시 의존성 주입을 수행한다.
▶
SPA와 MPA
- SPA(Single Page Application) : 한개 (Single)의 Page로 구성 된 Application
SPA는 웹 어플리케이션에 필요한 모든 정적 리소스를 최초 한번에 다운로드한다.
새로운 페이지 요청이 있을 때, 페이지 갱신에 필요한 데이터만 전달 받아서 페이지를 갱신한다.
- MPA(Muliple Page Application) : 여러개의 Spingle Page로 구성된 Application
MAP는 새로운 페이지를 요청할 때마다 정적 리소스가 다운로드 된다.
매번 전체 페이지가 다시 렌더링 된다.
▶
RestAPI
Rest란
웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일입니다.
구체적으로는 HTTP URI를 통해 어떤 자원인지 명시하고, HTTP Method(GET, POST, PUT, PATCH, DELETE)를 통해 해당 자원을 처리하도록 설계된 것입니다.
REST API란
API(Application Programming Interface)란 프로그램과 또 다른 프로그램을 연결해주는 일종의 다리라고 볼 수 있습니다. REST기반으로 서비스 API를 구현한 것입니다.
즉, HTTP 요청을 보낼 때, 어떤 URI에 어떤 메소드를 사용할지 개발자들 사이에 널리 지켜지는 약속입니다.
REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다.
웹의 장점과 HTTP의 우수성을 적극 활용할 수 있는 아키텍처로 URI를 통해서 자원을 명시하고
POST, GET, PUT, PATCH, DELETE등의 Method를 통해서 해당 자원의 행위를 지정한다.
코드의 재사용성을 높일 수 있으며 프론트엔드와 백엔드의 완전한 분업이 가능해지는 등 장점을 가진다.
▶
Git
▶
스레드와 프로세스
[스레드] 는 프로세스의 작업 실행 단위이다.
즉 멀티스레드라는 것은 한 프로세스 내에 여러개의 프로그램의 흐름을 말한다.
스레드간에는 프로세스의 주소나 자원을 공유할 수 있다. 스레드는 스레드 ID, PC, 레지스터 집합, 스택으로 구성된다.
스레드 간에는 각자 독립적으로 작업을 수행해야 하기 때문에, 각각 스택과 PC 레지스터를 받는다.
[프로세스] 는 실행 중인 프로그램이다.
디스크에서 메모리로 적재되어, CPU 자원의 할당을 받을 수 있는 것을 말한다.
프로세스 에 할당되는 메모리 안에는 스택, 힙, 데이터, 코드 영역을 포함한다.
▶
RDBMS 트랜잭션
RDBMS : 관계형 데이터베이스 관리 시스템을 의미한다.
관계형 데이터베이스를 관리하는 시스템이며 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터 베이스.
다른 테이블들과 관계를 맺고 모여있는 집합체로 이해할 수 있다.
이러한 관계를 나타내기 위해 외래키 라는것을 사용한 테이블 간 join이 가능하다는것이 가장 큰 특징.
트랜잭션이란
- DB의 상태를 변경시키기 위해 수행하는 작업 단위이다.
- 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적인 단위로 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위이다.
- 작업의 완전성을 보장해 주는 것이다.
1. 원자성 : - 트랜잭션이 DB에 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력
- 하나라도 오류가 나면 전체 과정이 취소되어야 한다.
2. 일관성 : 트랜잭션 작업 처리의 결과가 항상 일관되어야 한다는 뜻. 즉, 데이터 타입이 반환 후와 전이 항상 동일해야 한다.
3. 독립성 : 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임을 의미한다. 즉, 각각의 트랜잭션은 독립적이라 서로 간섭이 불가능하다.
4. 지속성 : 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 함을 뜻한다. 보통 commit 이 된다면 지속성은 만족할 수 있다.
Commit?
한 작업의 논리적 단위가 성공적으로 끝났고, 데이터베이스가 다시 일관된 상태에 있으며 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산을 Commit이라 한다.
Rollback?
무결성이 보장되지 못하고 실행이 취소되었을 때 이전의 상태로 원상 복귀 시키는 연산을 Rollback이라 한다.
▶
ORM
ORM은 Object Relational Mapping(객체-관계-매핑)의 약자이다.
ORM은 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도구이다.
ORM은 MVC 패턴에서 모델(Model)을 기술하는 도구이다.
ORM은 객체와 모델 사이의 관계를 기술하는 도구이다.
[❗️ORM 사용 이유]
OOP vs Relational Database
객체 지향 프로그래밍은 클래스를 이용하고 관계형 데이터베이스는 테이블을 이용하는데 객체 모델과 관계형 모델 간의 불일치가 존재한다.
ORM을 이용해서 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있다.
ORM을 이용해서 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
ORM을 이용해서 SQL 문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있다.
ORM을 이용해서 객체를 통해 간접적으로 데이터베이스를 다룬다.
이를 통해 데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여준다.
이를 통해 느슨하게 연결된, 테스트에 용이한 애플리케이션을 만들 수 있다.
[❗️ORM 장점]
직관적인 코드 (가독성) + 비지니스 로직 집중 가능 (생산성)
- ORM을 이용하면 SQL Query 가 아닌 메서드로 데이터를 조작할 수 있다.
-> 코드작성자가 객체 모델로 프로그래밍 하는 것에 집중할 수 있게 도와줌
- 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성을 높여준다.
- SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 증가한다.
재사용 및 유지보수 편리성 증가
- ORM은 독립적으로 작성되었고 해당 객체들을 재활용 할수 있기 때문이다.
DBMS에 대한 종속성 저하
- 객체 간 관계를 바탕으로 SQL을 자동으로 생성하기 때문에 RDBMS의 데이터 구조와 프로그래밍 언어의 객체 모델 사이의 간격을 좁힌다.
- 대부분의 ORM 솔루션은 DB에 종속적이지 않다.
- 프로그래머는 Object에 집중하므로 DBMS를 다루는 큰 작업에도 비교적 적은 리스크와 시간만 소요할 수 있다.
▶
[웹 소켓]
- 웹 소켓이란 두 프로그램 간의 메시지 교환을 위한 통신 방법 중 하나이다
- 현재 인터넷 환경(HTML5)에서 많이 사용된다
- 웹 소켓을 지원하는 브라우저의 경우 웹 소켓 프로토콜을 지원
- W3C와 IETF에 의해 자리잡은 표준 프로토콜 중 하나
[웹 소켓의 특징]
1. 양방향 통신(Full-Duplex)
데이터 송수신을 동시에 처리할 수 있는 통신 방법
클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다
통상적인 Http 통신은 Client가 요청을 보내는 경우에만 Server가 응답을 하는 단방향 통신
2. 실시간 네트워킹(Real Time-Networking)
웹 환경에서 연속된 데이터를 빠르게 노출
ex) 채팅, 주식, 비디오 데이터
따라서 SNS, 멀티 플레이어 게임, 구글 공유 문서 등 실시간 웹 어플리케이션 구현을 위해 웹 소켓을 사용하고 있다.
REST한 방식의 HTTP 통신에서는 많은 URI와 Http Method를 통해 웹 어플리케이션과 상호작용하지만,
웹 소켓은 초기 연결 수립을 위한 오직 하나의 URL만 존재하며,
모든 메시지는 초기에 연결된 TCP 연결로만 통신한다.
Framework와 Library의 차이점은 무엇인가요?
Framework
필수적인 코드, 데이터베이스 연동 등 개발을 할 때 필요한 기본 구조를 제공해줍니다. 개발자들은 그 위에서 코드를 작성해 Application을 완성해야합니다.
Library
Library는 특정 기능이나 함수들을 모은 도구입니다. 개발자들은 필요한 기능들을 찾아 Application에 추가해 이용할 수 있습니다.
차이점
Framework는 기본 구조 위에 필요한 코드들을 작성하여 Application을 완성하는 반면, Library는 프로그래머가 필요한 상황에 적절한 Library를 가져다 쓰는 것의 차이가 있습니다.
참고한 글 및 보면 좋은 블로그 스크랩
https://youngcade.me/level.html
https://okky.kr/articles/1255457
'개발자노트 > 혼자 끄적끄적' 카테고리의 다른 글
리액트 - 범위 슬라이더 (0) | 2023.03.28 |
---|---|
인텔리제이 커뮤니티 ( IntelliJ Community) 에서 스프링부트 + npm + node.js + 리엑트 환경 실행 (0) | 2023.01.04 |
Docker - Tomcat에 SSL 인증서 적용 (.key) , 역방향 프록시 (0) | 2022.10.19 |
Docker Oracle 연결하기 (0) | 2022.10.10 |
Docker - Spring 배포기록 (NAS를 이용한 .war 배포) (0) | 2022.10.10 |