Java 13

OpenFeign 알아보기

목차[OpenFeign이란]Open Feign은 Netflix에 의해 처음 만들어진 Declarative(선언적인) HTTP Client 도구.Netflix OSS가 공개되고 나서 Spring Cloud 진영은 Spring Cloud Netflix라는 프로젝트로 Netflix OSS를 Spring Cloud 생태계로 포함시켰는데, Feign은 단독으로 사용될 수 있도록 별도의 starter로 제공되었다.이후에 넷플릭스는 내부적으로 feign의 사용 및 개발을 중단하기로 결정하였고, OpenFeign이라는 새로운 이름과 함께 오픈소스 커뮤니티로 넘겨졌다. 참고자료배민: https://techblog.woowahan.com/2630/로깅 설정 방법: https://cloud.spring.io/spring-c..

Java 2024.08.30

RestClient 알아보기

목차[RestClient?]RestClient는 SpringBoot 3.2에 추가된 것으로 기존 RestTemplate을 대체하게 될 것이며 reactive 한 기능도 포함되어 있다고 한다.  소개 문서: https://spring.io/blog/2023/07/13/new-in-spring-6-1-restclient가이드 문서: https://docs.spring.io/spring-framework/reference/integration/rest-clients.html RestClient는 Spring framework 6.1(Spring boot 3.2)에 새로 추가된 동기식 HTTP Client로 Spring 애플리케이션에서 REST API 호출을 위한 HTTP 요청을 보낼 수 있다.RestClien..

팩토리 메소드 디자인 패턴

[팩토리 메소드 디자인 패턴이란] 객체지향 디자인 패턴중 하나. 상위클래스에 알려지지 않은 구체화된 클래스를 생성하는 패턴이며, 하위클래스가 구체화된 클래스를 생성하도록 하는 것. 기존 코드를 수정하지 않고, 새로운 인스턴스를 여러방법으로 생성할 수 있는 "확장에 열려있고 변경에 닫혀있는 객체 지향 원칙"을 지킬 수 있는 패턴. 이러한 원칙을 만족하는 이유는 제품과 제품을 생성하는 팩토리가 느슨한 결합 구조를 가질 수 있기 때문. 추상화와 다형성을 통해 이를 실현한다. 동일한 인터페이스를 통해 구현된 객체들은 다형성을 이용하면 코드의 수정을 최소화할 수 있기 때문에 느슨한 결합을 가져갈 수 있는 것. [코드 수정이 최소화 될 수 있는 이유] 객체를 생성하는 코드 부분을 분리 시켰기 때문에 객체를 추가 수..

Java/객체지향 2022.11.26

Windows 환경에 Zulu JDK 설치하기

[설치 경로] 다운로드: https://www.azul.com/downloads/ (msi버전 다운로드하고 설치) 기본설치경로: C:\Program Files\Zulu\zulu-11 [환경변수 설정] 환경변수 - 시스템변수 - JAVA_HOME 추가 - 변수값 (C:\Program Files\Zulu\zulu-11) 환경변수 - 시스템변수 - Path 편집 후 추가 (%JAVA_HOME%\bin) [확인] cmd에서 확인 C:\Users\jaeshim>javac Usage: javac where possible options include: @ Read options and filenames from file -Akey[=value] Options to pass to annotation processor..

Java 2022.11.20

유틸성 클래스를 만들기 위해 private 접근제어 활용하기

static 메서드들을 모아놓은 클래스는 기본적으로 인스턴스화를 시켜 사용하지 않는다. 우리가 Arrays를 사용할 때를 생각해보면 절대 Arrays arrays = new Arrays()로 생성하지 않고, Arrays.asList(배열)과 같은 형태로 사용하고 있다. Arrays클래스를 실제로 열어보면 아래와 같다고 한다. public class Arrays { public static boolean isArray(Object o) { ...} public static Object[] asObjectArray(Object array) { ...} public static List asList(Object array) { ...} public static boolean isNullOrEmpty(T[] a..

Java 2022.11.19

throw, throws에 대한 정리

[throw, throws의 차이] throw: 에러를 고의로 발생시킬 때 사용 throws: 자신을 호출한 상위 메소드로 에러 처리의 책임을 전가 시킴. [throw] 예외를 강제로 발생시킨 후 catch문을 통해 예외를 처리한다. public static void main(String[] args) { middleMethod(); } private static void middleMethod() { myException(); } public static void myException() { try{ throw new Exception(); }catch (Exception e){ System.err.println("myException 메서드에 오류 발생!"); } } //실행결과 : myExcepti..

Java 2022.11.19

Checked Exception, UncheckedException

[자바 예외의 종류] Error CheckedException UncheckedException [Error] 시스템에 비정상적인 상황이 발생한 경우. 에러는 개발자가 예측하기도 힘들고 컨트롤하기도 힘들다. ex) OutOfMemory [Exception] 예외는 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생한 것을 말한다. 이러한 예외는 개발자가 직접 컨트롤하여 다르게 처리할 수도 있게 된다. ex) ArrayIndexOutOfBoundsException, NullPointerException, FileNotFoundException 예외의 종류 CheckedException UncheckedException 위 그림으로 보았을 때 RuntimeException 하위의 것들을 Unchek..

Java 2022.11.14

JPA?

JPA: 인터페이스 Hibernate: JPA인터페이스의 구현체. [JPA Components] EntityManager JPA 인터페이스의 일부로 자바 객체 ("@Entity")를 DB에 저장된 데이터와 맵핑 해주는 ORM 기술을 정의한 인터페이스 "@Entity" 어노테이션을 달고 있는 Entity 객체들을 관리하며 실제 DB테이블과 맵핑하여 데이터를 조회/수정/저장 하는 기능을 수행한다. PersistenceContext라는 논리적인 영역을 두어 내부적으로 Entity의 생애주기를 관리한다. Entity의 생애주기 New 처음 생성되어 아직 EntityManager의 관리를 받지 않는 상태. 즉 순수한 자바 객체 상태라고 보면 된다. Managed EntityManager에 의해 관리되고 있는 단계..

Java/JPA 2022.10.30

Annotation 정리

[AutoConfigurationBefore] Target.class 전에 어노테이션이 선언된 Class를 진행한다. [ConditionalOnProperty] Spring 기반 Application에서는 구성 속성의 존재와 값에따라 조건부로 빈을 생성해야 하는 케이스가 있다. ex) 속성 값을 "prod" 혹은 "test"로 설정했는지 여부에 따라 운영이나 테스트 데이터베이스를 가리키도록 Datasource 빈을 등록할 수 있다. 이럴때 사용하는 케이스 ConditionalOnProperty 어노테이션을 사용하면 구성 속성의 존재여부에 따라 조건부로 빈을 등록할수 있게 되는 것

Bean 생성

BeanDefinitionRegistryPostProcessor Spring에서 Bean을 동적으로 생성하는 방법 중 하나. 스프링에서는 보통 정적으로 Bean을 생성한다. 근데 DcmDatasource 같은 경우는 properties파일을 읽어다가 여러 개의 DcmDataSource Bean을 생성해야 한다. (configuration에서 dcm properties수가 몇개가 될 지 모르는 상황) 결국 동적으로 Bean을 생성해줘야하는 상황이다. 이럴 때 사용할 수 있다. ex) configuration에 언급된 에이전트 개수 (DB A서버,DB B서버..) 만큼 datasource를 만들어야 하는 상황 샘플코드 BeanDefinitionRegistryPostProcessor를 사용하기 위해서는 인터페..

Auto Configuration

[Auto Configuration?] AutoConfiguration을 알아보기 전에 "@SpringBootApplication"을 먼저 알아본다. "@SpringBootApplication"은 3가지 어노테이션을 합친것 "@SpringBootConfiguration": "@Configuration"과 같은 기능을 한다. "@EnableAutoConfiguration": "/reousrce/META-INF/spring.factories중 EnableAutoConfiguration에 정의된 Configuration들을 자동으로 빈등록한다. "@ComponentScan": 컴포넌트 어노테이션을 모두 스캔해서 빈으로 등록 이 때 ComponentScan이 먼저 일어난 후 AutoConfiguration의 B..

ClassPath (클래스패스) 란?

[Classpath?] 클래스패스란 말그대로 Java에서 클래스를 찾기위한 경로를 뜻함. Java는 JVM에서 실행되는데, 빌드 과정에서 .java라는 소스코드가 바이트코드인 .class 형태로 변환된다. 이때 Java Runtime으로 이 .class 파일에 포함된 명령을 실행시키려면 먼저 이 파일을 찾을 수 있어야 한다. 이 때 사용하는 것이 classpath이다. 참조 https://effectivesquid.tistory.com/entry/%EC%9E%90%EB%B0%94-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%8C%A8%EC%8A%A4classpath%EB%9E%80

Java 2022.10.27