[MSA] 모노 레포와 멀티 레포 전략
·
Spring/Spring Cloud
MSA 강의를 마치고 실습에 도전하려 하는 순간 바로 장애물이 하나 생겼다.레포지터리를 어떻게 만들어야 하지....? 라는 고민이 생긴것이다. 검색해보니 모노 레포와 멀티 레포라는 두 가지 방식이 존재 했고 이에 대한 내용을 정리해보려고 한다.멀티 리포시스템상 각각의 서비스를 별도의 레포지터리로 만들어서 관리하는 방식이다. 서비스 간 연동이 소스 단위로 구성되지 않고, 별도의 폴더로 구성된다.멀티 리포의 장점모듈화 : 각 저장소가 독립적으로 관리되기 때문에, 프로젝트의 규모가 커지더라도 유지보수성이 향상되고 각각의 리포지터리의 책임관계(오너쉽)가 더 뚜렷하다.더 쉬운 의존성 관리 : 각 저장소마다 별도의 의존성 관리를 하기 때문에 쉽게 관리할 수 있다.원활한 협업 : 각 저장소는 모노레포보다 더 작은 규..
[Spring / Swagger] Cors , Fail to Fetch 해결방법
·
Spring
현재 상황은 다음과 같다.1. 서버를 배포함2. 무료 도메인 duckdns를 사용하여 도메인 서버에 내 주소를 등록3. Nginx를 사용해서 SSL 통신 적용, https 통신4. Security에 Cors설정을 해둔 상황 Postman이나 클라이언트단에서 요청을 보내면 정상적으로 데이터를 수신할 수 있었으나 내가 Swagger에서 직접 요청을 보내면 위와 같은 에러가 뜨는 상황이었다. 원인은 Swagger에 설정하지 않은 내 도메인주소로 인해 일치하지 않은 Origin 정책이 발생한다는 것이었다.현재는 상대 경로 설정을 통해 해결할 수 있었지만 그 이전에는 http://[도메인주소]로 지정이 되어 있었고, 내 실제 도메인은 https://[도메인주소]였기에 정상적인 통신이 불가능했다. 이를 해결하기 위..
[Spring / IoC, DI] Ioc Container와 Bean
·
Spring
이전에 공부한 내용을 다시 상기시켜볼겸 스프링의 핵심 기술중 하나인 IoC,DI에 대해 다시 알아보려고한다.IoC 와 DI란? 아래 코드를 보면 @Service라는 어노테이션으로 MemoService라는 클래스에 등록하였고 내부에는 두 개의 필드가 존재한다.그렇다면 MemoService는 Controller또는 Repository와 연결하여 레이어 아키텍처로 설계를 할 수 있고 각 클래스간 연결이 필요하다, 또한 이 연결을 위해 명시하는 필드 memoRepository, jdbcTemplate는 MemoService클래스에서 생성자의 매개변수 또는 필드로 연결되어야 한다.이러한 과정을 Spring에서는 우리가 직접하는 것이 아닌 애플리케이션 시작시에 자동으로 Bean이라는 객체로 생성하고 이를 연결시켜주..
[Logging] 내 프로젝트에 Logging 적용해서 로그 출력하기
·
Spring/Logging
2025.01.06 - [Spring/Logging] - [Logging] 로그 출력을 효율적으로 생성 및 추적하기 7편 - Spring AOP2025.01.06 - [Spring/Logging] - [Logging] 로그 출력을 효율적으로 생성 및 추적하기 6편 - Proxy2025.01.06 - [Spring/Logging] - [Logging] 로그 출력을 효율적으로 생성 및 추적하기 5편 - Template Method2025.01.06 - [Spring/Logging] - [Logging] 로그 출력을 효율적으로 생성 및 추적하기 4편 ThreadLocal사용기2024.12.26 - [Spring/Logging] - [Logging] 로그 출력을 효율적으로 생성 및 추적하기 3편2024.12.2..
[Logging] 로그 출력을 효율적으로 생성 및 추적하기 7편 - Spring AOP
·
Spring/Logging
Spring AOP수 많은 문제점을 거쳐서 드디어 결론에 도달했다... 결국에는 Spring에서 제공하는 AOP의 동작방식과 강력한 지원 기능에 대해 설명하려고 달려왔던것 같았다 ㅎㅎ처음 다뤘던 내용과 같이 애플리케이션의 비즈니스 로직은 핵심 기능과 부가 기능으로 분리할 수 있다.핵심 기능은 도메인의 객체가 수행하는 고유의 기능이다.부가 기능은 핵심 기능을 보조하기위해 제공하는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능 등이 이에 해당된다.핵심 기능은 각 객체의 고유 기능이기에 중복적인 수행이 아니지만, 부가 기능은 동일한 기능을 수행하기 때문에 각 도메인마다 중복되는 기능이 수행된다.객체지향적인 코드를 짜기 위해서는 중복된 내용은 하나의 추상화를 통해 공통적으로 사용할 수 있는 하나의 객체..
[Logging] 로그 출력을 효율적으로 생성 및 추적하기 6편 - Proxy
·
Spring/Logging
Proxy를 사용한 Logging우선 인터페이스 프록시와 상속을 받은 프록시 이렇게 두가지 방법으로 각 레이어에 프록시를 만들어 traceId를 출력하도록 만드는 프록시 객체를 만들어기존의 코드를 수정하지 않고도 프록시 객체가 실제 객체대신 수행되도록 만들 수 있다.하지만 단점으로는 프록시 클래스를 너무 많이 만들어야 한다는 점이다. 또한 프록시 클래스들이 하는일은 로그를 다루는 일인다 그 로직이 모두 똑같다. 그렇다면 굳이 프록시 클래스를 여러개 만들 필요가 없는것이다.이때 사용하는 것이 동적 프록시라는 기술이다.자바가 기본적으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어 낼 수 있다.하나의 프록시 객체를 생성하고 이를 동적..