앞선 글에서 package 구조, Java access modifier 그리고 ArchUnit을 통해 Hexagonal Architecture를 구현해보았다.마지막에 " [1] 개발 중엔 아직 실수할 수 있다, [2] 테스트를 수행하지 않는다면기존의 문제점은 계속해서 발생한다." 문제점들을 이야기했는데이번 글에서는 멀티모듈, JPMS, Kotlin을 이용해서 이 문제들을 해결해보고자 한다. 3. Multi module (멀티모듈)로 구현하기 Chapter 02: Multi module by KimDoubleB · Pull Request #2 · KimDoubleB/clean-architecture-example github.com 결국 ArchUnit으로는 잘못된 의존을 막을 수 있는데 큰 도움이 되..
서버 개발자들간에는 논쟁이 일어날 수 있는 주제가 여러가지가 있다.그 중 대표적인 두 가지를 뽑자면 “Monolithic과 MSA”이고, 나머지 하나가 오늘 이야기 할 “Clean/Hexagonal Architecture”이다. 나는 보통 애플리케이션/프로젝트를 구성할 때 별 다른 고민없이 Layered Architecture로 구성해왔다.그러는데는 아주 지극히 개인적인 여러 이유가 있다.익숙하다. 나에게도 익숙하고, 남에게도 익숙하다. 러닝커브가 낮아 누가와도 개발할 수 있다.개발이 빠르다. 익숙해서 개발이 빠른 것도 있지만, 계층별로만 역할이 나뉘고 의존성/구현 방향이 단순해 생성되는 클래스/파일의 양이 적어 결과물을 보기까지 개발속도가 빠르다.Layered Architecture 구조의 단점이 와..
Spring에서의 ETag Spring에서도 ETag를 손쉽게 사용할 수 있도록 지원하고 있다. 그 중 리소스 캐싱에 대한 기능은 여러 API에서 공통으로 사용할 수 있는 기능이기에 Filter로서 지원하고 있다. 충돌 피하기 (Lost update problem)에 대해서는 지원하지 않는 듯하다. 이에 대해서는 뒤에서 더 알아보자. ShallowEtagHeaderFilter class에서 지원한다. GitHub - spring-projects/spring-framework: Spring Framework Spring Framework. Contribute to spring-projects/spring-framework development by creating an account on GitHub. g..
Spring boot - API Versioning API를 개발하다보면 API 버전에 대한 생각을 하게 된다. 버저닝(Versioning)을 하지 않으면 input/output이 변경되었을 때 이를 사용하고 있던 클라이언트에게 제대로 서비스할 수 없기 때문이다. 이러한 API Versioning을 하기 위해 지금까지 단순히 URI에 version을 명시하는 방향으로만 진행해왔는데, 더 다양한 방법이 있어 이를 정리해놓고자 한다. 모든 예제코드는 아래 Repository를 참고하자. GitHub - KimDoubleB/spring-learning: 🌱 •̀.̫•́✧ 🌱 •̀.̫•́✧ . Contribute to KimDoubleB/spring-learning development by creating a..
개요 / 문제 기존에 Spring fox를 사용하다가 deprecated 되어 springdoc openapi를 도입하게 되었습니다. Swggger 인터페이스는 두 라이브러리 다 맞추고 있었기에 의존성 교체와 몇가지 수정만으로도 대체가 가능했는데요. 근데 막상 개발서버에 배포를 해보니 다음 사진처럼 Failed to load remote configuration. 메시지와 함께 Swagger 실행이 불가능한 문제가 발생했습니다. 뭔가 요청이 제대로 전달되지 않은 것 같아 Chrome 개발자 도구로 확인해보니 Swagger 리소스에 대한 접근이 제대로 되지 않고 있는 것을 발견했습니다. 위 문제를 해결하기 위해 이슈를 찾기 시작했습니다. 원인 파악하기 1. swagger-config 접근 허용하기 제가 운..
사이드 프로젝트를 Spring boot 3.0으로 migration 하면서 정리한 글. 아주 러프하게 정리했다. - 다음에 Spring boot migration 3.0 문서를 번역해야겠다는 생각이 ... javax package name 변경 javax → jakarta IntelliJ에서 import javax. 을 import jakarta. 로 전체 replace하면 편하다. (검토필요) 왜? Java EE는 오라클에서 이클립스 재단으로 이관되었었음. 오라클이 JavaEE 프로젝트는 이관했지만, Java 상표권은 여전히 보유하고 있었기에 Java naming의 namespace 사용에는 제약이 있음. 이로 인해 Java EE는 Jakarta EE로, API package명은 javax.에서 jak..
최근에 Spring boot를 활용한 프로젝트를 보면 MyBatis(SQL Mapper)보다 JPA(ORM)/Hibernate/Spring data jpa를 사용하는 사례가 더 많은 것 같다. JPA, Hibernate, Spring data jpa를 모르는 분은 구글에서 찾아보길 바란다. 이후에는 JPA라고 약칭하겠다. Query Logging JPA/Hibernate를 사용하면 Query를 직접 작성해 활용하는 것이 아니기에 어떤 Query들이 구성되고 사용되고 있는지 확인하기 어려울 때가 있다. 그래서 이를 로깅 (Logging)을 통해 확인할 수 있도록 지원하고 있다. 근데 많이 알려진 방법이 좋지 않을 뿐더러 쿼리 결과도 정확히 나오지 않아 다른 방법을 제시하고자 한다. 일단 많이 알려진 방법대..
- Total
- Today
- Yesterday
- MySQL
- Intellij
- 일상
- Spring
- Algorithm
- 하루
- jasync
- 로그
- tag
- 알고리즘
- c++
- Spring boot
- Log
- WebFlux
- hexagonal architecture
- 백준
- docker
- Kubernetes
- java
- container
- 쿠버네티스
- 클린 아키텍처
- Clean Architecture
- Istio
- 비동기
- k8s
- gradle
- HTTP
- boj
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |