우선 MVC는 Model, View, Controller의 약자이며, 각 레이어간 기능을 구분하는데 중점을 둔 디자인 패턴입니다.
Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분이며,
View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간입니다.
Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할을 합니다.
MVC 모델 사용 시 비즈니스 로직과 UI로직을 분리하여 유지보수를 독립적으로 수행가능하며
Model과 View가 다른 컴포넌트들에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리합니다.
중복 코딩의 문제점 제거 또한 용이합니다.
JPA란 자바 ORM 기술에 대한 API 표준 명세입니다.
Hibernate, OpenJPA 등이 JPA를 구현한 구현체입니다.
ORM이란 객체가 DB 테이블이 되도록 매핑시켜주는 프레임워크입니다.
객체 간의 관계를 바탕으로 SQL 을 자동으로 생성해줌으로써 프로그램의 복잡도를 줄이고, 자바 객체와 쿼리를 분리할 수 있으며, 트랜잭션 처리나 기타 데이터베이스 관련 작업들을 편리하게 처리할 수 있는 방법입니다.
장점으로는 JPA를 사용함으로써 객체 중심적 개발이 가능하며 SQL을 직접 작성하는 것이 아닌 객체를 사용하여 동작하기 때문에 생산성과 유지보수가 용이하다는 것입니다.
단점으로는 메소드만으로 쿼리를 작성하기 때문에 JPA만으로 처리하기 어렵다는 것과 N+1문제 등이 발생할 수 있다는 것입니다.
N+1 문제란 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상을 말합니다.
해결방법으로는 Fetch Join(DB에서 데이터를 가져올 때 처음부터 연관된 데이터까지 같이 가져오게 하는 방법) ,EntityGraph 어노테이션 , Batch Size 등의 방법이 있습니다.
스프링 프레임워크는 자바 개발을 편리하게 해주는 오픈소스 프레임워크 입니다.
경량 컨테이너로서 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있습니다.
제어의 역전(IoC), 즉 컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출하여 어플리케이션의 느슨한 결합을 도모합니다.
의존성 주입(DI, Dependency Injection)을 지원하여 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줍니다.
관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)을 지원하여 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있습니다.