분류 전체보기
-
Apache HttpClient 5 알아보기스터디 노트 2023. 12. 6. 13:25
HTTP(Hypertext Transfer Protocol)는 이제 인터넷에서 가장 중요한 프로토콜 중 하나입니다. 웹 서비스를 구성하는 대표적 아키텍쳐인 마이크로 서비스 등에서 사용하는 통신 규약 프로토콜로 HTTP가 지배적으로 사용되며, HTTP 프로토콜은 웹 브라우저에서 더 광범위한 시나리오로 사용되고 있지요. Java Enterprise 개발자라면 HTTP를 다루기 위해 여러가지 공부를 해야 합니다. 오늘은 그 중 Apache의 HttpClient 5에 대해 스터디를 해볼까 합니다. Apache HttpClient 5는 Java에서 HTTP 요청을 보내고 응답을 수신할 수 있도록 기능을 제공하는 라이브러리입니다. 이 라이브러리는 다양한 기능을 제공하여 HTTP 요청과 응답을 보다 쉽게 구현할 수 ..
-
Optional, 그렇게 쓸꺼야🤔?스터디 노트 2023. 12. 5. 15:15
질의를 받았습니다. 여기에 왜 Optional을 쓰셨어요? 음? null을 방지하기 위해서...? 답변하기가 애매했습니다. Optional은 왜 써야 할까요? 삼항연산자로 가볍게 처리하면 되는데 굳이 Optional을 써야만 하는걸까요? 📌 Optional이 뭡니까? Java의 Optional은 null 값을 감싸서(Wrapping) 보다 안전하게 다루기 위한 목적으로 도입된 클래스입니다. Optional의 기본 개념은 다음과 같습니다. Optional은 null 값을 감싸는 객체입니다. Optional은 값이 있는지 여부를 확인할 수 있습니다. Optional에 값이 있는 경우, 값을 가져올 수 있습니다. Optional에 값이 없는 경우, 지정된 값을 반환하거나, 지정된 함수를 호출하여 반환된 값을 ..
-
@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는 비동기 작업을 간편하고 효율적으로..