본문 바로가기

728x90
반응형

전체 글

(694)
스프링 트랜잭션 전파 기본개념 개요 데이터베이스의 트랜잭션 고립 수준에 대해 공부하다가 스프링에서 트랜잭션이 부모와 자식 사이에 전파가 된다는 사실을 알았습니다. 여러 가지 전파 수준이 있는데, 수준에 따라서 어떻게 결과가 달라지는지 궁금해서 테스트를 통해 알아보도록 하겠습니다. 트랜잭션 커밋과 롤백 트랜잭션 시작 시 Hikari에서 커넥션(Connection)을 가져오고 커밋을 하면 Hikari에 커넥션을 반납합니다. 또한, 롤백도 마찬가지로 반영된 내용을 모두 롤백하고 Hikari에 커넥션을 반납합니다. 만약에 아래 코드처럼 첫번째 트랜잭션이 커밋되고, 두번째 트랜잭션이 롤백된다면 트랜잭션 사용은 어떻게 될까요? @Test void double_commit() { log.info("트랜잭션1 시작"); TransactionStat..
스케줄링에 어떤 기술을 사용할까?(@Scheduled vs Spring Batch vs Quartz) 개요 Quartz는 오픈소스 잡 스케쥴링 프레임워크로 자바를 사용합니다. 단순하면서도 엄청난 유연성을 가지고 있으며 이를 통해 스케쥴링 추가와 DB 클러스터링 설정을 해보겠습니다. @Scheduled vs Spring Batch vs Quartz 스케쥴링을 위한 기술로는 크게 3가지를 선택할 수 있습니다. 스프링 기본 기능의 @Scheduled, Spring Batch, Quartz입니다. 처음으로 @Scheduled는 스케쥴링 기본 기능만 제공하며 DB 클러스터링이 가능하지 않습니다. 외부 라이브러리인 Shed Lock을 사용하여 제어할 수 있으나 현재 java 버전에 맞지 않아서 사용이 불가합니다. 현재 이 방식을 사용하고 있었는데 INSERT 작업의 경우 2개의 서버에서 중복 작업하는 문제가 발생하..
객체지향과 4대 특성 객체란? 현실세계의 구체적인 사물(Object)과 더불어 정신적인 영역까지 포함한 하나의 "개념"으로 정의할 수 있는 모든 것입니다. 객체지향이란? 객체지향이란 시스템을 하나의 공동체로 바라보고 자율적인 객체들이 서로 상호작용하도록 객체를 이용해 시스템을 분할하는 것입니다. 객체지향의 시작은 객체에 적절한 책임을 부여는 것. 객체 간의 요청과 응답하는 협력으로 시스템이 구성됩니다. 자율적인 객체란, 상태(varaible), 행위(method)를 가지며 스스로 자신을 책임지는 객체를 의미합니다. 상태, 속성(Variable) 객체는 상태 정보를 저장하고 유지해야 하는데 이러한 속성은 변수로 정의됩니다. 속성 값이 바뀜으로써 객체의 상태가 변경될 수 있습니다. 기능(method) 외부로부터 직접 속성에 접근..
mutable vs immutable 개요 자바의 클래스는 mutable과 immutable 2가지가 존재합니다. 2개의 차이점을 알아보겠습니다. mutable과 immutable mutable 객체는 초기화 된 이후 변경이 가능합니다. 하지만, immutable 객체는 초기화된 이후 변경이 불가능합니다. 자바는 String을 제외하고 기본적으로 mutable합니다. immutable int, long, float, double과 같은 원시 객체들 legacy 클래스(HasTable, Stack, Dictionary, Properties, Vector) Wrapper 클래스(BooleanCharactor, Byte...) String 클래스 getter 메서드만 사용이 가능하고 setter는 제공되지 않습니다. mutable Java.uti..
StringBuffer vs StringBuilder 개요 자바는 연속되는 문자열을 표현하기 위한 3가지 클래스가 있은데, String, StringBuffer, StringBuilder입니다. 3가지의 차이점을 비교해보겠습니다. String과의 차이점 String은 immutable 클래스 StringBuffer와 StringBuilder는 mutable 클래스 StringBuffer vs StringBuilder No StringBuffer StringBuilder 1) 동기화되어 쓰레드 안전 (여러개의 쓰레드가 StringBuffer 메서드를 동시에 접근할 수 없다) 동기화되지 않아 쓰레드에 안전하지 않음(여러개의 쓰레드가 StringBuilder 메서드를 동시에 접근할 수 있다) 2) Java 1.0에서 등장 Java 1.5에서 등장 3) 동기화 때..
Java 8에 등장한 Optional이란? 개요 Java 8에 Optional이 새로 등장했습니다. 어떤 문법인지 어떤 경우에 사용하는지 정리합니다. 코드 가독성을 높이고 널 포인트 예외를 방어해보자 널(Null)은 값이 없음을 가리키며 널 참조는 많은 문제의 원인이 됩니다. 따라서 Java 8에서는 이런 문제점을 일부 해결하기 위해서 java.util.Optional을 만들었습니다. 다음과 같은 코드가 있다고 가정해보겠습니다. String version = computer.getSoundcard().getUSB().getVersion(); 코드에는 문제가 없지만 많은 컴퓨터는 사운드 카드를 가지고 있지 않습니다. 그렇다면 getSoundcard()는 어떻게 될까요? 대게의 경우 null을 리턴해서 사운드 카드가 없다는 것을 가리켰습니다. 불행히..
자바 8에 추가된 Date Time API 개요 자바 8의 변화 중 Date와 Time이 새롭게 추가되었습니다. 기존에 어떤 방식을 사용하였고, 어떻게 개선되었는지 확인해보겠습니다. 기존의 Date API와 새로운 API 기존의 Date API는 java.util에 속해 있습니다. java.util.Date - 날짜와 시간, 기본 시간대를 사용하여 출력 java.util.Calendar - 날짜와 시간, 날짜를 조작하는데 더 많은 메소드 제공 java.text.SimpleDateFormat - 날짜와 달력을위한 형식 (날짜 -> 텍스트), 변환 (텍스트 -> 날짜) 자바 8에서는 JSR310(Joda-time을 참고)이 새로 만들어졌으며 java.time 패키지에 담겨 있습니다. java.time.LocalDate - 날짜(시간 포함하지 않음),..
TIL_20221027 1. Facts(사실, 객관) - 영업지원 페이지 어드민 만들기 - e지로 개발 - 자바 기반의 마이크로 서비스 이해와 아키텍쳐 구축하기 끝 2. Feelings(느낌, 주관) 영업지원 페이지 어드민을 개발하고 있습니다. 엔지니어는 자신의 핸드폰에서 정기전단물, 홍보자료를 고객에게 전송하는 화면을 만들려고 합니다. 그 때, 엔지니어에게 보일 문구나, 파일명이나 계층 구도 등을 현업이 직접 추가 및 수정, 삭제 할 수 있도록 어드민 페이지를 만들었습니다. 테이블을 새로 설계하고 각 화면에 어드민 페이지를 만들어서 유동적으로 사용할 수 있도록 만들었습니다. 일단 화면을 먼저 만드는 것을 목표로 하였고, 내일부터는 세부 기능을 추가 할 계획입니다. e지로 전송 SQL을 짰습니다. 또한, 전달받은 화면 개선 건..

728x90
반응형