Spring에 대한 질문을 먼저 써 놓고, 개인적으로 생각하는 답변을 밑에 적어둘 테니
참고해서 자신만의 언어로 답변을 잘 만들고 매끄럽게 말하는 연습을 하면 좋을 거 같습니다.
- Spring이 무엇인지 설명해보세요, 그리고 특징을 말해주세요
- Spring의 특징인 DI에 대해서 설명해 보세요
- Spring의 특징인 IoC에 대해서 설명해 보세요
- ORM이 무엇인지 설명해 주세요
- JPA가 무엇인지 설명해 주세요
- ORM, JPA, Hibernate의 장단점을 설명해 주세요
Spring
스프링은 자바의 오픈소스 애플리케이션 프레임워크 중 하나로
스프링의 기본 철학은 특정 기술에 종속되지 않고 객체를 관리할 수 있는 프레임워크를 제공하는 것입니다.
그래서 컨테이너로 자바 객체를 관리하면서 DI와 IoC를 통해서 결합도를 낮추게 됩니다.
DI
DI는 dependency injection의 약자로 의존성 주입을 의미합니다.
객체 간의 의존관계를 미리 설정해두면
스프링 컨테이너가 의존관계를 자동으로 연결해줍니다.
이렇게 되면 직접 의존하는 객체를 생성하거나 검색해서 가져올 필요가 없어서 결합도가 낮아지는 장점이 있습니다.
IoC
IoC는 inversion of control의 약자로 제어의 역전을 의미합니다.
제어권이 사용자에게 있지 않고, 프레임워크에 있어서 필요에 따라서 사용자의 코드를 호출하게 됩니다.
스프링에서는 인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너에서 대신 관리하게 됩니다.
ORM
ORM은 object relational mapping의 약자로
관계형 데이터베이스를 oop언어로 변환해주는 기술입니다
그래서 비즈니스 코드가 db 테이블에 바로 접근하게 도와줍니다.
JPA
JPA는 orm을 위해서 자바에서 제공하는 api입니다.
자바 객체와 db 테이블을 매핑하는데요
대표적인 구현체로는 하이버네이트가 있습니다.
ORM, JPA, Hibernate의 장단점
비즈니스 로직에 집중하고 객체 중심의 개발을 할 수 있게 됩니다.
그리고 메서드를 호출하는 것만으로 쿼리를 수행해서 생산성이 향상되고, 유지보수 비용이 줄어듭니다.
그리고 특정 db에 의존하지 않게 됩니다.
하지만 단점으로는 직접 sql을 호출하는 것보다는 조금 느리고요
복잡한 쿼리 같은 경우에는 메서드로 처리가 힘들다는 점입니다.