앞선 글에서 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 구조의 단점이 와..
최근에 서비스 개발 코드들을 보면서 옛날 클래스 네이밍/아키텍처 패턴을 보고 있습니다. 예를 들어 DTO, DAO 같은 것들 말이죠. 대략적으로는 알지만, 오랜만에 봐서 그런지 헷갈려 정리해놓고자 합니다. 이 글에서는 일반적으로 이런 역할을 가진다라고 이야기하지만 무조건 적인 것은 아닙니다. 변질된 사례도 많고, 구현하는 사람마다 이해하는 바가 다르기 때문입니다. 그리고 개인적인 의견입니다만 최근에는 여기서 말하는 모든 네이밍/패턴은 많이 사용되지 않는다고 생각합니다. 여러 다른 프레임워크/구현체(ex. JPA/Hibernate 등)들이 어느정도 많이 사용되면서 다른 명명 패턴/추상화(ex. Repository 등)를 사용하고 있기 때문입니다. 하지만 그럼에도 팀 및 정해진 인원들이 어느정도 정해진 컨벤..
최근 재미로 Kotlin을 사용해보고 있는데, 한 가지 불편한게 있었다. Java를 사용할 땐 아래의 사진의 빨간 부분처럼 IntelliJ가 hint를 주고 있었는데, Kotlin을 사용하니 이 정보를 주지 않았던 것. 있을 땐, 이게 도움이 되는지 몰랐는데, 없으니 괜히 사소하게 불편했다. 그래서 이 참에 찾아봤는데, 이 기능은 `Inlay hints`라고 한다. Code reference information | IntelliJ IDEA www.jetbrains.com 이를 Kotlin에서 활성화시켰더니, 잘 보인다. 흐흐. 진작 사용할 걸.
Tomcat 같이 Thread pool을 만들어두고 사용하는 경우, ThreadLocal 사용 시 주의해야하는 점이 있습니다. 바로 Thread 반환 시, ThreadLocal을 remove 해주어야 한다는 점입니다. 왜 Thread pool을 사용할까요? Thread pool을 사용하는 경우는 이유가 명확한데요. Thread를 작업 도중 생성하는 것이 시간이 오래 걸리는 비싼 행동이기 때문입니다. 그러므로 특정한 개수(Tomcat의 경우 200개)만큼의 Thread를 미리 만들어두고, 요청이 들어올 때마다 만들어둔 Thread를 이용하도록 합니다. 작업이 끝나면 다시 Thread를 반환하고, 추후 다른 요청을 처리할 때 다시 이용하게 됩니다. 왜 이러한 Thread pool 구조에서 ThreadLoca..
Java Stream 사용 시, debugging이 어려울 때가 있다. IntelliJ IDEA에서는 Stream debugging 시 시각적으로 데이터를 확인할 수 있는 기능을 제공하고 있는데, 이게 정말 편리하다. 이를 활용해보자. 예제 간단한 예제를 만들었다. (참고: Java 17 (LTS) 을 사용했다) public static void main(String[] args) { var people = List.of( new Person("Sim", 47, City.SEOUL), new Person("Lee", 31, City.BUSAN), new Person("Kim", 23, City.SEOUL), new Person("Park", 18, City.JEJU), new Person("Song", ..
Flame Graph ? show the CPU time spent in Java methods, system libraries, and the kernel, all in one visualization. 해석하기 각 사각형은 stack frame을 나타낸다(즉, 함수). 사각형의 가로(width)는 현재 프로파일에 얼마나 존재하는지(실행되는지)를 나타낸다. Graph x축 왼쪽과 오른쪽 순서는 중요하지 않다. stack은 단순히 알파벳 순서대로 정렬된 것이다. y축 stack depth. 함수들간의 호출 depth. Stack의 색상들은 code type에 따라 설정된다. 보통 Java code는 초록색, C++ code는 노란색, System은 빨간색으로 설정된다. 하지만 다른 color scheme..
- Total
- Today
- Yesterday
- java
- gradle
- 비동기
- 일상
- boj
- WebFlux
- OpenTelemetry
- docker
- k8s
- 알고리즘
- Intellij
- tag
- Kubernetes
- 쿠버네티스
- c++
- MySQL
- python
- 클린 아키텍처
- container
- Spring
- Log
- Algorithm
- Istio
- jasync
- HTTP
- 하루
- Spring boot
- Clean Architecture
- 백준
- 로그
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |