Backend/Spring

WebClient VS RestTemplate RestTemplate이란? Spring은 오랫동안 웹 클라이언트 추상화로 RestTemplate을 제공하고 있었습니다. 내부적으로 RestTemplate은 요청 당 스레드 모델을 기반으로 하는 Java Servlet API를 사용합니다. 이 의미는 웹 클라이언트가 응답을 받을 때 까지 스레드가 차단되는데, 여기서 문제점은 각각의 스레드가 일정량의 메모리와 CPU를 사용합니다. 이때, 결과를 기다리는 느린 서비스를 기다리는 수신 요청이 많다고 한다면 요청이 쌓이고 많은 스레드를 생성해서 스레드 풀을 소모하거나 사용 가능한 모든 메모리를 차지하게 될 것입니다. 또한 빈번한 Context Switch을 통해 성능 저하가 발생할 수 있습니다. 가장 쉽게 생각하면 ..
엔티티 생명주기(Entity LifeCycle) @DisplayName("엔티티 생명주기 테스트") @Test void entityLifeCycleTest() { final EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); final EntityManager em = emf.createEntityManager(); final EntityTransaction transaction = em.getTransaction(); transaction.begin(); try { System.out.println("===== 영속 상태 테스트===="); final Team team = new Team(1L, "Team A"); //..
JPA 페치(Fetch) 전략 - 즉시 로딩(EAGER)과 지연 로딩(LAZY) 예제코드 세팅 import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity public class Member { @Id private Long id; @ManyToOne @JoinColumn(name = "team_id") private Team team; private String name; public Member() { } public Member(final Lo..
JPA DDL Auto With Hibernate 서론 DDL(Data Definition Language, 데이터 정의 언어)를 자동으로 생성해주는 속성입니다. CREATE - 새로운 데이터베이스 테이블, view 등을 생성 DROP - 이미 존재하는 데이터 베이스 테이블, view 등을 제거 ALTER - 이미 존재하는 데이터베이스 개체에 대한 변경 이번 글은 Hibernate를 이용해 생성해보도록 하겠습니다. 속성명은 hibernate.hbm2ddl.auto 입니다. 환경 세팅 plugins { id 'java' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } depe..
javax.persistence.Entity Vs org.hibernate.annotations.Entity 서론 JPA를 사용해 Entity를 매핑하려고 하면 해당 어노테이션이 두개가 나오는걸 확인할 수 있습니다. javax.persistence와 org.hibernate에 있는 어노테이션 두개입니다. 현재는 hibernate에 있는 애는 deprecated 되었기 떄문에 굳이 볼 필요는 없다고 생각하지만, 단순한 궁금증이 생겨 두개의 차이를 비교해보려고 합니다. 그러나 해당 속성들은 모두 다 다른 어노테이션으로 대처되어 사용되기 때문에 해당 속성들에 대한 내용들은 알아둬야 할것 같습니다. 해당 속성들에 대한 정보들이 많이 나오지 않아서 정확하지 않을 수도 있습니다. 틀린 부분이 있다면 가감히 지적해주..
MVC 패턴 MVC 패턴이란? Model & View & Controller 디자인 패턴으로써 애플리케이션을 위의 3가지 역할로 구분해놓은 개발방법론입니다. 웹 애플리케이션의 아키텍처 - 모델 1 JSP + JavaBean(Model) 가장 큰 특징은 뷰 + 로직이라고 생각하면 될거 같습니다. 따라서 장점으로는 구조가 간단해지지만, 단점으로 출력과 비즈니스 로직이 섞여서 코드가 복잡해지고 프론트와 백엔드의 분업이 용이하지 않다는 점이 있습니다. 웹 어플리케이션 아키텍처 - 모델 2 == MVC 출력과 비즈니스 로직이 섞여 코드가 복잡해지는 모델1의 단점을 보안하고자 모델2가 나오게되었습니다. JavaBean(Service) + JSP(View) + 서블릿(Controller) 장점으로는 뷰와 비즈니스 로..
Spring에서으로 Log를 Slack으로 받아보기 예제코드 Log를 사용하는 이유 최소한으로 로그는 서비스 동작 상태를 파악하고 장애를 파악하기 위해 사용합니다. 이러한 로그들은 분석하면서 서비스 지표 확인, 트랜잭션, 성능, 버그 등을 다양한 정보로 확인이 가능합니다. LogBack이란? Log를 효율적으로 관리하기 위해서 사용하는 것입니다. 현재 core, classic, access의 세가지 모듈로 나눠져 있다. 코어 모듈은 다른 두 개의 모듈을 위한 기반이며, classic 모듈은 코어를 확장하는데 사용하며 access는 서블릿 컨테이너와 통합되어 HTTP-access 로그 기능을 제공한다. 스프링에서는 기본적으로 logback을 사용한다. Spring Boot Base Logback Sprin..
Spring Logback profile 조합 전략 예제코드 이전 코드 최근 프로젝트를 진행하면서 Logback 관련 공부를 하다가 조합을 이용한 Profile 전략 방식을 발견했다. 전에는 아래와 같이 각 프로파일마다 파일을 만들었고, 사실 dev와 prod는 슬랙 알림 방식과 파일 방식은 중복이였다. logback-local.xml logback-dev.xml ${LOG_PATH}/logback/logback_dev_${dailyLog}.log [%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n ${LOG_PATH}/logback/logback_dev_${dailyLog}.%d\(.%i\).log 100MB [%d{..
Spring Boot Base logback LogBack이란? Log를 효율적으로 관리하기 위해서 사용하는 것입니다. 현재 core, classic, access의 세가지 모듈로 나눠져 있다. 코어 모듈은 다른 두 개의 모듈을 위한 기반이며, classic 모듈은 코어를 확장하는데 사용하며 access는 서블릿 컨테이너와 통합되어 HTTP-access 로그 기능을 제공한다. 스프링에서는 기본적으로 logback을 사용한다. base.xml include는 다른 로그 관련 설정 파일을 불러오기 위해 사용한다. property는 값을 변수처럼 사용하기 위해 사용한다. 현재 이 파일을 보면 defaults.xml과 console.appender.xml, file-appender.xm의 파일을 불러오고 있으며..
SpringBootTest webEnvironment DEFINED_PROT 지정된 포트로 실제 서블릿 컨테이너를 띄운다. 이때 PORT의 값은 application.properties에 설정된 값 또는 기본값인 8080이다. MOCK(기본값) 실제 서블릿 컨테이너를 띄우지 않고 서블릿 컨테이너를 mocking해서 실행된다. 이때 속성값을 사용할때는 보통 MockMvc를 주입받아 테스트한다. 서블릿 API들이 classpath가 없다면 ApplicationContext를 생성한다. MockMvc 기반의 어플리케이션 테스트를 위해 @AutoConfigureMockMvc의 주입과 함께 사용된다. NONE ApplicationContext가 로드되지만 실제 서블릿 컨테이너를 동작시키지 않는다. RANDOM_P..
Seyun(Marco)
'Backend/Spring' 카테고리의 글 목록 (2 Page)