728x90

스프링부트 6

Spring Data & JPA & Hibernate 차이점

Spring Data JPA Spring Data JPA는 Spring Framework에서 제공하는 모듈 중 하나로, 개발자가 JPA를 좀 더 쉽고 편하게 사용 할 수 있도록 도와준다. 특징을 잠깐 살펴보자면, Hibernate와 같은 구현체들을 좀 더 쉽게 사용할 수 있도록 추상화한 것. JPA를 한 단계 추상화시킨 Repository 인터페이스를 제공. 개발자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록. Hibernate와 Spring Data JPA를 사용하는 데에는 사실 큰 차이가 없지만 Spring Data JPA가 권장되는 이유는 크게 두 가지. 구현체 교체의 용이성 ..

[Java] 디스패치 서블릿 DispatcherServlet이란?

Dispatcher-Servlet(디스패처 서블릿) 이란? 디스패처 서블릿의 dispatch는 "보내다"라는 뜻을 가지고 있다. 그렇기 때문에 Dispatcher-Servlet은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)라고 정의할 수 있다. 이 과정을 이해하기전에 앞서 클라이언트로부터 어떠한 요청이 들어오게되면 톰캣과 같은 서블릿 컨테이너가 요청을 받게 된다. 그리고 이 모든 요청을 프론트 컨트롤러인 디스패치 서블릿이 가장 먼저 받게 된다. 그러면 디스패치 서블릿은 공통적인 작업을 먼저 처리한 후에 해당 요청을 처리해야하는 컨트롤러를 찾아서 작업을 위임하게 된다. 여기서 프론트 컨트롤러는 주로 서블릿 컨테이너의 ..

JAVA 2022.04.11

[Spring] IoC, DI, 컨테이너

IoC (Inversion of Control) - 제어의 역전 - 프로그램의 제어 흐름을 개발자가 결정하는 것이 아니라, 외부에서 결정을 하는 것. 여기서의 흐름은 메소드나 객체의 호출을 의미. - 객체를 개발자가 Test test = new Test(); 이런식으로 만드는것이 아니라 스프링이 스스로 객체를 생성해서 필요한곳에 사용 할 수 있게 해준다. -> 기존의 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행을 했다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다는 말씀. 프로그램의 제어 흐름을 직접적으로 하는 것이 아닌 외부에서 관리하는 것을 우리는 제어의 역전! 이라고 부른다. ※ 프레임워크 vs 라이브러리 - 프레임워크는 내가 작성한 ..

JAVA 2021.10.19

[Java] Junit 실행순서

[Juni5의 실행순서] 출처 : https://www.softwaretestinghelp.com/junit-annotations-tutorial public class OrderServiceTest { MemberService memberService; OrderService orderService; @BeforeEach public void beforeEach() { AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService(); orderService = appConfig.orderService(); Test Class를 잘 살펴보면 @BeforeEach 애너테이션이 붙은 beforeEach 메서드가 있다. 이는 Te..

JAVA 2021.07.28

[Java] Spring Repository 생성시 final 붙이는 이유

1. 위와 같이 레포지토리 생성 시 final을 붙이는 이유가 무엇일까? MemberRepository 타입의 memberRepository 객체를 다른 객체로 바꾸지 않기 위해 final 키워드를 붙임 2. final은 불변의 객체인 경우 or Read only인 경우에만 붙인다고 알고있는데, join 메서드를 실행하게 되면 레포지토리의 store 변수에 데이터가 추가되어 결국 변화가 생기는 것 아닌가? 불변의 대상을 잘못 알고 계시는거 같음. 예시를 들어 설명. --- 1. 마우스를 상속 받은 G102, GPro 클래스 + price의 초기값은 0, versionUp 함수를 호출 할 때 마다 price는 1씩 증가. 2. Mouse를 Gpro 타입으로 생성하고, mouse를 G102로 바꾸려고 할 때..

JAVA 2021.07.28

[Spring] 스프링 핵심 원리 - 기본편(1)

https://start.spring.io/ 주소를 통해서 스프링 초기 Setting을 할 수 있음. Project Metadata 부분에서 Artifact는 프로젝트의 빌드명이 된다. 윈도우 기준 Settings에서 Gradle를 검색하면 Gradel Projects를 설정 할 수 있다. Build and run using 과 Run tests using을 InjelliJ IDEA로 설정해주면 실행해주는 속도를 빠르게 할 수 있을 것이다. Q. 인터페이스를 사용하는 목적? 인터페이스를 사용하는 가장 큰 목적은 선언과 구현을 분리하기 위함. 그래서 사용하는 입장에서 인터페이스만 의존하고, 구현을 모르도록 하는 것. 그래야 향후 구현을 했을때, 클라이언트 코드를 변경하지 않아도 되기 때문. 인터페이스를 사..

JAVA 2021.07.13
728x90