Programming 67

[ELK+R스택 구축하기] docker로 ELK 구성하여 Spring Boot 로그 쌓기 (1)

안녕하세요. ELK와 Redis를 이용하여 Spring Boot에서 쌓는 로그를 분석 및 보기 편하도록 Redis와 연동하며 겪은 경험을 글로 남기려고 합니다. 이번에는 ELK가 뭔지 Ubuntu를 이용하여 Docker설치 과정을 적어보려고합니다. 일단 ELK가 뭔지 부터 알아볼까요. E = Elasticsearch Elasticsearch는 Apache Lucene에 구축되어 배포된 검색 및 분석 엔진입니다. L = Logstash Logstash는 다양한 소스로부터 데이터를 수집하고 전환하여 원하는 대상에 전송할 수 있도록 하는 오픈 소스 데이터 수집 도구입니다. K = Kibana Kibana는 로그 및 이벤트 검토에 사용하는 데이터 시각화 및 탐색 도구입니다. 이렇게 세가지를 합쳐서 ELK스택이라..

Programming/Spring 2023.05.05

[Spring Boot] 스프링과 스프링 부트

1. 스프링(Spring)이란? 1.1 스프링의 개념 Spring은 Java를 기반으로 한 웹 어플리케이션 프레임워크다. spring.io 사이트에서 확인하면 '스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 어플리케이션을 위한 프로그래밍 및 Configuration Model 제공한다'라고 언급하고 있다. 스프링은 위와 같은 구조를 가지고 있으며, Python을 이용한 Django, Ruby를 이용한 Ruby on Rails, Javascript를 이용한 Node.js 기반의 웹 서버 개발과 같이 Java 개발자들은 Spring을 사용하여 웹 서비스를 만들 수 있다. 1.2 스프링의 특징 경량 컨테이너 제어의 역전(IoC, Invertion of Control) 의존성 주입(Di, Dependency..

Programming/Spring 2022.06.09

@Component 와 @Bean, @Autowired 어노테이션 알아보기

@Component, @Bean, @Autowired 자주 사용하면서도 정확하게 무슨 용도로 사용되는지, 어떤 동작 원리를 가지는지, 어떤 차이가 있는지 잘 몰랐던 부분에 대해서 공부합니다. 먼저 Annotation에 대해서 간단하게 알아보겠습니다. Annotation은 Java 5부터 추가된 문법 요소로, 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술입니다. 실제 데이터가 아닌 데이터를 위한 데이터로 메타데이터 (meta data)로 불립니다. 어노테이션의 용도 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공 실행 시 (런타임) 특정 기능을 실행하도록 정보 제공 어노테이션을 사용하기 위한..

Programming/Spring 2022.06.05

[Spring] Component Scan과 Function을 사용한 빈 등록 방법

1. @ComponentScan @ComponentScan 애노테이션은 spring 3.1부터 도입됐으며 설정된 시작 지점부터 컴포넌트 클래스를 scanning하여 빈으로 등록해주는 역할을 한다. 컴포넌트 클래스는 다음 애노테이션이 붙은 클래스를 의미한다. @Component @Repository @Service @Controller @Configuration @ComponentScan의 가장 중요한 두 가지 속성은 component를 scan할 시작 지점을 설정하는 속성과 scan한 component 중 빈으로 등록하지 않을 클래스를 제외하는 필터 속성이다. 1) Scan 시작 지점 설정 - basePackages()와 basePackageClasses() basePackages()와 basePacka..

Programming/Spring 2022.05.29

[Spring] @Autowired 동작 원리 - BeanPostProcessor

@Autowired 애노테이션을 생성자, setter, 필드에 붙이기만 함으로써 간편하게 의존성을 주입받을 수 있는데 어떻게 그렇게 동작할수 있는지, 그 원리에 대해 알아보자. 결론부터 말하자면 @Autowired 애노테이션은 BeanPostProcessor라는 라이프 사이클 인터페이스의 구현체인 AutowiredAnnotationBeanPostProcessor에 의해 의존성 주입이 이루어진다. BeanPostProcessor는 빈의 initializing(초기화) 라이프 사이클 이전, 이후에 필요한 부가 작업을 할 수 있는 라이프 사이클 콜백이다. 그리고 BeanPostProcessor의 구현체인 AutowiredAnnotationBeanPostProcessor가 빈의 초기화 라이프 사이클 이전, 즉 ..

Programming/Spring 2022.05.29

[Spring] @Autowired의 다양한 사용 방법 - required, Primary, Qualifier

1. 의존객체 타입의 빈이 없는 경우 다음과 같이 BookService 클래스와 BookRepository 인터페이스가 있다. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class BookService { BookRepository bookRepository; @Autowired public BookService(BookRepository bookRepository) { this.bookRepository = bookRepository; } } // public interface BookRepository { } Colore..

Programming/Spring 2022.05.29

[Spring] 빈을 설정하는 3가지 방법 - XML, JAVA, Component Scan

[Spring] 빈을 설정하는 3가지 방법 - XML, JAVA, Component Scan 새 프로젝트를 생성한다. 예제 코드에 필요한 의존성을 받기 위해 spring boot 프로젝트를 생성할 것이다. 참고로 예제 코드에는 이 의존성이 필요하다. Spring Initializr를 선택하고 Next를 클릭한다. Group, Artifact, Name을 입력하고 Next를 클릭한다. Group은 패키지명을 적어준다. (보통 도메인명을 뒤집어서..) Web - Spring Web을 넣고 Next를 클릭한다. Finish를 클릭해서 신규 프로젝트 생성을 완료한다. Spring boot 프로젝트를 만들었다. pom.xml을 열어보면 spring boot 2.2.5 버전으로 만들어졌음을 확인할 수 있다. 우측의..

Programming/Spring 2022.05.29

[Spring] 스프링 PSA

[Spring] 스프링 PSA 1. PSA(Portable Service Abstraction) Spring은 Spring Triangle이라고 부르는 세 가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. Spring의 PetClinic 예제를 보면 서블릿 어플리케이션임에도 불구하고 서블릿이 전혀 존재하지 않는다. 단지 @Controller 애노테이션이 붙어있는 클래스에서 @GetMapping, @PostMapping과 같은 @RequestMapping 애노테이션을 사용해서 요청을 매핑한다. 실제로는 내부적으로 서블릿 기반으로 코드가 동작하지만 서블릿 기술은 추상화 계층에 의해 숨겨져 있는 것이다. 이렇게 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 ..

Programming/Spring 2022.05.29

[Spring] 스프링 빈(Bean)의 개념과 생성 원리

[Spring] 스프링 빈(Bean)의 개념과 생성 원리 빈(Bean) Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다. 우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니다. ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다. 즉 Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다. 어떻게 Spring IoC 컨테이너에 빈을 등록할까? 빈을 만드는 방법은 다양하지만 기본적으로 크게 두가지 방법이 있다. ① Component Scanning ② 빈 설정파일에 직접 빈을 등록 Component Scan @Comp..

Programming/Spring 2022.05.29

[Spring] 의존성 주입(DI, Dependency Injection)의 세가지 방법

[Spring] 의존성 주입(DI, Dependency Injection)의 세가지 방법 Spring은 @Autowired 애노테이션을 이용한 다양한 의존성 주입 방법을 제공한다. @Autowired 애노테이션은 Spring에게 의존성을 주입하라는 지시자 역할로 쓰이는데 생성자, 필드, 세터에 붙일 수 있다. 🚨 Spring IoC 컨테이너에 의한 의존성 주입은 빈(Bean) 끼리만 가능하다. 1. 생성자 주입 1 2 3 4 5 6 7 8 9 @Component public class SampleController { private SampleRepository sampleRepository; @Autowired public SampleController(SampleRepository sampleRepo..

Programming/Spring 2022.05.29