728x90

오늘 수업에서 나왔던 내용 중 이전부터 궁금했던 '클라이언트 - 서버'에 대해서 찾아보았다.
그리고 수업중 인상 깊은 방법이 있어서 그것에 대해 정리해보고자 한다.

데이터 영속성 부여과정에서 일어난 프로그램 디자인에 관련된 내용이다.


클라이언트💻 - 서버 ⚙️

클라이언트 - 서버란?

클라이언트 서버 모델(client–server model)은 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 어플리케이션 구조이자 네트워크 아키텍처를 나타낸다. 월드 와이드 웹(WWW)도 이에 해당 하며, 클라이언트-서버로 구성되어 있다고 하면 일반적으로 입력/출력을 처리하는 어플리케이션과 어플리케이션의 요청을 받아서 데이터를 처리하거나 서비스를 제공하는 컴퓨터(서버)로 구성되어 있다는 것을 의미한다.


수업에서 MySQL서버를 이용하여 데이터를 처리하는 프로그램을 작성했다.

이때 MySQL서버가 서버의 역할을 하고, 이를 요청하는 Java로 작성한 우리의 프로그램이 클라이언트가 된다고 할 수 있다. 일반적으로 Java를 이용하여 Database를 이용하기 위해 JBDC를 사용한다.

JDBC(Java Database Connectivity)

JDBC는 자바 프로그래밍 언어를 사용하여 데이터베이스와 상호 작용하기 위한 자바 API(애플리케이션 프로그래밍 인터페이스)

  • 주요 기능
    1. 드라이버 매니저(Driver Manager): JDBC 드라이버를 로드하고 데이터베이스 연결을 관리하는 역할
    2. JDBC 드라이버: 특정 데이터베이스 관리 시스템에 대한 JDBC 드라이버를 사용하여 해당 DBMS와 통신
    3. 연결(Connection): 데이터베이스와의 연결을 설정하고 관리하는데 사용
    4. 질의(Statement): SQL 문을 데이터베이스에 보내기 위한 객체로, 정적 질의문을 실행
    5. 결과 집합(ResultSet): 데이터베이스로부터 반환된 쿼리 결과를 보관하고 조작

프로젝트의 패키지 구성

프로젝트 작업 중 매우 인상깊었던 패키지 구성과 코드의 일부이다.

패키지 구성을 보면 QuotationMemoryRepository와 QuotationFileRepository를 확인할 수 있다.

Memory가 먼저 생성되었으며, 이후에 File이 생성되었다. 여기서 인상적인 부분은 아래의 코드를 추가로 봐야한다.

 

왼쪽의 코드와 위의 패키지 구성을 같이 살펴보면 QuotationService 클래스에서 생성자를 통해 QuotationFileRepository를 가져온 것을 볼 수 있다.

1. 원래 quotationRepository필드에는 QuotationFileRepository이 아니라 QuotationMemoryRepository가 들어가 있었다.

처음에 프로그램을 작성할 때, 데이터를 메모리에 저장하고 종료되면 데이터가 사라지는 형태로 구성을 했었다. 데이터가 저장이 안되는 환경이므로, 2. 데이터를 파일에 저장하여 보관하기 위해 QuotationFileRepository를 생성하고 txt파일로 CRUD를 실시하는 클래스를 새로 만들고 이를 프로그램에 구현했다.

새롭게 추가된 기능을 프로그램에 적용하기 위해 한 행동은 3. QuotationMemoryRepository -> QuotationFileRepository로 객체만 변경될 수 있도록 글자 몇개 변경한게 전부이다.

내가 혼자서 프로젝트를 만들었다면 File로 CRUD를 실시하기 위해 1번의 새로운 클래스를 만드는 것을 했겠지만 Service파트에 새로만든 File CRUD 기능을 덕지덕지 엄청 추가 했을 것이다. 그리고 메모리에 저장하는 방식과 파일로 저장하는 방식이 공존했을 것이다.

단순히 클래스명을 규칙적으로 생성하여 관리하는 것을 통해서 이제는 필요없어진 기능인 메모리 저장기능을 제거하고 파일 저장기능으로 대체 하는 것을 아주 손쉽게 달성하는 순간이었다.

이런 패키지 구성방식을 직접보고 경험해도 당장은 따라할 수 없겠지만 향후 추가될 수 있는 기능에 대비하여 프로그램을 작성하고 활용하는 디자인 패턴을 배울 수 있었다는 것만으로도 좋은 경험이 아닐까 생각된다.

728x90

+ Recent posts