📚라이브러리

소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임

즉, 특정 기능을 모아둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들을 의미함.

🔎 예시

  • Python pip로 설치한 패키지/모듈 (tensorflow, pandas, beautifulsoup)
  • C++의 표준 템플릿 라이브러리 (STL)
  • Node.js에서 npm으로 설치한 모듈
  • HTML의 클라이언트 사이드 조작은 단순화하는 JQuery
  • 웹에서 사용자 인터페이스 개발에 사용되는 React.js

 

🦴프레임워크

원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대

애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발함. 앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메서드를 구현하면 됨.

🔎 예시

  • Java 서버 개발에 사용되는 Spring
  • Python 서버 개발에 사용되는 Django, Flask
  • 안드로이드 앱 개발에 사용되는 Android
  • 아이폰 앱 개발에 사용되는 Cocoa Touch
  • 웹 개발에 사용되는 Angular, Vue.js
  • 자바 기반의 JSP를 위한 프레임워크 Struts
  • 루비로 작성된 MVC패턴을 이용하는 Ruby on Rails

 

❗️프레임워크 VS 라이브러리

라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어함.
단지 동작하는 중 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐임!

프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용됨.
프레임워크에는 분명한 제어의 역전 개념이 적용되너 있어야 함.
애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작해야 함!

프레임워크와 라이브러리의 차이점은 "제어 흐름"의 권한이 어디있는가?임.

라이브러리를 사용할 때 사용자는 애플리케이션 코드의 흐름을 직접 제어해야 함.

개발 시 필요한 기능이 있을 경우 능동적으로 라이브러리를 호출하여 사용하거나 기존에 구성된 함수나 코드를 가져다 써야 함.

 

반면 프레임워크는 애플리케이션의 코드가 프레임워크에 의해 사용됨.

애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고 사용자가 그 안에 필요한 코드를 작성하게 됨.

 

여기서 제어의 역전(IoC, Inversion of Control)란?

어떠한 일을 하도록 만들어진 프레임워크에 컨트롤 권한을 위임하는 것을 의미하는데,

간단히 말해 프로그램의 제어 흐름 구조가 뒤바뀐 것을 뜻함.

 

라이브러리의 경우 애플리케이션의 흐름을 사용자가 직접 제어해야 하지만 프레임워크의 경우 코드를 연결할 수 있는 위치를 제공하고 필요에 따라 사용자가 연결한 코드를 호출하는 제어 흐름 권한을 가지고 있음.

 

'💻IT' 카테고리의 다른 글

금융 SI와 SM  (1) 2022.08.22

스프링 프레임워크 (Spring Framework)

  • 자바 기반의 오픈소스 애플리케이션 프레임워크 (=Spring)
  • 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스 제공
  • 장점
    • 경량 컨테이너
    • IoC(Invertion of Control : 제어 역행) -> 객체, 메서드 호출 시 처리하지않고 외부(Spring)에서 처리함
    • DI(Dependency Injection : 의존성 주입) -> 객체 사이에 필요한 의존 관계에 대해 스프링 컨테이너가 자동으로 연결해 주는 것
    • AOP(Aspect-Oriented Programming : 관점 지향 프로그래밍) -> 중복 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용 용이 등의 이점이 있음

스프링 부트 (Spring Boot)

  • 스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 도움
  • 내장형 톰캣을 가지고 있기 때문에 별도의 톰캣을 설정할 필요가 없어졌으며, 그렇기 때문에 독립적으로 실행 가능한 jar로 손쉬움 배포 가능
  • stater를 통한 dependency 자동화 가능 
    • 스프링에서는 각각의 dependency들의 호환되는 버전을 일일이 맞추어 줘야 했지만, 스프링 부트는 stater가 대부분의 dependency를 관리해주기 때문에 이러한 걱정을 덜게 되었음
  • XML 설정을 하지 않아도 됨

 

즉, 스프링 부트는 스프링 자체의 확장 버전!

 

데이터 모델링

업무에 필요로 하는 데이터를 시스템 구축 방법론에 의해 분석/설계하여 DB를 구축하고 개발 및 데이터 관리에 사용

데이터 모델링의 특징

  • 추상화 : 현실 세계를 간략하게 표현
  • 단순화 : 누구나 쉽게 이해할 수 있도록 표현
  • 명확화 : 대상의 애매모호함을 제거하여 정확하게 표현 (한 가지 의미로 해석되도록 표현)

모델링 관점

  • 데이터 관점 : 업무가 어떤 데이터와 관련이 있으며, 무슨 관계인지에 대해 모델링 (What, Data)                                                                   → 구조 분석, 정적 분석
  • 프로세스 관점 : 업무가 실제로 하고 있는 일은 무엇이며 어떻게 해야 하는지에 대해 모델링 (How, Process)                                                 → 시나리오 분석, 도메인 분석, 동적 분석
  • 데이터와 프로세스의 상관 관점 : 업무를 처리하는 방법에 따라 어떤 영향을 받는지에 대해 모델링 (Interaction)                                           → CRUD (Create Read Update Delete) 분석

현실세계와 데이터베이스 사이의 모델

1. 개념적 데이터 모델링 (Conceptual Data Modeling)

  • 엔티티와 속성을 도출하고, 개념적 ERD를 작성하는 단계
  • 추상화, 업무중심적, 포괄적, 개념적

2. 논리적 데이터 모델링 (Logical Data Modeling)

  • 특정 DB모델에 종속되며, 식별자를 정의하고 관계, 속성 등을 표현하는 단계
  • 정규화, 재사용성, 신뢰성

3. 물리적 데이터 모델링 (Physical Data Modeling)

  • 성능, 보안, 가용성 등을 고려하여 데이터베이스를 실제로 구축하는 단계
  • 테이블, 인덱스, 함수 등을 생성

ERD

  • 테이블간 서로 상관 관계를 그림으로 도식화한 것
  • 현실 세계의 데이터는 엔티티(Entity), 관계(Relationship), 속성(Attribute)으로 모두 표현 가능

ERD 작성 절차

  1. 엔티티 도출하고 그리기
  2. 엔티티 배치
  3. 엔티티 간의 관계 설정
  4. 관계 서술
  5. 관계 참여도 표현
  6. 관계의 필수 여부 표현

데이터 모델링 유의점

  1. 데이터 모델의 독립성
    • 독립성이 확보되어야 업무 변화에 능동적인 대응 가능
    • 정규화를 통해 중복된 데이터를 제거해야 함
  2. 고객 요구사항 표현
    • 데이터 정합성을 유지하며 정보 요구 사항을 이해하고 정확,간결하게 표현해야 함
  3. 데이터 품질 확보
    • 중복 (Duplication) : 여러 장소에 같은 정보를 저장하지 않아야 함
    • 비유연성 (Inflexibility) : 사소한 업무변화에 데이터모델이 수시로 변경되지 않도록 해야 함                                                                              → 데이터의 정의를 데이터의 사용 프로세스와 분리하여 유연성을 높임
    • 비일관성 (Inconsistency) : 모델링 시 데이터간 상호 연관관계를 명확히 정의해야 함

데이터 독립성

특정 스키마를 변경해도 상위 수준의 스키마 정의에 영향을 주지 않는 성질

 

+ Recent posts