출처: (https://www.inflearn.com/pages/weekly-inflearn-12)
-- 프로그램을 개발하기 위한 구조를 제공하는 개발 환경이다. 소프트웨어 개발자가 응용 소프트웨어의 표준 구조를 구현하기 위해 사용하는 소프트웨어 프레임워크로 구성되는데 즉, 프로그래밍에서 특정 운영체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리의 모임이라고 할 수 있다. 코딩할 때 자주 쓰이는 여러 클래스에 복잡하거나 반복되는 작업에 대한 부담을 덜어줄 뿐만 아니라 개발에 들이는 시간 대비 프로그램의 질을 높일 수 있다. 하지만 학습시간이 길고 유연하게 개발하는 데에는 한계가 있다.
-- 과거 J2EE 기술은 너무나 복잡하고 방대했기 때문에, 그 전체를 이해하고 개발하기에는 어려운 점이 많아서, 특정 기능을 위주로 간단한 jar파일 등을 이용해서 모든 개발이 가능하도록 구성된 프레임워크이다.
-- 소프트웨어 개발자의 소셜 네트워크에 의해 설계된 소프트웨어 개발용 템플릿이다. 무료로 사용할 수 있으며 웹사이트, 사용자 인터페이스 및 기본 소프트웨어 응용 프로그램을 만드는데 사용할 수 있는 도구 모음이다. 완전한 시스템이 아니라 개발의 생산성을 높이기 위한 장치이다.
-- [프레임워크의 종류]
-- 자바 Object와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object Relational Mapping) 프레임워크이다. SQL을 별도의 파일로 분리해서 관리하게 해주며, Hibernate나 JAP(Java Persistence Api)처럼 새로운 DB 프로그래밍 패러다임을 익혀야하는 부담없이 SQL을 그대로 이용하면서 JDBC 코드 작성의 불편함도 제거해주고 도메인 객체나 VO객체를 중심으로 개발이 가능하다는 장점이 있다.
-- 프론트엔드 개발을 빠르고 쉽게 할 수 있는 프레임워크이다. HTML과 CSS 기반의 템플릿 양식이며 이미지, 버튼, 네비게이션 및 기타 페이지를 구성하는 요소가 포함되어있다. 자바스크립트를 선택적으로 확장하여 사용 할 수 있으며, 깃허브의 오픈 소스로 사용이 가능하여 상업적으로도 이용이 가능하다. HTML과 CSS, Javascript의 기본 지식을 가진 사람은 누구나 쉽게 접근하여 사용이 가능하며 반응형 CSS를 포함한 단일코드로 모든 디바이스에 적용할 수 있다. 그리고 모든 최신 브라우저와 호환이 가능하다.
-- 생산성을 향상시키기 위해 반복적으로 나타나는 문제 해법들을 전문가들의 경험을 모아서 정리한 일관된 솔루션이라 할 수 있다. 유사한 문제를 해결하기 위해 설계들을 분류하고 각 문제를 유형별로 가장 적합한 설계를 일반화하여 체계적으로 정리해 놓은 것으로 소프트웨어 개발에서 효율성과 재사용성을 높일 수 있다. 또 디자인 패턴을 참고하여 개발할 경우 개발의 효율성과 유지보수성, 운용성 등의 품질이 높아지며, 프로그램의 최적화를 돕는다. 소프트웨어 아키텍처나 소프트웨어 프레임워크와는 다르게 기능보다는 구조를, 가독성 및 확장성에 비중을 둔다.
-- 소프트웨어의 골격이 되는 기본 구조로, 소프트웨어 전체에 대한 큰 밑그림이다. 소프트웨어 구성 요소의 유기적인 결합 형태와 전체 구조이다. 아키텍처는 전체 시스템의 구조나 설계 모형을 재사용할 때 사용하지만 디자인 패턴은 구현단계에서 해결 방안까지도 제공한다. 아키텍처는 모든 종류의 시스템에 적용이 가능하지만 디자인 패턴은 일관된 문제에 적용된다.
-- 응용 프로그램 개발이나 문제 해결을 수월하게 하기 위해 설계와 구현을 재사용 가능한 형태로 제공하는 소프트웨어 환경을 말한다. 소프트웨어 프레임워크는 지원 함수, 컴파일러, 라이브러리, 등과 같이 다양한 소프트웨어 개발을 가능하게 하는 여러 형태의 컴포넌트들을 말한다. 완전한 제품이 아니며 개발자의 코드나 사용자 데이터가 필요하다. 프레임워크는 소프트웨어 개발 시 효율성 향상, 개발 시에 편의성으로 제공하지만 디자인 패턴처럼 해결 방안은 제시하지 못한다.
-- 공공사업에 적용되는 자바 기반의 개발 프레임워크로 정보시스템 개발을 위해 필요한 기능 및 아키텍처를 미리 만들어 제공함으로써 효율적인 애플리케이션 구축을 할 수 있도록 지원하는 프레임워크이다. https://www.egovframe.go.kr/home/main.do
-- 웹 페이지를 여러 개의 조각으로 나누어 하나의 페이지로 조립해서 사용할 수 있게끔 도와주는 프레임워크이다. 상단 메뉴, 좌측 메뉴 등 공통적으로 사용할 페이지들을 모듈화해서 변경되어야 하는 부분만 쉽게 변경하여 사용할 수 있게 돕는다.
-- 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용을 높여주는 프로그래밍 기법이다. AOP는 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정없이 공통 기능을 적용할 수 있게 만들어준다. 즉, AOP는 핵심 기능의 코드를 수정하지 않으면서 공통 기능의 구현을 추가하는 것을 말한다.
-- [AOP의 공통 기능]
-- 미국 Sun Microsystems사에서 제창한 규약으로 기업 환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델이다. 일반적으로 업무 로직을 가지고 있는 서버 애플리케이션을 EJB라고 한다. 서버 애플리케이션의 개발을 용이하게 하여 다중다양한 플랫폼과 제품간의 이동성을 실현하기 위하여 비즈니스 로직과 시스템 서비스를 이용하는 로직을 분산해 그 사이의 규약을 규정하고 있다. 비즈니스 로직을 탑제한 부품을 "Enterprise Bean"이라 한다. DB처리, 트랜잭션 처리 등의 시스템 서비스를 이용한 로직을 감추고 있는 부품을 "컨테이너"라고 한다. 개발을 하다보면 많은 객체들을 생성하게 되는데, 이러한 비즈니스 객체들을 관리하는 컨테이너를 만들어서 필요할 때마다 컨테이너로부터 객체를 받는 식으로 관리하는 것을 말한다.
-- 오래된 방식의 간단한 자바 오브젝트를 말한다. 즉, 특정 기술에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 의미한다. JAVA EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 무거운 객체를 만들게 된 것에 반발하여 사용하기 시작한 용어이다.
-- 하나의 객체가 다른 객체의 의존성을 제공하는 기술이다. "의존성"은 하나의 객체가 다른 객체없이 제대로 된 역할을 할 수 없다는 것을 의미한다. 하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것이다. "주입"은 외부에서 밀어 넣는 것을 의미한다. 따라서 의존성 주입은 어떤 객체가 필요한 객체를 외부에서 밀어 넣는 다는 뜻이다. 즉, 어떤 객체에 의존하든 자신의 역할은 변하지 않는다는 의미로 볼 수 있다. @Autowired를 사용하여 의존성 주입을 시작할 수 있다.
-- Apache Software Foundation에서 개발하고 있는 소프트웨어 프로젝트 관리 툴이자 빌드 자동화 도구, 소프트웨어 이해 도구이다. 주로 자바 프로그래밍에 사용되나 C#, Ruby, Scalar 등 다른 언어에도 사용된다. 프로젝트 객체 모델(Project Object Model)이라는 개념을 바탕으로 프로젝트 의존성 관리, 라이브러리 관리, 프로젝트 생명주기 관리 기능 등을 제공한다. 또, 플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어 내는 빌드 기능 뿐만 아니라 레포팅 및 documentation 작성 기능 등을 제공한다.
-- 보이지 않고 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위테스트를 쉽게 해주는 테스트 지원 프레임워크이다. @Test 메서드를 호출할 때마다 새로운 인스턴스를 생성하여 독립적인 테스트가 이루어지게 한다. @RunWith(SpringJUnit4ClassRunner.class)를 사용하여 jUnit 프레임워크의 테스트를 시작할 수 있다.
-- [JUnit에서 테스트를 지원하는 어노테이션의 종류]
-- 소스코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다. 모든 함수와 메서드에 대한 테스트 케이스(Test Case)를 작성하는 절차를 말한다.
-- 자바 프로그램이 DBMS에 일관된 방식으로 접근할 수 있도록 API를 제공하는 자바 클래스들의 모임이다. 즉, 데이터베이스에 연결 및 작업을 하기 위한 자바의 표준 인터페이스이다.
-- 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 프레임워크를 말한다. 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와주며, 재사용 및 유지보수의 편리성이 증가한다. 또, DBMS에 대한 종속성이 줄어드는 등의 장점이 있다. 하지만 완벽한 ORM으로만으로는 서비스를 구현하기가 어렵고 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다는 단점이 있다.
-- 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. 자바 진영의 ORM 기술 표준으로 애플리케이션과 JDBC사이에서 작동한다. 반복적인 코드를 작성하지 않아도 되기 때문에 생산성과 유지보수가 뛰어나다. 또, DB 설계 중심의 패러다임을 객체 설계 중심으로 바꿀 수 있다.
-- 자바 기반 로깅 유틸리티이다. 주로 디버그용 도구로 사용되고 있다. 개발자가 로그문의 출력을 다양한 대상으로 할 수 있도록 도와주는 도구이다. 애플리케이션 문제 발생 시, 로깅 활성화하면 문제의 위치를 정확히 파악할 수 있다. 멀티스레드 환경에서도 안전하며, 출력을 파일, 콘솔, 원격 서버 등 다양한 방식으로 내보낼 수 있다. properties 파일과 XML 형식으로 실행 중에도 수정하여 적용이 가능하다.