MyBatis는 SQL 기반으로 학습이 쉽지만 JPA는 학습이 필요.
MyBatis는 소스코드와 SQL이 분리된다. 반면, 복잡한 서비스를 구성할 때 join 문이 많이 사용되어 JPA의 단점이 드러난다.
이런 공통적인 특징을 제외하고,
Legacy database schema인 경우, 그 database schema에 맞춰 복잡한 쿼리를 만들어야 하므로 SQL query를 만들어야 하므로, MyBatis가 더 적절하며, 새롭게 database schema를 짤때는 JPA를 사용해 최적화를 진행할만한다고 생각.
"hot" in memory로 프로세스의 정보를 오래 남겨놓음(long-lived process).
Incremental compilation : recompile할 때, 변화가 있는 부분만 compile을 진행.
build cache : 같은 input에 대한 output을 재사용.
MVC
Server side rendering , Client side rendering
브라우저의 workflow
쉽게 말하자면, 렌더링 즉, HTML로 만드는 작업(요청 받은 내용을 브라우저 화면에 표시하는 일)을 어디서 할거냐에 따라 나뉜다
Server side rendering은 서버에서 사용자에게 보여줄 페이지를 모두 구성하여 페이지를 보여주는 방식.
모든 데이터가 매핑된 서비스 페이지를 바로 사용자에게 보여줄 수 있음.
브라우저에 나타나는 형태 그대로를 HTML로 만들어 제공하고, 브라우저는 HTML을 표시하는 방식.
하지만, 페이지를 구성하는 속도가 늦어지는 성능문제의 이슈가 존재.
전통적인 웹 방식에 해당.
Client side rendering은 페이지를 클라이언트에서 구성한다.
사용자의 행동에 따라 필요한 부분만 다시 읽어들여 빠른 성능을 기대할 수 있음.
서버는 단지 JSON 파일만 보내주고, html을 그리는 역할은 자바스크립트를 통해 클라이언트 측에서 수행.
Single Page Application(SPA)
NextJS 는 두 가지를 혼합하여 빠른 성능을 낸다.
빌드 시점에
FMP(First Meaningful page) measures when the primary content of a page is visible to the user.
Spring Bean을 등록하는 2가지 방법
어노테이션을 이용한 의존성 주입 방법.
필드 주입
수정자 주입
생성자 주입
@Service
public class UserService{
@Autowired private UserRepository userRepository;
}
필드 주입
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository (UserRepository userRepository){
this.userRepository = userRepository;
}
}
수정자(Setter) 메서드 주입
@Service
public class UserService{
private UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository){
this.userRepository = userRepository
}
}
생성자 주입
필드 주입 방식은 안좋은 방식.
많이 나오는 문제점은
주입받은 빈의 초기화를 보장하지 않음.
주입받은 빈이 변경 가능.
이 점들은 생성자 주입을 사용해서 해결할 수 있고, 생성자 주입은 선언과 함께 초기화가 되므로 final을 사용할 수 있다.
-> Controller 내부에서 service 객체를 바꿀 수 없게된다.
생성자 주입은 코딩할 부분이 많지만, 이 코딩할 부분이 많다는게 오히려 장점.
순환 참조 오류 발견(객체생성시점에 순환 참조가 발생), 의존성 관리, 테스트 코드 작성
@Loombook, @RequiredArgsConsturctor
HttpClient
React는 view 구현을 위한 라이브러리로 HTTP client 내장 클래스가 따로 존재하지 않는다.
AJAX를 구현하려면 JavaScript 내장객체인 XMLRequest 혹은 HTTP Client 라이브러리를 사용해야한다.
JPA vs MyBatis
MyBatis는 SQL 기반으로 학습이 쉽지만 JPA는 학습이 필요. MyBatis는 소스코드와 SQL이 분리된다. 반면, 복잡한 서비스를 구성할 때 join 문이 많이 사용되어 JPA의 단점이 드러난다. 이런 공통적인 특징을 제외하고, Legacy database schema인 경우, 그 database schema에 맞춰 복잡한 쿼리를 만들어야 하므로 SQL query를 만들어야 하므로, MyBatis가 더 적절하며, 새롭게 database schema를 짤때는 JPA를 사용해 최적화를 진행할만한다고 생각.
Maven VS Gradle
아무래도 pom.xml 기반의 Maven에서 Gradle로 넘어가고 있다고 한다. 실제로 프로젝트에서 사용하려는 Spring boot 도 Gralde 사용. https://gradle.org/maven-vs-gradle/
XML로 빌드를 정의하기에는 어려움이 많음.
Maven 에서 JUnit 라이브러리 사용 시 코드.
Gradle에서의 코드. 훨씬 간결한 것을 확인할 수 있음!
Gradle 성능의 뛰어남.
MVC
Server side rendering , Client side rendering
브라우저의 workflow
쉽게 말하자면, 렌더링 즉, HTML로 만드는 작업(요청 받은 내용을 브라우저 화면에 표시하는 일)을 어디서 할거냐에 따라 나뉜다 Server side rendering은 서버에서 사용자에게 보여줄 페이지를 모두 구성하여 페이지를 보여주는 방식. 모든 데이터가 매핑된 서비스 페이지를 바로 사용자에게 보여줄 수 있음. 브라우저에 나타나는 형태 그대로를 HTML로 만들어 제공하고, 브라우저는 HTML을 표시하는 방식. 하지만, 페이지를 구성하는 속도가 늦어지는 성능문제의 이슈가 존재. 전통적인 웹 방식에 해당.
Client side rendering은 페이지를 클라이언트에서 구성한다. 사용자의 행동에 따라 필요한 부분만 다시 읽어들여 빠른 성능을 기대할 수 있음. 서버는 단지 JSON 파일만 보내주고, html을 그리는 역할은 자바스크립트를 통해 클라이언트 측에서 수행. Single Page Application(SPA)
https://d2.naver.com/helloworld/7804182 React 에서 SSR를 염두에 둔 것이 바로 Next.js
NextJS 는 두 가지를 혼합하여 빠른 성능을 낸다. 빌드 시점에 FMP(First Meaningful page) measures when the primary content of a page is visible to the user.
Spring Bean을 등록하는 2가지 방법
어노테이션을 이용한 의존성 주입 방법.
필드 주입
수정자(Setter) 메서드 주입
생성자 주입
필드 주입 방식은 안좋은 방식. 많이 나오는 문제점은
이 점들은 생성자 주입을 사용해서 해결할 수 있고, 생성자 주입은 선언과 함께 초기화가 되므로 final을 사용할 수 있다. -> Controller 내부에서 service 객체를 바꿀 수 없게된다. 생성자 주입은 코딩할 부분이 많지만, 이 코딩할 부분이 많다는게 오히려 장점. 순환 참조 오류 발견(객체생성시점에 순환 참조가 발생), 의존성 관리, 테스트 코드 작성
@Loombook, @RequiredArgsConsturctor
HttpClient
React는 view 구현을 위한 라이브러리로 HTTP client 내장 클래스가 따로 존재하지 않는다. AJAX를 구현하려면 JavaScript 내장객체인 XMLRequest 혹은 HTTP Client 라이브러리를 사용해야한다.