++/CS

[TIL] CS공부 11일차

writtenbyrla 2024. 3. 18. 11:08

ORMSpring Data JPA가 무엇인지 설명해 주세요.

ORM
"Object-Relational Mapping"의 약자로 객체-관계 매핑을 의미합니다. 이는 객체 지향 프로그래밍 언어에서 사용되는 객체와 관계형 데이터베이스의 데이터 사이의 매핑을 자동화하는 프로그래밍 기법입니다.


Spring Data JPA
Spring 프레임워크에서 ORM 중 하나인 JPA를 함께 사용하여 구현된 클래스와 매핑을 해주기 위해 사용됩니다.


++
JPA를 사용하면 DDL문 생성, CRUD, SQL 작성 등을 개발자가 직접 하지 않아도 되기 때문에 생산성이 증가하며, 데이터베이스의 변경이 생기더라도 SQL을 모두 수정하지 않아도 되기 때문에 유지보수가 쉽습니다. 

하지만 자동으로 생성된 쿼리문으로 인해 성능저하가 발생하여 별도의 SQL문을 작성해야 하는 상황이 생길 수도 있으므로, 규모가 크고 복잡한 프로젝트의 경우는 JPA만을 사용하는 것이 어려울 수 있습니다.

 

 

JPA의 영속성 컨텍스트에 대해 아는 만큼 설명해 주세요.

JPA의 영속성 컨텍스트 
JPA에서 관리되는 엔티티(Entity) 객체들의 상태와 생명주기를 추적하고 관리하는 환경입니다.
엔티티를 영구적으로 저장하며 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 역할을 합니다. 엔티티 매니저 생성 시에 영속성 컨텍스트가 만들어지며 엔티티 매니저를 통해 영속성 컨텍스트에 접근하고 관리할 수 있습니다.

 

 

@Transactional 애너테이션에 대해 설명해 주세요.

 비즈니스 로직 처리 과정 중 예외가 발생했을 때 ROLLBACK 되어 데이터베이스에 반영하지 않기 위해 사용하며,  기본적으로 Spring AOP를 통해 메서드 실행 전/후로 트랜잭션 처리가 적용됩니다.

++ 동작원리

1. 스프링에서 트랜잭션 관리를 위한 어드바이스가 미리 정의되어 있음, 이 어드바이스는 실제 트랜잭션을 시작하고 커밋 또는 롤백하는 기능을 제공
2. @Transactional 명시하면 트랜잭션을 관리하는 어드바이저가 타깃에 적용될 포인트컷을 정의
3. 어드바이스와 포인트컷을 결합하여 어드바이저를 생성하고 Bean으로 등록
4. 스프링 컨테이너가 빈을 생성한 후 필요한 경우 프록시 객체 생성
5. 클라이언트가 타깃 빈을 주입받을 때, 실제로는 프록시 객체가 주입됨
이 프록시 객체는 타깃 빈을 감싸고 있으며, 클라이언트가 메서드를 호출할 때 트랜잭션 관리 기능을 추가하여 호출

6. 클라이언트는 타깃 빈을 호출하는 것처럼 보이지만, 실제로는 프록시 객체의 메서드가 호출
프록시 객체는 메서드 호출 전후에 트랜잭션 관리 기능을 수행하고, 이후 타깃 빈의 메서드를 호출하여 결과를 반환

++ Spring AOP

Aspect
(어드바이스 + 포인트컷) 공통 관심사를 분리하여 작성한 클래스
Advice
애스팩트가 해야 할 작업과 언제 그 작업을 수행해야 하는지 정의
JoinPoint
어드바이스가 적용될 수 있는 모든 곳을 의미한다. (메서드 호출 지점, 예외 발생 지점, 필드 등)
PointCut
여러 조인포인트 중에 실제 어드바이스가 적용될 조인포인트를 정의

 

 

 

 

 


 

 

 

 

MVC 패턴에 대해서 아는 만큼 설명해 주세요

소프트웨어 디자인 패턴 중 하나로 Model(모델), View(뷰), Controller(컨트롤러)라는 개념으로 역할을 구분하여 컴포넌트 간 결합도를 낮추고 코드의 재사용성과 확장성을 높입니다.

모델(Model)
데이터와 데이터를 처리하는 로직을 뜻합니다.
데이터베이스나 외부 소스로부터 데이터를 가져오고 저장하는 역할을 담당합니다.


뷰(View)
사용자에게 정보를 표시하는 역할을 합니다.
사용자 입력을 받아 컨트롤러로 전달하거나, 모델로부터 데이터를 받아 화면에 표시합니다.

컨트롤러(Controller)
모델과 뷰 사이에서 사용자의 요청을 처리하는 역할을 합니다.
주로 사용자 입력을 받아 모델에 전달하거나, 모델의 상태를 변경하는 작업을 수행합니다.

 

 

MVC 패턴이 본인의 프로젝트 어느 부분이 어디에 해당하는지 경험과 같이 설명해 주세요

이전에 spring을 처음 학습할 때 jsp를 사용하면서 MVC 패턴을 이용한 적이 있습니다.

또, 최근에 한 프로젝트가 rest api 방식이었지만 템플릿 엔진을 이용하여 간단하게 뷰 작업을 했기 때문에, 페이지 이동하는 작업을 일반 Controller로 분리하여 뷰에 반환할 데이터를 model을 이용하여 보내기도 하였습니다.

 

 

 

 


 

 

N+1 이슈가 발생하는 이유가 무엇인가요?

N+1 문제란 데이터를 로드할 때 발생하는 성능 문제로 한 번의 쿼리로 가져와야 할 데이터를 여러 번의 추가 쿼리를 요청함으로써 성능이 저하되는 문제를 말합니다.

N+1 문제가 발생하는 이유는 JPA에서 데이터를 조회하는 기본 방식인 지연 로딩 때문입니다. 
지연 로딩이란 어떤 객체를 조회할 때 연관 관계에 있는 엔티티를 바로 로딩하지 않고 나중에 필요할 때 로딩하는 것으로, 연관관계에 있는 엔티티를 조회하는 N개의 쿼리가 별도로 실행되어 성능저하의 요인이 됩니다.

'++ > CS' 카테고리의 다른 글

[TIL] CS공부 13일차  (0) 2024.03.20
[TIL] CS공부 12일차  (2) 2024.03.19
[TIL] CS공부 10일차  (1) 2024.03.15
[TIL] CS공부 9일차  (0) 2024.03.14
[TIL] CS공부 8일차  (0) 2024.03.13