반응형

전체 글 428

@Transactional 상태에서 Exception이 발생했을 때 Rollback 동작 과정

@Transactional 어노테이션을 통해 트랜잭션을 선언하고 메서드 내부 로직을 짜던 중 '트랜잭션 안에서 발생하는 예외와 그 예외를 처리하는 방법에 따라 어떻게 롤백이 되는지'에 대한 개념이 명확하지 않아 정리해본 내용입니다. 결론을 먼저 말하자면 Unchecked Exception 발생 시에는 트랜잭션이 롤백되지만, Checked Exception 발생 시에는 트랜잭션이 롤백되지 않는데요. 이어지는 내용을 통해 Unchecked Exception, Checked Exception에 대한 간단한 정리와 더불어, 각 상황에 따른 코드 예시와 동작 과정, 그리고 결과를 살펴보겠습니다. Checked Exception, Unchecked Exception - Checked Exception Compile..

spring 이벤트 사용하기(event publisher, event listener)

최근 프로젝트에서 'Spring Event'를 사용하게 되면서 정리한 내용입니다. 아래 내용에서 자세하게 볼 수 있겠지만 Spring Framework 4.2부터 스프링 이벤트의 사용이 간편해졌는데요. 기본적인 적용은 쉽고 간단하지만 실제 프로젝트에서는 @TransactionalEventListener 등의 조금 더 향상된 기능이 많이 사용되는데 해당 포스팅은 spring event 적용에 대한 기본적인 내용을 담았으며, 함께 사용되는 @TransactionalEventListener 어노테이션에 대한 내용은 추후 따로 포스팅하여 해당 글 하단에 링크하도록 하겠습니다. 1. 스프링 이벤트를 사용하는 이유와 장점 spring event를 사용하는 가장 주된 이유는 '서비스 간의 강한 의존성을 줄이기 위함'..

티스토리 Odyssey Skin 본문 너비(폭) 늘리는 방법

Odyssey skin은 티스토리에서 스킨 변경을 통해 기본적으로 사용할 수 있는 스킨 중 하나인데요. 반응형과 목록 광고 형태가 지원되며, 깔끔한 디자인으로 인해 여러 블로그에서 많이 사용되는 스킨입니다. 해상 스킨을 사용하고 있는 경우에는 아시겠지만, 오디세이 스킨은 기본적으로 적용되는 본문 폭이 넓지 않아 가독성과 공간 활용이라는 측면에서 크게 효율적이지 못한데요. 이번 포스팅은 '티스토리 odyssey skin 본문 너비(폭)를 늘리는 방법'에 대한 포스팅입니다. (해당 스킨에 설정된 css 변경을 통해 본문 폭을 늘리는 방법입니다.) 1. 스킨 편집 본문의 너비를 늘리기 위해서는 티스토리에 로그인 후 '블로그 관리 홈'으로 이동합니다. 그리고 '블로그 관리 홈' 아래에 '꾸미기' 카테고리 하위의..

IT Info 2022.12.20

Base64와 Base64UrlSafe 차이점 (Illegal base64 character 발생 이유)

Base64 encoding, decoding 기능을 사용하던 중 java.lang.IllegalArgumentException: Illegal base64 character 2b 예외가 발생했는데요. 해당 Exception은 Base64와 Base64 UrlSafe의 차이점을 제대로 알지 못하고 사용하였기 때문에 발생한 것이었으며, 해당 문제를 해결하면서 관련 내용을 함께 정리하였습니다. * 결론을 먼저 말하자면 Base64 UrlSafe로 디코딩할 수 없는 문자를 디코딩하려고 했기 때문에 발생한 오류였습니다. Base64란? 8비트의 이진 데이터(Binary Data)를 문자 코드에 영향을 받지 않는 공통 ASCII 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 말합니다. Base64는 6..

Programming/Web 2022.12.17

spring cloud config 개념 및 동작 원리

Spring Cloud Config 개념 및 동작원리와 구현 예제까지 한 번에 정리를 해보려고 했으나, 구현 예제에 대한 내용이 다양하여 한번에 정리하기가 어려울 것 같아서 일단 개념과 동작 원리에 대해서만 먼저 정리하는 포스팅입니다. *.properties, *.yml 파일 spring cloud config에 대해서 살펴보기 전에 .properties 또는 .yml 파일의 역할에 대해서 먼저 살펴보겠습니다. *.properties와 *.yml 파일은 어플리케이션의 환경 설정 값을 가지고 있는 파일로 '환경설정 파일', '외부 설정 파일'(=config file)이라고 불리는데요. 스프링 부트 어플리케이션에서 이러한 환경설정 파일이 필요한 이유는 로컬(local), 개발(dev), 운영(prod) 환경..

포토샵 점선 그리는 방법 (Pen Tool, Brush Tool 사용)

포토샵에서 점선을 그릴 때 '선'이기 때문에 '라인 툴(Line Tool)'을 사용해서 선을 그리려고 할 수 있는데요. 막상 라인 툴을 사용해서 점선을 그려보면 위 이미지처럼 원하는 깔끔한 점선이 나오지 않게 됩니다. 이유는 Fill(칠) 영역과 Stroke(획) 영역이 나눠져 있기 때문인데요. 그려진 선의 테두리(stroke) 부분에 점선이 적용되기 때문입니다. 그렇다면 포토샵에서 점선을 그리는 두 가지 방법(펜 툴, 브러쉬 툴)에 대해서 이어서 살펴보겠습니다. (예시에 사용된 포토샵 버전은 Adobe Photoshop 2020을 사용하였습니다.) 1. 펜 툴(Pen Tool) 점선 그리기 펜 툴(단축키 p)을 선택하고 상단에 Shape(모양)을 선택합니다. 그리고 칠(File)의 경우 색상 없음을 선..

Photoshop 2022.12.10

JPA에서 Native SQL Function 사용하는 방법 (MetadataBuilder)

How To Use Native SQL Functions in JPA Queries? JPA 동작 방식과 Dialect SQL은 모든 DBMS에서 공통적으로 사용하는 표준 SQL인 ANSI SQL 외에 DBMS Vender인 MS-SQL, MySQL, Oracle, PostgreSQL 등에서 제공하는 SQL이 있는데요. 각각의 DBMS Vender에서 사용되는 SQL은 문법과 함수가 조금씩 다른 경우가 있는데, 이처럼 SQL 표준에서 벗어난 특정 Vender별 기능을 Dialect(방언)이라고 합니다. /* Oracle에서는 문자열을 자르는 함수로 SUBSTR()가 사용되는 반면, MySQL에서는 SUBSTRING()도 사용할 수 있다거나, Oracle에서는 ID 값을 증가시키기 위해 Sequence를 ..

mac 내부 ip 확인하는 방법

IP(Internet Protocol)이란? 인터넷 및 네트워크 상에서 연결된 모든 장치들(컴퓨터, 모바일 기기, 서버 장비 등)을 식별할 수 있도록 각각의 장비에 부여되는 고유 주소인데요. macOS에서 내부 ip를 확인하는 방법에 대해 알아보기 전에 '내부 ip'와 '외부 ip'에 대한 개념을 간단하게 살펴보고, 이어서 '내부 ip 확인 방법'에 대해서 살펴보겠습니다. 외부 IP 공인 ip라고도 하며, 인터넷 사용자의 로컬 네트워크를 식별하기 위해 인터넷 공급자(ISP)가 제공하는 ip 주소를 말합니다. (IPS, Internet Service Provider는 KT, LGT, SKT와 같이 인터넷을 제공하는 통신업체를 말합니다.) 공인 ip는 전 세계에서 유일한 주소 값을 가지며, 외부에 공개되어 ..

Programming/MacOS 2022.12.07

(Spring Boot) flyway 데이터 마이그레이션 설정 방법

Flyway란? 일반적으로 프로그램의 소스코드를 효과적으로 관리할 수 있게 해주는 형상 관리 도구(Configuration Management Tool)로 Git을 많이 사용하고 있는데요. Flyway는 데이터베이스의 형상 관리를 목적으로 하는 오픈소스 데이터베이스 마이그레이션 툴입니다. * 형상관리(Software Configuration Management) - 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것 데이터베이스의 형상 관리를 통해 얻을 수 있는 이점으로는 크게 '데이터베이스 schema의 변경 이력이 남는다'는 것과 '데이터베이스 변경 작업을 안전하게 할 수 있다'는 것이 있는데요. 데이터베이스에서 어떤 문제가 발견되었을 때, 이전에 해당 DB를 수정한 이력이 남아있다면 그 내용을 ..

Java Iterable Iterator 차이점 정리

지금까지 java를 배우고 실무에 활용하면서 Iterator, Iterable을 직접적으로 쓴 적은 한 번도 없었는데요. 최근 다른 코드에서 해당 인터페이스들을 사용하는 것을 보고 무슨 기능을 하는지 궁금해서 정리한 내용입니다. Iterator Iterator는 Java Collections Framework에 속해있으며, java 1.2에서 발표된 인터페이스입니다. Iterator는 Collection에 저장된 요소를 읽어오는 것을 표준화한 인터페이스로 데이터를 하나씩 읽어올 때 사용되는데요. 다음 요소를 가지고 있으면 true를 반환하는 hasNext() 메서드와 다음 요소를 반환하는 next() 메서드가 있으며, default 메서드로 해당 iterator로 반환된 요소를 제거하는 remove() ..

Programming/Java 2022.12.02

mysql 자동 백업 설정 방법 (ubuntu server)

데이터베이스를 착각해서 데이터를 한번 날리고 나서야(정말 다행히도 개발서버) 백업 설정을 잘해야겠구나를 느끼게 되었습니다. 이후 운영환경의 서버에서는 데이터베이스 생성 후 가장 먼저 백업부터 설정하게 되었는데요. 해당 포스팅은 ubuntu 서버에서 mysql, mariadb 자동 백업을 설정 방법에 대한 내용입니다. (백업 과정에서 mysqldump 기능이 사용되는데, 해당 기능에 대한 자세한 내용은 따로 정리한 포스팅이 있어서 맨 하단에 링크를 첨부해놓았습니다. 필요하신 경우 참고해주시면 좋을 것 같습니다.) 백업 방식은 크게 '백업을 수행할 스크립트 파일(.sh) 생성', '작업 스케줄러(crontab)를 통해 생성된 스크립트 파일을 스케줄링' 두 가지로 나뉘는데요. 이어지는 내용을 통해 구체적인 데..

Programming/MySQL 2022.12.01

Spring Cloud Gateway를 이용한 API Gateway 구축해보기

어느 정도 규모 이상의 마이크로 서비스 아키텍처 기반 서비스에서는 API Gateway를 도입하는 것이 효율적이라고 하는데요. API Gateway는 쉽게 클라이언트와 각각의 서비스들 사이에 위치하며, 요청을 라우팅 해주는 등의 역할을 수행하는 서비스로 아래 내용은 Spring Cloud Gateway(SCG)의 동작 원리 및 구현 예제입니다. 2022.11.20 - [Programming/Spring Cloud] - API Gateway란? 개념과 주요 기능 (API Gateway에 대한 조금 더 자세한 내용이 궁금하시다면 다음 포스팅을 참고해주시면 좋을 것 같습니다.) Spring Cloud Gateway 구성 스프링 클라우드 게이트웨이는 MSA 환경에서 사용되는 API Gateway 중 하나로 Sp..

리눅스 파일 편집기 vi 자주 사용되는 명령어 정리

vi란? vi는 문서 편집기입니다. windows 운영체제에서는 기본적인 문서 편집기로 '메모장'을 지원하는데요. linux 운영체제에서 기본적으로 지원하는 문서 편집기가 바로 'vi'입니다. vi와 vim은 무엇이 다를까요? vim(vi improved)는 단어 뜻 그대로 기존의 vi(visual editor)에서 기능을 향살 시킨 에디터이며, vi가 텍스트 편집에 필요한 최소한의 기능만을 가지고 있어 사용에 불편한 점이 있기 때문에 그 부분을 보완하기 위해 나온 것이 바로 vim입니다. 그러면 vi가 아니라 vim을 사용해야 하는 것 아닌가요? 리눅스에는 vim editor가 설치되어 있습니다. 때문에 vi를 사용해도 vim이 실행되고, vim을 사용해도 vim이 실행되는 것입니다. (vim 안에는 ..

Programming/Linux 2022.11.24

API Gateway란? 개념과 주요 기능

1. API Gateway란? 최근 많은 서비스들이 독립적인 기능을 수행하는 작은 단위의 서비스들로 구성된 마이크로 서비스 아키텍처(Micro Service Architecture) 형태로 구축되면서 서비스의 복잡도를 줄일 수 있게 되었고, 변경에 따른 영향을 최소화하면서 개발과 배포를 할 수 있다는 장점도 얻게 되었는데요. 하지만 여기서 말하는 작은 단위의 서비스가 50개, 100개가 되었을 때, 이 많은 서비스들의 엔드포인트를 관리하는 데 있어서 어려움이 생기고, 또 각각의 서비스마다 공통적으로 들어가는 기능(ex 인증/인가, 로깅 등)들을 중복으로 개발해야 한다는 문제점이 발생합니다. 이러한 문제점을 해결하기 위해 등장한 것이 바로 API Gateway로 API Gateway는 위 이미지와 같이 클..

로깅시 System.out.println() 사용을 지양해야 하는 이유

Java 프로그래밍을 처음 접하게 되면 거의 대부분이 다음과 같이 "Hello World"를 콘솔에 출력하는 것에서부터 시작하게 됩니다. 이때 사용되는 출력 방법인 System.out.println() 메서드는 자바 표준 입력 클래스인 System을 사용하기 때문에 클래스 경로에 추가해야 될 라이브러리나 추가 구성이 필요 없기 때문에 간편하고 쉽게 사용할 수 있다는 장점이 있는데요. 하지만 프로덕션 코드(Production Code)에서는 System.out.println() 메서드를 통한 출력이 지양되는데, 그 이유는 무엇인지 살펴보겠습니다. /* 로깅(Logging)이란? 로깅은 프로그램 실행 동작을 일련의 기록인 로그(Log)의 생성을 통해 남겨놓는 일을 말합니다. 로그는 재현하기 힘든 버그나 성능..

Programming/Java 2022.11.16
반응형