스프링에서 도메인 객체를 사용하는 건에 대해
·
Spring + Java
스프링에서 도메인 객체를 사용하는 이유가 무엇일까?📌 서론이번 포스팅의 내용은 제가 "전통적인 3계층 아키텍처" 방식과 "DDD를 적용시킨 헥사고날 아키텍처"를 사용해서 개발해 보면서 느낀 점을 정리해 봤습니다. (특히 도메인 객체를 사용하는 이유와 객체 지향적인 개발에 중점을 두었습니다.) 제가 개발해 보며 느낀 점을 정리해 둔 것이기 때문에 잘못된 내용이나 잘 모르지만 아는 것처럼 적어둔 부분도 분명히 존재할 것이라고 생각합니다. 그러니 "단순한 개발 회고록" 정도로만 생각하고 재미있게 봐주시면 좋겠습니다 :) 1. 전통적인 3계층 아키텍처 방식의 개발 (도메인 객체가 없음)일반적으로 3계층 아키텍처에서는 도메인 객체를 사용하지 않는다.3계층 아키텍처에서는 대부분 Entity, Dto를 사용하는 방..
[Spring] synchronized를 사용한 동시성 문제 해결방법
·
Spring + Java
개발중 동시성 문제를 해결하기 위해 lock을 걸곤 한다. 이때 synchronized를 잘못된 위치에 사용하면 lock이 제대로 걸리지 않으니 주의하자.📌 서론자바와 스프링으로 서버를 개발하다 보면 synchronized를 사용해서 lock을 걸어본 경험이 있을 것이다.또한 스프링 내부를 뜯어보다 보면 종종 synchronized를 사용한 코드들이 보인다. 나는 이것들에 대해 크게 신경 쓰지 않고 있었는데 이번에 인강으로 동시성 문제에 대한 공부를 하던 도중 새롭게 알게 된 사실이 있다. 바로 synchronized는 트랜잭션이 걸린 서비스 코드가 아닌 이 서비스 코드를 호출하는 컨트롤러에 걸어줘야만 동기화가 제대로 동작한다는 것이다.지금부터 코드를 통해 왜 서비스에서 synchronized를 적용시..
[Spring] StackTrace 상세분석 (예외처리)
·
Spring + Java
예외가 발생하면 stackTrace는 어떻게 생성될까?📌 서론 RuntimeException이 발생했을 때 (우리가 주로 커스텀 예외를 만들 때도 RuntimeException을 던진다.)우리 개발자들은 예외가 발생하면 로그창에서 stackTrace 로그 내용을 분석하며 쉽게 오류사항을 찾아내곤 한다.스프링은 발생하는 예외를 어떻게 처리하고 stackTrace에 그 내용을 남기는 걸까?이번 포스트에서는 직접 RuntimeException 예외를 발생시키고 이 예외를 처리하는 코드를 따라가 보며 최종적으로 stackTrace를 만들어주는 코드를 분석해 보도록 하자. 이렇게 코드 분석을 따라가다 보면 알게 되는 점은 다음과 같을 것이다.1. RuntimeException은 어떻게 처리되는가 (예외처리 코드..
[Spring] 자바 리플렉션과 생성자 주입의 관계
·
Spring + Java
이번 포스트에서는 Spring 프레임워크가 자바의 리플렉션 기능을 어떻게 활용하여 생성자 주입을 수행하는지에 대해 살펴보자 이번 포스트에서는 특히, 스프링의 AutowiredAnnotationBeanPostProcessor 클래스가 생성자 주입 과정에서 어떤 역할을 하는지 집중적으로 알아볼 것이다. 이 글에서는 리플렉션이 스프링 내부에서 어떻게 사용되는지에 집중하여 설명한다. 이를 통해, 스프링의 내부 동작 방식에 대한 더 깊은 이해를 얻을 수 있을 것이고 자바 리플렉션의 중요성도 알 수 있을 것이라고 생각한다. AutowiredAnnotationBeanPostProcessor 클래스는 아래와 같다. 스프링은 왜 리플렉션을 사용해서 의존성 주입을 할까? 1. 스프링이 리플렉션을 통해 하는 일은 무엇일까..
[Spring] 스프링은 추상화를 어떻게 적용했을까?
·
Spring + Java
스프링은 추상화를 어떻게 사용할까? 간단한 예시로 알아보자 📌 서론 이번 포스트는 실제로 스프링을 개발하면서 자주 사용하게 되는 기능들을 기준으로 정리하였으며 쉽게 이해하기 위해 간단한 코드로 내용을 구성하였다. 만약 추상화의 개념이 부족하다면 아래의 글을 읽어보는것을 추천한다. [Spring] 추상화란 무엇인가? 자바의 "추상화"의 개념을 알아보고 스프링을 이것을 어떻게 사용하는지 알아보자 📌 서론 항상 추상화를 사용하고 있지만 누군가 "그래서 대체 추상화가 뭔데?"라고 물어볼때마다 바로바로 떠 curiousjinan.tistory.com 1. Java의 추상화 추상 클래스와 추상 메서드 Java에서는 abstract 키워드를 사용하여 추상 클래스와 추상 메서드를 정의할 수 있다. 추상 클래스는 인스턴..
[Spring] 스프링의 익명 클래스 활용
·
Spring + Java
스프링 프레임워크에서 익명 클래스를 활용하는 사례를 알아보자 📌 서론 스프링은 Java 기반의 엔터프라이즈 애플리케이션 개발을 위한 강력한 도구로, 다양한 방식으로 익명 클래스를 활용하여 애플리케이션의 유연성과 재사용성을 높일 수 있다. 익명 클래스에 대한 기본적인 이해는 아래의 글을 보는것을 추천한다.👇🏻👇🏻 [Java] 익명 클래스 (Anonymous Class)란? 이번 포스트에서는 익명 클래스에 대해서 알아보자 📌 서론 Java의 익명 클래스는 주로 단순한 인터페이스 구현이나 추상 클래스 확장에 사용되는데, 이를 잘 활용하면 코드를 더 간결하고 명확 curiousjinan.tistory.com 1. 익명 클래스 사용예시 RestTemplate과 커스텀 ResponseErrorHandler구현 스프..
[Spring] 스프링 빈(Bean)을 함수형으로 등록하기
·
Spring + Java
이전 포스팅에 이어서 함수형 프로그래밍의 사용방식을 알아보자.함수형 프로그래밍에 대한 것은 아래의 포스팅을 읽어보자. [Spring] 함수형 프로그래밍이란?함수형 프로그래밍에 대해 알아보자. 1. 함수형 프로그래밍이란?함수형 프로그래밍은 수학의 함수 개념을 프로그래밍에 적용한 패러다임이다. 이 패러다임에서는 순수 함수, 불변성, 고차 함수curiousjinan.tistory.com 1. 함수형 프로그래밍으로 Spring Bean 등록하기Spring Framework는 전통적인 애노테이션 기반 빈 등록 방식 외에도 함수형 프로그래밍을 활용한 빈 등록 방식을 지원한다. 함수형 빈 등록은 특히 이벤트 처리, 스트림 처리 등에서 유용하게 사용될 수 있으며, 코드의 간결성과 유연성을 높여준다. 예시: Consum..
[Spring] 함수형 프로그래밍이란?
·
Spring + Java
함수형 프로그래밍에 대해 알아보자. 1. 함수형 프로그래밍이란?함수형 프로그래밍은 수학의 함수 개념을 프로그래밍에 적용한 패러다임이다. 이 패러다임에서는 순수 함수, 불변성, 고차 함수 등을 중시한다. 간단히 말해, 상태와 데이터를 변경하지 않고 함수를 조합하여 로직을 구성하는 방식이다. 순수 함수: 동일한 입력에 대해 항상 동일한 출력을 반환하며, 외부 상태에 의존하거나 변경하지 않는다.불변성: 데이터는 변경되지 않고, 새로운 데이터가 생성된다.고차 함수: 함수를 인자로 받거나 함수를 반환하는 함수다. 순수 함수 (Pure Function)순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 외부 상태에 의존하거나 변경하지 않는다. 이는 함수의 예측 가능성을 높이고, 테스트를 용이하게 만든다...