본문 바로가기

프로그래밍/Spring

(6)
[Spring] @Scheduler를 동적으로 대체하자! (Feat. ThreadPoolTaskScheduler) 서론 현재 사내에서 사용하고 있는 스케줄러를 개선하는 작업을 하고 있다. 기존에는 C# 환경에서 RestSharp + Thread를 활용해 스케줄링 작업을 하고 있었으나 내가 부서이동을 하는 바람에 마지막으로 C#을 Java로 변경하고 가라고 하셨다. 🥲 (C#과 Java는 비슷하니 금방 배우실 수 있을겁니다! 라고 말했으나... 하라고 하셨으니 만드는게 인지상정! 호다닥 만들러 슝~💻) 현재 스케줄러는 하단과 같은 json 구조에서 데이터를 파싱해 사용하고 있다. [ { "name": "ATrigger", "endPoint": "/ATrigger", "cronExpression": "0/10 * * * * *", "enable": "true" }, { "name": "BTrigger", "endPoin..
[스프링 핵심 원리] IoC, DI, 그리고 컨테이너 제어의 역전 IoC(Inversion of Control) 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 개발자 입장에서는 자연스러운 흐름이다. 반면에 AppConfig가 등장한 이후에 구현 객체는 자신의 로직을 실행하는 역할만 담당한다. 프로그램의 제어 흐름은 이제 AppConfig가 가져간다. 예를 들어서 OrderServiceImpl 은 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모른다. 프로그램에 대한 제어 흐름에 대한 권한은 모두 AppConfig가 가지고 있다. 심지어 OrderServiceImpl도 AppConfig가 생성한다. 그리고 AppConfig는 ..
[스프링 핵심 원리] 객체 지향 설계와 스프링 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 DI(Dependency Injection) : 의존관계, 의존성 주입 DI 컨테이너 제공 클라이언트 코드의 변경 없이 기능 확장 정리 모든 설계에 역할과 구현을 분리하자. 자동차, 공연의 예를 떠올려보자. 애플리케이션 설계도 공연을 설계 하듯이 배역만 만들어두고, 배우는 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계다. 이상적으로는 모든 설계에 인터페이스를 부여하자 하지만 인터페이스를 도입하면 추상화라는 비용이 발생한다. 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩터링해서 인터페이스를 도입하는 것도 방법이다. 출처 - 인프런 - [스프링 핵심 원리 기본편] 객체 지향 설계와..
[스프링 핵심 원리] 좋은 객체 지향 설계의 5가지 원칙(SOLID) SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP : 단일 책임 원칙(Single Responsibility Principle) OCP : 개방-폐쇄 원칙(Open/Closed Principle) LSP : 리스코프 치환 원칙(Liskov Substitution Principle) ISP : 인터페이스 분리 원칙(Interface Segregation Principle) DIP : 의존관계 역전 원칙(Dependency Inversion Principle) SRP 단일 책임 원칙 Single Responsibility Principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다..
[스프링 핵심 원리] 좋은 객체 지향 프로그래밍이란? 객체 지향 특징 추상화 캡슐화 상속 다형성 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체" 들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 다형성 역할과 구현으로 구분 운전자는 K3, 아반떼, 테슬라로 바뀌어도 영향을 안 받음. 자동차의 역할 인터페이스를 따라 구현했고, 운전자는 자동차의 역할 인터페이스에 대해서만 알고 있어서 클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있음. 로미오 역할, 줄리엣 역할과 배우들(구현)을 구별하면 ..
[스프링 핵심 원리] 스프링이란? 스프링 프레임워크 핵심기술 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹 기술 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합 캐시, 이메일, 원격접근, 스케줄링 테스트 스프링 기반 테스트 지원 언어 코틀린, 그루비 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성 Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨 손쉬운 빌드 구성을 위한 starter 종속성 제공 스프링과 3rd parth(외부) 라이브러리 자동 구성 메트릭, 상태 확인, 외부 구성 같..