1. @SneakyThrows - Java에서 메서드 선언부에 Throws 를 정의하지 않고도, 검사 된 예외를 Throw 할 수 있도록 하는 Lombok 에서 제공하는 어노테이션입니다. 즉, throws 나 try-catch 구문을 통해서 Exception 에 대해 번거롭게 명시적으로 예외 처리를 해줘야 하는 경우에 @SneakyThrows 어노테이션을 사용하여 명시적인 예외 처리를 생략할 수 있습니다. - 예외 클래스를 파라미터로 입력받아 원하는 예외 클래스만 동작하도록 할 수 있습니다. - JVM(클래스파일) 수준에서 검사 여부에 관계없이 모든 예외에 대해 throw 가 동작합니다. - 룸북의 공식 홈페이지에서는 이 어노테이션은 논쟁의 여지가 있어 사용 시 신중하게 사용해야 한다고 말하고 있습니다...
개발을 완료하고 컴파일을 하던 도중 아래와 같은 에러 메시지가 나오면서 컴파일이 되지 못하였다. error: unreported exception IOException; must be caught or declared to be thrown throw new IOException("IOException 발생"); 간단하게 나마 번역해보면, throw new IOException 은 보고되지 않은 예외 이다. 해결하기 위해 실제 개발 코드는 아니지만 간단하게 예제를 통해 정리하고자 한다. 1. 에러 발생 원인 public void test(){ String text = ""; if(text == null || text.isEmpty()) { throw new IOException("IOException 발..
이전에 람다(Lambda)를 정리하면서 Java 1.8 부터 제공하는 람다를 활용하는 스트림(Stream) API에 대해서도 정리하고자 합니다. 기존의 Java 에서는 Collection 데이터(List, Map 등)를 처리할 때 for, while 문 등 특정 조건에 따라 요소 하나씩을 꺼내어 처리하면서 복잡한 과정을 거쳐야 했습니다. 아직도 람다 방식이 익숙치 않고 스트림 API도 종종 사용하지만 올바르게 활용하지는 못하고 있는 것 같아 정리하여 기록해보고자 합니다. 1. Stream 이란? - 데이터를 추상화하고, 처리하는데 자주 사용되는 함수들을 정의한다. 데이터 추상화 : 데이터의 종류에 상관 없이 같은 방식으로 데이터를 처리 - 데이터의 흐름 -> 배열 또는 컬렉션에 함수 여러 개를 조합해서 ..
회사에서 업무를 할당받게 되면서 Spring Batch 를 사용하고 있는 배치서버를 맡게 되었습니다.(Spring Batch 에 대해서는 추후 포스팅하기위해, 공부하고 정리하고 있습니다...) 그전에 간단하게 스프링에서 @Scheduled 어노테이션을 사용하여 간단하게 스케줄링 하는 것을 정리해보고자 합니다. 1. Spring Schedule(스케줄) 설정하기 - 간단하게 스프링부트(SpringBoot)에서 스케줄 설정은 아래와 같이 할 수 있습니다. @SpringBootApplication @EnableScheduling public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestAppl..
회사에서 코드를 분석하다가 외부 API 통신 시 사용하고 있는 WebClient 를 발견할 수 있었다. Spring 5 부터 제공하는 기능이였고, 이전에는 RestTemplate 를 사용하고 있었어서 WebClient 에 대해 알아보고 정리해보고자 한다. 1. WebClient 란? - Spring 5 부터 제공하는 RestTemplate 를 대체하는 웹 클라이언트(HTTP Client). - 웹으로 API를 호출하기 위해 사용되는 Http Client 모듈 중 하나. - 기존의 동기(Sync) API 를 제공할 뿐만 아니라, 논블로킹(Non-Blocking) 및 비동기(Async) 방식을 지원해서 효율적인 통신이 가능. - 요청을 나타내고 전송하게 해주는 빌더(Builder) 방식의 인터페이스를 사용...
1. SonarLint 란? - 코드를 작성할 때 품질 문제(버그, 취약점 및 Code Smells)를 정적으로 탐지하여 알려주는 무료 IDE 확장 플러그인 입니다. - 맞춤법 검사기처럼 코드에 문제가 있다면 강조 표시를 하고 커밋되기 전에 코드를 정리하는데 도움이 되는 빠른 수정 또는 명확한 수정 지침을 제공합니다. 코드정적 분석? 실제 프로그램을 실행하지 않고 코드의 형태에 대한 분석. 위험성이 있는 코드, 미리 정의된 규칙이나 코딩 표준에 준수하는지에 대한 분석을 제공. - JetBrains(Intelli J, PyCharm), Eclipse, VS Code, Visual Studio 에서 사용가능합니다. 2. SonarLint의 순기능(Get the power to write better code..
Intelli J에서 MySQL DB를 연결하여 사용하고자 하였는데, 정보를 입력하고 Connection 을 시도하니 아래와 같은 에러가 발생하면서 접속되지 않았다.(MySQL Workbench 로는 정상 접속이 되었다) The server time zone value 'KST' is unrecognized or represents more than one time zone. 1. 해결법 - 보통 프로젝트를 실행하여 DB를 접속할 때는 Datasource의 url에 ?serverTimeZone=Asia/Seoul 을 추가한다. - Intelli J 에서는 해당 URL을 추가하여도 해결되지 않고, Advanced 탭 아래에 설정하는 위치에 해당 값을 설정하여야만 한다. - 인텔리제이 -> [Database..
회사에서 소스를 분석하면서 로그를 기록하는 것에 MDC 라는 것을 사용하고 있었다. (새로운 회사에서 소스 분석하면서 모든게 새롭다... 기존에 내가 사용하던 것들은 어디에...) 간단하게 구글링해보니, 멀티쓰레드 환경에서 스레드 별로 ID를 할당시켜 로깅 추적할 때 원활하게 제공해주는 것이라고 한다고 하는데 이를 정리해보고자 한다. 1. MDC(Mapped Diagnostic Context)란? - Map 형식을 이용하여 클라이언트 특징적인 데이터를 저장하기 위한 메커니즘. - slf4j,logback,log4j2 등 Logger(로거)에서 MDC를 제공한다. - MDC 는 key/value 저장소를 지원하며, 이 저장소는 ThreadContext 에 의존한다. - MDC 클래스는 Map 안에 저장된 ..
이전 글에서 JPA에 대한 기본 정리를 진행해보았습니다. 이번 글에서는 JPA 에서 가장 중요할 수 있는 영속성 컨텍스트(Persistence Context)에 대해서 정리해보고자 합니다. 1. 영속성 컨텍스트란? - 엔티티(Entity)를 영구 저장하는 환경. - 어플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 저장소 같은 역할. - 엔티티 매니저(EntityManager)를 통해 영속성 컨텍스트에 접근. - EntityManager 를 통해 Entity 를 저장, 조회하면 EntityManager 는 영속성 컨텍스트에 해당 Entity 를 보관하고 관리. 2. 영속성 컨텍스트 생명주기 - 영속성 컨텍스트의 생명주기는 아래 이미지와 같이 4가지 상태가 있다. 비영속(new) : 영속성 컨텍스..
MySQL 에서 테이블을 생성하고 Update/Delete 작업을 하려고 하는 도중에 다음과 같은 에러로 인해 실행되지 못 했다. Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 기본적으로 MySQL에서 테이블에 대해 Safe Mode로 하여 데이터를 함부로 변경하지 못하도록 막아둔 것이었다. 이 safe mode 를 풀어야 데이터를 변경할 수 있어 해제하는 방법을 정리하고자 한다. 1. S..