。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-50일차(7월5일)] - 웹프로그래밍 31일차

quarrrter 2023. 7. 5. 17:37

DAO(Data Access Object) 도입

현황

APP: 메뉴 관리, 데이터 파일 입출력, 

MemberListListener: 회원목록 조회, ui, 데이터 조작 

List: Data 저장소 

 

만약,,

 Excel or Database or MongoDB or Redis 등등으로 저장소 변경을 하게 되면 MemberListListener의 데이터 조작 방식이 바뀌기 때문에 모든 Listener 클래스를 변경해야한다.

그리고 APP의 데이터파일 입출력 방식도 바뀌어야한다.

=> 유지보수 비용이 많이 든다. 

 

List: 인덱스 기반 메모리 저장 

Database : table 기반 RDBMS

MongoDB : document 지향 데이터베이스 

Redis : key-value 구조의 비정형 데이터저장, 메모리 DB

 

개선: DAO 도입 데이터 저장 및 조작 담당 

(데이터 저장 방식이 변경되더라도 App과 Listener가 영향받지 않도록 데이터 I/O, 데이터 조작 기능을 별도의 클래스로 분리하여 캡슐화 한다. )

App : 메뉴관리

MemberListListener : ui

MemeberDao : 데이터 파일 I/O, 데이터 조작 <= 데이터 처리 방식을 알지 못하게 감춘다. = 캡슐화(encapsulation)

List : Data 저장소 

 

 

DAO 만들기 

데이터 저장방식을 List에서  Excel or Database or MongoDB or Redis로 변경할 때 DAO 클래스를 변경해야할까?

List 방식으로 데이터를 저장하고 기존 프로젝트는 게속 그 방식으로 돌아가길 원한다.

기존 DAO 클래스를 변경하면 안된다. 

새 DAO를 만들어야한다. 

저장 방식 변경에 맞춰 DAO클래스를 새로 정의한다.

DAO를 교체하면 모든 Listener의 코드를 변경해야한다. => 유지 보수 비용 증가 !

그래서 ...!

인터페이스를 생성해서 ,,,,

Listener와 DAO를 인터페이스로 연결하면 DAO 클래스를 교체하더라도 Listener클래스를 변경할 필요가 없다. 

 


37. 네트워킹을 통한 데이터 공유

 

1. 현황

데이터 파일이 로컬에 저장된다.. App간 데이터를 공유할 수 없다. 

 

2. 데이터 파일을 별도의 컴퓨터에 분리 / 공

=> 원격 컴퓨터에 파일을 저장 및 공유 

그 문제점: 여러 App이 같은 파일을 편집하다보면 파일의 데이터가 깨질 수 있다.

 

또해결

3.데이터 관리 기능을 별도의 App으로 분리  - App이 직접 데이터나 파일에 접근하는 것을 막는다. 

client app: 서비스를 요청하는 쪽 // server app: 서비스 요청에 응답하는 쪽

원격 컴퓨터의 App이 데이터 등록/조회/변경/삭제를 관리 .

=> 같은 파일(or 데이터)를 동시에 접근할 때 발생할 수 있는 문제를 피할 수 있다. 

 

S/W(System) Architecture : Client/Server Architecture ( C/S Architecture) : .앱 쪼개는거 

App을 쪼개서 Client App, Server App을 만들것임. 

local: 사용자와 수신 Client App,

remote: Server App 데이터를 다룸. 

 

 

app이랑 서버 나누고 

build gradle 파일 수정하고 

** 소켓 연결

 

방화벽끄기

IP와 port 번호 

port 번호 16비트: 0번부터 ~ 65535번까지 가능

0~1023: well-known port (쓰지 말기) 암묵적?으로 약속된 쓰임새가 있는 포트 번호들임 

1024~49151: registered port : 개발자가 지정

49152~65535: dynamic port: client에 부여하는 port . os가 자동부여 (개발자가 지정할 수 없다!!!!)

모든 프로그램은 어드레스랑 포트 번호가 있어야 소통가능 ... 

유효하지 않은 포트번호면 ,, 타임아웃 ; 

보내고자 하는 데이터가 많으면 쪼개서 패킷으로 만들어서 보냄. 패킷이 가고 도착하는 순서는 다 다른데 받는 쪽(ip?)에서 기다렸다가 다 받아서 순서대로 정렬해서 출력 

 

tcp의  3-way handshake

클라이언트와 서버가 3way로 주고 받고하면서 접속 요청 수락 . 

 

NetworkDao ;;;;;;;;;;;;;;;;;

 

저기서 8888