무엇인가?
자바로 서버 어플리케이션 개발 프레임워크 왜 쓰나?
서버 어플리케이션은 웹 기술, 데이터 접근 기술 등 여러 기술이 접목되어 있고 동시성 처리가 필요하다. 스프링은 프레임워크로서 개발자의 역할을 상당 부분 대신해줘서 안정성 있는 어플리케이션 개발을 도와준다. 무엇인가?
스프링이 기본적으로 제공하는 기능들에 부가적으로 MVC 패턴을 구현하는데 필요한 기능들을 모은 프레임워크 왜 쓰나?
프레임워크에 제공된 구조에 부가적인 코드를 작성하듯 개발할 수 있기 때문에 안정적인 구조의 어플리케이션을 만들 수 있다. 레벨 1 MVC와 무엇이 다른가?
사실 레벨 1은 MV만 있어도 충분했다. 레벨 2에서 웹 기반 기술이 도입되며 M에서 C를 분리할 필요가 생겼다. 스프링 MVC는 이를 제공한다.DI 무엇인가?
객체가 가지는 참조(의존성)을 객체 외부에서 맺어주는 것.왜 쓰는가?
객체가 구체 클래스에 의존하는 게 아니라 해당 타입을 만족하는 임의의 객체에 의존하도록 할 수 있다. 의존 객체를 변경하더라도 객체 내부의 코드를 수정하지 않아도 된다. IoC 무엇인가?
DI를 구현하려면 객체 외부에서 의존 객체를 주입해주는 제어가 필요하다. 이 제어를 어플리케이션 코드에서 분리하여 프레임워크에 위임한다.왜 쓰는가?
의존 관계 변경, 확장이 일어날 때 자바 코드를 수정하지 않아도 된다. 스프링에서는?
DI를 원하는 객체를 IoC Container에 빈으로 등록하여 사용하는 객체에서 이를 주입받아 사용한다. 무엇인가?
핵심 관심사가 아니지만 반복되는 기능을 분리하여 이를 Aspect(횡단 관심사)로 관리하는 프로그래밍.왜 쓰는가?
여러 객체에 필요하지만 핵심 관심사가 아닌 코드를 분리하여 코드의 중복을 막고 객체의 변경 이유를 줄이기 위해 사용. 무엇인가?
자바에서 데이터 저장 기술에 접근하는 방식을 일관되게 제공하는 데이터 접근 기술왜 쓰나?
다양한 데이터 저장 기술이 일관된 접근 방식을 제공하지 않을 경우 수정, 확장이 일어나면 자바 코드를 수정해야한다. JDBC는 Datasource라는 일관된 접근 방식을 제공한다.차이는?
인증은 사용자가 서비스에 접근할 수 있는 사용자인지 식별하는 과정, 인가는 사용자가 요청한 리소스에 관한 권리가 있는지 확인하는 과정.프로그래밍이란 어떻게 경계를 나누고 어떻게 경계를 넘나들며 소통하는지를 결정하는 행위이다.
경계를 가장 엄격하게 지을 경우 객체지향, 가장 느슨하게 지을 경우 절차지향이 된다. 이 중간에 있는 것이 함수형 프로그래밍이다. 객체지향은 상태와 행동을 묶어 경계를 지어 상태 관리, 변화, 저장을 자율적으로 처리한다. 함수형 프로그래밍은 상태와 행동을 분리하여 행동인 순수 함수와 상태를 관리하는 책임을 분리하고, 상태를 변화시키는 책임을 분리하고, 상태를 저장하는 책임을 분리한다. 이렇게 분리된 상태와 행동을 우리의 인지적 효율을 위해 컴포넌트라는 경계를 만들어 관리하기도 한다. 객체가 자기 결정적으로 상태를 은닉하는 불투명한 경계라면, 함수형은 여러 경계를 넘나들며 쓰여 재사용성이 높은 행동(함수)로 인해 투명한 특성을 가진다. 이 두 페러다임은 각자의 관점으로 경계를 나누어 관심사의 분리를 이루기 위해 존재한다. 관심사의 분리가 이뤄지면 관심사를 기준으로 협업과 분업이 용이해지며 여러 변경 요구에 빠르게 대응할 수 있다.
협력 관점에서 scale out이 가능하여 현대 사회가 요구하는 복잡한 요구에 대응할 수 있으며, 수정이 필요한 영역이 명확하므로 변화에 빠르게 대응할 수 있다. 더 빠른 대응은 많은 가치를 창출함을 의미한다.
관심사의 분리를 이루는 한 방법으로 객체지향을 하였다. 이를 구현하기 위해 Java를 사용하였다. 그러나 자바만 사용해서는 엔터프라이즈 웹 환경에서 개발을 편하게 하기 어렵다. 웹, 데이터 접근 기술 등 다양한 기술의 관심사가 얽혀 순수한 자바 객체를 유지할 수 없기 때문이다. 따라서 Servlet 등의 기술로 개발자는 Web 개발의 핵심 관심사에 집중할 수 있게 되었고, JDBC의 등장으로 데이터 접근 기술을 추상화시켜 핵심 관심사에 집중할 수 있게 되었다. 그러나 아직도 컴파일 의존성과 핵심 관심사에서 분리 되지 못한 횡단 관심사가 남은 문제가 있다. 이를 해결하기 위해 Spring이 등장한다.
스프링은 관심사의 분리를 중심으로 객체지향 프로그래밍을 돕기 위해 존재한다. DI, IoC로 객체 지향을 용이하게 하며, AOP, PSA로 핵심 관심사과 횡단 관심사를 분리시켰다.
그러나 Spring 만으로는 데이터 접근 기술의 한계로 관심사의 분리에 한계가 있다. 개발자가 객체 지향에 집중하여 자바 어플리케이션 개발을 할 수 있도록 등장한 것이 ORM 기술이다. ORM 기술은 자바 어플리케이션과 DB 사이의 관계를 추상화하여 자바 어플리케이션이 데이터 저장 기술을 더 적게 고려하면서 객체 지향으로 개발할 수 있도록 도와주는 기술이다.
핵심은 DI 시점. 생성자 주입은 객체 생성과 동시에 DI가 일어나는데, 필드 주입은 객체 생성 후에 DI가 일어난다. DI가 올바르게 되지 않을 경우 생성자 주입은 객체 생성조차 안되는데, 필드 주입은 일단 생성은 가능하지만 추후 문제가 발생할 것이다. 추가로 필드 주입은 DI 시점 문제로 final 키워드를 사용할 수 없다.
프레임워크는 내가 개발을 하기 위해 사용하는 틀이다. 스프링에서는 MVC 패턴에 맞춰 개발하게 하는 틀을 제공하거나 객체의 생명주기, 의존성 관리 등을 해준다.