항해 99/Spring (49) 썸네일형 리스트형 POJO POJO(Plain Old Java Object) 위 이미지는 Spring 삼각형이라는 이미지로 Spring의 핵심 개념들을 모두 표현하고 있다. POJO는 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는것을 의미한다. POJO란 Plain Old Java Object의 약자로, 직역하면 순수한 오래된 자바 객체이다(Java로 생성하는 순수한 객체를 뜻함). POJO는 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고, 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 의미한다. POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 한다. POJO 프레임 워크 POJO 프레임워크는 POJO를 사용하는 장점과 EJB에서 제공하는 엔터.. Spring boot 모니터링 with Prometheus, Grafana 애플리케이션 모니터링 애플리케이션에서 발생하는 동작들에 대한 메트릭을 수집하여 애플리케이션 성능을 분석하는 분야로 모니터링을 통해 서비스 개발 과정에서는 동작을 확인할 수 있고, 서비스 오픈 직전에는 성능 테스트를 할 수 있고, 서비스 운영 과정에서는 문제를 해결할 수 있다. Actuator, Prometheus, Grafana를 사용해 스프링부트 애플리케이션의 메트릭을 수집하고 이를 시작화하는 환경을 구성할 수 있다. Metric 메트릭(metric)이란 측정 가능한 양이나 특성을 나타내는 척도 또는 지표를 말한다. 데이터 분석이나 평가, 성능 측정 등 다양한 분야에서 사용되며, 메트릭을 잘 수집하면 시스템의 현재 상태를 손쉽게 파악할 수 있다. 메트릭은 주어진 목표나 문제에 따라 다양한 형태로 정의될.. 낙관적 락 & 비관적 락 트랜잭션 격리 수준 트랜잭션은 ACID(원자성, 일관성, 격리성, 지속성)을 보장해야 한다. 트랜잭션은 원자성, 일관성, 지속성을 보장하지만 문제는 격리성으로 트랜잭션간 완전한 격리를 보장하기 위해서는 동시성 측면세어 많은 손해를 보게 된다. 테이블에 따라서 ANSI 표준에서는 트랜잭션 격리 수준을 4단계로 구분하여 병행성과 격리성을 설정할 수 있는데, 격리성과 병행성은 서로 역비례 관계이므로 무턱대고 격리 수준을 최대로 높이게 되면 성능이 악화될 수 있으므로 적절한 격리 수준 설정이 중요하다. 하지만 이런 트랜잭션 격리 수준으로도 해결하지 못하는 문제가 존재한다. 두 번의 갱신 분실 문제(Second lost updates problem) 위키백과의 후디라는 문서를 두 유저가 동시에 편집하는 상황을 가.. Spring Actuator Springboot Actuator 스프링부트 프레임워크에서 제공되는 라이브러리로서 스프링부트 애플리케이션의 모니터링이나 메트릭과 같은 기능을 HTTP와 JMX 엔드 포인트를 통해서 제공한다. 메트릭: 시스템, 프로세스, 제품 또는 서비스의 성능을 측정하는 데 사용되는 측정 항목이나 지표 Spring Actuator는 애플리케이션의 내부 확인이 가능하며, 어느 정도는 애플리케이션의 작동을 제어할 수 있게 해준다. 애플리케이션 환경의 구성 속성 로깅 레벨 사용 중인 메모리 지정된 엔드포인트가 받은 리퀘스트 횟수 애플리케이션의 건강 상태 정보 Spring Actuator API Spring Actuator를 사용하려면 의존성을 추가해야 한다. implementation("org.springframework... 즉시로딩, 지연로딩, N+1 문제 즉시 로딩과 지연 로딩 즉시로딩(Immediate Loading)과 지연로딩(Lazy Loading)은 데이터베이스에서 데이터를 조회하는 방식 중의 하나로, 객체 간의 연관관계를 어떻게 로딩하고 관리할 것인지에 대한 개념이다. 즉시로딩(Immediate Loading): 엔티티를 조회할 때 해당 엔티티와 연관된 모든 엔티티를 조회하는 방식 A 엔티티와 B 엔티티가 연관되어 있을 때 A를 조회하면 B도 함께 조회되고, 이로 인해 객체 간의 관계가 필요한 시점에 바로 사용할 수 있다 조인 등의 복잡한 쿼리가 생성될 수 있고, 불필요한 데이터 로딩으로 인해 성능 문제가 발생할 수도 있다 지연 로딩(Lazy Loading): 객체를 Proxy로 가져온 후 실제 해당 객체를 사용하는 시점에 초기화, 연관된 엔티티.. Spring PSA PSA(Portable Service Abstraction) 환경의 변화와 관계 없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조 특정 클래스가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 PSA의 기본 개념 PSA가 적용된 코드는 개발자의 기존에 작성된 코드를 수정하지 않으면서 확장할 수 있으며, 어느 특정 기술에 특화되어 있지 않은 코드이다. Spring에서 동작할 수 있는 라이브러리들은 POJO 원칙을 지키기 위해 PSA 형태의 추상화가 되어 있으며, Spring Web MVC, Spring Transaction, Spring Cache, Spring Data, 메일 서비스 등의 다양한 PSA를 제공하고 있다. Spring Web MVC 일반적인 서블릿의.. Spring MVC, IoC/DI Spring MVC MVC 패턴 MVC 패턴은 애플리케이션을 개발할 때 사용하는 디자인 패턴 애플리케이션의 개발 영역을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식 MVC 패턴을 도입하면서 UI 영역과 도메인(비즈니스 로직) 영역으로 구분되어 서로에게 영향을 주지 않으면서 개발과 유지보수가 가능하다 MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다. MVC 패턴을 사용하는 이유 사용자가 보는 페이지, 데이터 처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤 3가지로 구성되는 하나의 애플리케이션을 만들면.. Spring Context Spring Context 스프링이 관리하는 Bean들이 담겨있는 컨테이너 스프링의 가장 큰 특징 중 하나가 IoC 컨테이너를 통해 객체의 생성을 관리하는 것으로 Context가 Container의 일종임 Container란? Container에는 Bean Factory와 이를 상속한 Application Context 2가지 유형이 있음 Bean Factory Pre-Loading 방식 Bean 객체를 생성하고 관리하는 기본적인 기능 Application Context Lazy Loading 방식 트랜잭션 관리, 메시지 기반의 다국어 처리, AOP 처리 등 Spring Container 사용 이유 모든 Context는 싱글톤으로 관리되어 유일한 객체로 관리됨 Lazy Loading으로 Servlet C.. 이전 1 2 3 4 5 ··· 7 다음