목록💡 백엔드/Java (74)
코딩마을방범대
Reflection 클래스의 구조를 분석하여 동적 로딩을 가능하게 하는 기능 힙 영역에 로드된 Class 타입의 객체를 통해 원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고, 인스턴스의 필드와 메소드를 접근 제어자와 상관 없이 사용할 수 있도록 지원하는 API 장점 런타임 시점에서 클래스의 인스턴스를 생성하고, 접근 제어자와 관계 없이 필드와 메소드에 접근하여 필요한 작업을 수행할 수 있는 유연성을 가지고 있다. 단점 캡슐화를 저해한다. 런타임 시점에서 인스턴스를 생성하므로 컴파일 시점에서 해당 타입을 체크할 수 없고, 구체적인 동작 흐름을 파악하기 어렵다. 단순히 필드 및 메소드를 접근할 때보다 리플렉션을 사용하여 접근할 때 성능이 느리다. (모든 상황에서 성능이 느리지는 않음.) 사용하기 Ref..
System 환경 변수 가져오기 컴퓨터마다 설정되어있는 환경 변수가 천차만별이다. 개발을 하게 되면서 PC에 따른 환경 변수가 필요할 경우가 있는데, Java에서는 이 시스템 환경 변수를 가져올 수 있다. System.getenv() 모든 시스템 환경변수에 대한 값을 key, value ( Map ) 형태로 반환합니다. System.getenv(String name) name에 해당되는 시스템 환경 변수의 값을 반환합니다. 예제 System.getenv("DriverData"); 컴퓨터의 환경 변수 리스트를 확인할 수 있는 방법 제어판 -> 시스템 -> 고급 시스템 설정 -> 환경 변수 System 명령어 실행 시키기 자바프로그램이 돌아가는 시스템(윈도우즈, 리눅스, 유닉스, 등)의 명령어를 실행시킨 후..
REST API로 구축된 웹서비스의 경우 해당 URL에 맞는 하나의 API를 호출하면 하나의 응답을 제공한다. 따라서 어떠한 이벤트가 발생했는지를 조회하기 위해서는 LOG 등을 통해 개발자가 직접 확인해야 알 수 있는 구조이다. 만약 서버에 예상치 못한 예외가 발생했을 때 개발자가 실시간으로 바로 알 수 있는 방법은 없다. 스케줄러 등을 이용해 주기적으로 확인한다쳐도 이미 이벤트가 발생한 한참 뒤일 수도 있다. 이 단점을 극복하기 위해 웹훅을 사용하며, 이 웹훅에 대해서 알아볼 예정이다. 웹훅이란? 웹페이지 or 웹앱에서 발생하는 특정 행동(이벤트)들을 커스텀 Callback으로 변환해주는 방법 행동 정보를 실시간으로 제공하는데 사용됨 서버에서 특정 이벤트가 발생했을 때, 클라이언트를 호출하는 방식으로써..
Optional에 대하여 Object를 리턴하는데 null일 가능성이 있다면 Optional로 래핑하는 것을 권장 매핑 함수의 적용 결과가 null인 경우 빈 Optional을 반환(메소드를 체이닝했을 때 중간에 null이 있어도 빈 Optional로 계속해서 이어나갈 수 있음) 메소드체이닝이란? 메소드를 줄줄이 엵어서 메소드를 계속해서 사용할 수 있게끔 하는 방법 setter() 메소드에서 void가 아닌 세팅된 객체를 리턴 map과 flatmap A type을 B type으로 바꾼다는 뜻(매핑) Optional의 값이 있는 경우에만 실행 map 결과를 Optional로 감싸서 리턴 flatmap 감싸지 않고 반환 orElse와 orElseGet 의 차이점 구분 설명 orElse() 내부 객체의 상태와..
웹 소켓을 이용한 메시지 전송 (이전포스트) 코드에서 아래와 같이 SimpMessageHeaderAccessor을 이용하는 메시지 전송 코드를 보았다. 얼추 봤을 때 WebSocket을 사용하는 것이라고 어림짐작만 했지 본격적으로 알아보기는 이번이 처음이다. Map msgMap = new HashMap(){{ put("키값", "값"); }}; SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); headerAccessor.setSessionId(user); headerAccessor.setLeaveMutable(true); simpMessagingTemplate.convert..
JDK 1.3에 추가되었던 java.util.Timer 클래스와 java.util.TimerTask 클래스를 이용하면 백그라운드에서 특정한 시간 또는 일정 시간을 주기로 반복적으로 특정 작업을 실행할 수 있도록 해준다. java.util.Timer Timer 클래스는 아래와 같이 3가지 메소드를 제공한다. Timer timer = new Timer(); // true를 주게 되면 데몬 스레드를 사용하게 된다고 한다. Timer timer = new Timer(true); schedule 메소드 설명 schedule(TimerTask task, Date time) 설정한 time 시간에, 설정한 task 작업을 수행 schedule(TimerTask task, Date firstTime, long peri..
Guava Cache 데이터를 계속 읽을 필요가 없을 경우 캐쉬를 이용하여 처리를 할 수 있다. 일반적으로 엔티티를 캐쉬도 하지만 설정(Config) 같이 자주 바뀌지 않는 값을 Cache를 이용하여 활용할수 있다. LoadingCache와 Cache(com.google.common.cache.Cache) 를 활용할 수 있다. LoadingCache LoadingCache 인스턴스는 객체 build시에 Key 값을 로딩하는 로더를 지정해줘야한다 예시. LoadingCache graphs = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) .removalListener(MY_LISTENER) .build..
Spring에서 Bean을 사용할 경우 Autowired를 이용해 의존성을 주입받는다. 만약 동일한 타입을 가진 Bean이 두 개 이상일 경우에는 사용할 Bean에 대한 선택이 필요하다. 동일한 타입을 가진 여러 Bean이 있을 때 그냥 호출할 경우? 스프링이 어떤 빈을 주입해야 할 지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 Exception을 발생시킨다. 단, @Autowired가 적용된 필드나 설정 메서드의 property 이름과 같은 이름을 가진 빈 객체가 존재할 경우에는 이름이 같은 빈 객체를 주입받는다. 위와 같은 오류를 방지하기 위해 동일한 타입의 Bean 사용 시 사용할 Bean을 명시해줘야 한다. @Qualifier 사용할 의존 객체를 선택할 수 있도록 해준다. 사용 방법 1...