스터디 노트
-
@Transactional 사용 시 주의해야 할 사항들스터디 노트 2023. 12. 4. 16:57
@Transactional 애너테이션은 스프링 AOP를 사용해 동작합니다. AOP 위빙이 되지 않은 채 대상 메서드가 실행되어도 알기가 어렵습니다. 즉, 대상 메서드가 실행되었지만, 어드바이스가 정상적으로 실행되지 않을 수 있다는 말이 됩니다. 여기서 개발자가 쉽게 실수하는 두 가지 주의 사항과 사용할 때 유의점을 살펴보도록 하겠습니다. ✅ public 접근제어자로 선언된 메서드만 @Transactional 애너테이션이 동작합니다. final이나 private 접근제어자로 선언된 메서드는 프록시로 만들 수 없기 때문에 애너테이션을 선언해도 정상동작하지 않습니다. ✅ 스프링 빈으로 주입된 객체의 메서드를 호출해야 합니다. 당연하겠죠. 우리는 스프링 프레임워크 위에서 동작하게 됩니다. ApplicationC..
-
@Transactional 애너테이션에 대하여스터디 노트 2023. 12. 4. 13:09
스프링 프레임워크에선 데이터베이스 트랜잭션 기능을 사용할 수 있는 Transactional 애너테이션을 제공합니다. 이 애너테이션은 JPA가 아닌 스프링 프레임워크에서 제공하는 기능입니다. 트랜잭션은 영속성 프레임워크의 종류와 상관없는 관계형 데이터베이스의 기능이기 때문에 JPA/Hibernate도 결국 SQL쿼리로 데이터를 영속하므로 트랜잭션을 사용할 수 있지요. 다음은 Transactional 애너테이션 코드입니다. @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Transactional { ... } Transactional ..
-
Java에서 Serializable은 무엇일까? 직렬화 vs 역직렬화스터디 노트 2023. 12. 4. 10:30
우리가 코드를 작성하다보면 직렬화/역직렬화에 대해 고민을 하게 됩니다. 직렬화와 역직렬화는 대체 왜 쓰는걸까요? 일단 직렬화 대상 객체의 소스 코드를 확인해보겠습니다. // 직렬화 대상 객체 class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getters & Setters } 대체 이러한 serializable과 직렬화/역직렬화는 무엇이며, 왜 사용하는 것인지에 대해 간략하게 알아보도록 하겠습니다. 📌 왜 쓰는가? 직렬화 코드는 뭐..번거롭다면 번거롭겠지만, 우선 왜 추가를 해야 하..
-
Aspect Oriented Programming(AOP) 에 대하여스터디 노트 2023. 11. 23. 22:17
📌 들어가며 해당 내용은 '스프링부트로 개발하는 MSA 컴포넌트' 책을 참고하여 작성되었습니다. 📌 Aspect Oriented Programming(AOP) AOP란 무엇일까요? AOP란 프로그램의 구조를 관점 기준으로 공통 관심사를 분리하여 기능을 제공하는 방식으로 구현하는 것을 말합니다. 즉, 횡단관심사들을 따로 모아놓은 기능 모듈이라고 생각하면 되겠지요. 핵심 비즈니스 로직 가운데 공통의 횡단 관심사의 기능들을 모아 제공하는 방식이라 생각하면 됩니다. 우린 이 AOP를 사용하여 클래스의 코드와 관점의 코드를 완전히 분리해낼 수 있습니다. 관점지향 프로그래밍을 위해서는 다음 설계 고려사항을 명심해야 합니다. ✅ 기능의 분류 애플리케이션의 기능적 요구사항과 비기능적 요구사항을 분류합니다. 기능적 요구..
-
모놀리식 아키텍쳐 vs 마이크로 서비스 아키텍쳐 (Monolithic Architecture vs Micro Service Architecture)스터디 노트 2023. 11. 23. 10:39
우리가 흔히 알고 있는 아키텍쳐의 개념에는 모놀리식 아키텍쳐와 마이크로서비스 아키텍쳐가 있습니다. 그 외에도 다양하게 존재하지만 대표적인 아키텍쳐는 위 두 종류의 아키텍쳐이죠. 그럼 모놀리식과 마이크로서비스아키텍쳐는 무엇일까요? 📌 Monolithic Architecture(모놀리식 아키텍쳐) 모놀리식 아키텍쳐는 하나의 프로젝트에 모든 서비스들이 집중되어 있는 것을 말합니다. 쉽게 말해 하나의 세트로 모든 서비스들이 구성되어 있다는 것이죠. 사용자 인증이나 UI, 코어 비즈니스 로직, 각종 이벤트 들에 대한 서비스 모듈이 구분이 없이 하나의 프로젝트 내에 모두 집약되어 있는 상태입니다. 모놀리식 아키텍쳐의 장점은 우선 개발이 쉽다는 것이죠. 서비스간의 관계나 각 모듈의 분리 기준 등에 대한 결정 없이 그..
-
[Java] CompletableFuture 에 대하여스터디 노트 2023. 11. 22. 11:14
📌 들어가며 최근 비즈니스 로직상 응답이 급하지 않은(?) 기능을 구현할 일이 있었습니다. 기존 비즈니스를 고도화하던 중이었는데, 타 서비스 모듈로 로깅 시스템 호출을 보내고 그 로깅 시스템의 응답을 한참을 기다리는..그야말로 최악의 비즈니스 시나리오로 구성이 되어 있었습니다. 타 서비스 모듈이 바쁠때는 5분이고 10분이고 마냥 기다려야만 하는... 그리하여 이 부분은 비동기 방식으로 변경하였고, CompletableFuture를 사용하여 구성을 하였습니다. 어렴풋이 알고 써봤는데 아까우니 기록해놓으려 합니다. 참고로 코드들은 Google사의 Bard AI를 통하여 생성한 매우 간략한 예제입니다. 📌 CompletableFuture 일단 CompletableFuture는 비동기 작업을 간편하고 효율적으로..
-
[ClickHouse] 클릭하우스 자바 클라이언트 만들어 데이터 다루기 예제! ClickHouse + Java + Http Client Exam스터디 노트 2023. 11. 21. 22:22
📌 들어가며 이번 게시글에서는 ClickHouse를 도커로 띄우는 방법에 대해 알아보았습니다. [ClickHouse] 클릭하우스를 도커로 띄워보기! ClickHouse with Docker Container 📌 들어가며 어제 깔짝 클릭하우스(ClickHouse)라는 플랫폼에 대해 스터디를 해봤지요. 컬럼 기반 DB로 엄청나게 빠른 데이터 조회 속도와 효율적인 저장구조를 보유하고 있다는 장점이 있었습니 deguruv.tistory.com 이번에는 이미 도커에 떠있는 ClickHouse에 HTTP Client를 만들어 데이터를 송신하는 샘플 예제를 만들어보도록 하겠습니다. ClickHouse HttpClient 연결부터 테이블 만들고 INSERT 및 SELECT 쿼리까지 한 번에 확인해보겠습니다! 실습 코드..
-
[ClickHouse] 클릭하우스를 도커로 띄워보기! ClickHouse with Docker Container스터디 노트 2023. 11. 21. 10:51
📌 들어가며어제 깔짝 클릭하우스(ClickHouse)라는 플랫폼에 대해 스터디를 해봤지요. 컬럼 기반 DB로 엄청나게 빠른 데이터 조회 속도와 효율적인 저장구조를 보유하고 있다는 장점이 있었습니다. 단점으로는 트랜잭션을 지원하지 않는다는것과 수정이나 삭제 기능이 부족하며, 단건 조회의 경우에는 기존 방식보다 느리다는 점이 있었습니다. 자세한 내용은 아래 내용을 참고해주시면 됩니다 :D [ClickHouse] 클릭하우스란 무엇일까?📌 들어가며 대용량 데이터..라고 하기엔 초라하지만 하루 30만건 정도의 데이터를 처리할 수 있는 고성능 DB가 무엇이 있을까 고민을 해보았습니다. 기본에는 Oralce을 사용하고 있었고(윽..비싸deguruv.tistory.com여튼, 어제 클릭하우스가 무엇인지에 대해 공부를 ..