mysql에서 상용되는 문법으로 테이블들의 row_count를 구해 마이그레이션 작업 도중에 필요한 내용을 가져와봤습니다. 1. 테이블 1개 기본적으로 테이블 1개의 count를 구하는 것은 기본 쿼리로 가능합니다. SELECT count(1) FROM table_name; 2. 1개 스키마 내 테이블 전체 테이블 전체의 행 카운트를 구하는 방법입니다. information_schema 는 스키마의 메타 테이블로 각 테이블 및 트랜잭션과 락과 관련된 설정값들을 가지고 있는 스키마입니다. SELECT table_name, table_rows FROM information_schema. tables WHERE table_schema = 'schema_name' ORDER BY table_name; 그치만 해..
오늘은 코틀린+스프링 프레임워크(줄여서 코프링)이라고 하는 기법에 대한 글 중 카카오페이에서 도움이 될만한 글이 있어서 가져왔습니다. https://tech.kakaopay.com/post/overcome-spring-aop-with-kotlin/ Kotlin으로 Spring AOP 극복하기! | 카카오페이 기술 블로그 Kotlin의 문법적 기능을 사용해서 Spring AOP 아쉬운 점을 극복한 경험을 공유합니다. tech.kakaopay.com 원래 스프링 프레임워크는 코틀린 언어의 할아버지뻘 되는 언어인 자바에서 기본적으로 파생된 언어입니다. 코틀린은 제트브레인(JetBrain)이라고 하는 체코 회사에서 개발한 언어입니다.(안드로이드 스튜디오와 인텔리제이 IDE 툴 등을 개발한 Java 개발자들 사이..
대부분의 개발자들은 객체지향형 프로그래밍(OOP)라고 하는 것에 굉장히 익숙할 것입니다. 저 또한 대학교에서도 교육을 받으면서도 객체를 중심적으로 프로그래밍을 진행하고, 자바언어는 특히나 그런 것에 최적화되어 있다는 것을 기본 개념으로 삼고 프로그래밍을 진행해왔습습니다. 최근에 아티클을 읽던 와중 신기하고 기묘한 내용이 있어 소개드리고자 합니다. 위시켓에서 작문한 글로 새로운 개념인 데이터 지향 설계(DOP)를 추천하는 글이어서 괜찮은 것 같아 가져와봤습니다. https://yozm.wishket.com/magazine/detail/2157 개발자가 알아야 할 데이터 지향 설계란? | 요즘IT 객체지향 프로그래밍은 클래스(Class)를 통해 데이터와 행위를 묶어 관리하는 프로그래밍 패러다임입니다. 그렇지..
이전에 카카오 개발자분이 올려주신 자바 소스 코드의 리팩토링 방법에서 참고하여 현재 사용 중인 코드 작성 방법을 올려볼까 합니다. 해당 글에는 if-else 뿐만 아닌 다른 리팩토링 방법에 대해서도 작성하였습니다. https://abbo.tistory.com/395 [Refactor] 자바 코드 리팩터링하기 - 3부 이전 글에 이어서 자바 코드를 리팩터링하는 기본적인 방법과 그 내용을 코드를 통하여 조금 더 이해하기 쉽도록 적어보려고 합니다. 리팩터링 1부 - https://abbo.tistory.com/393 [Refactor] 자바 코드 리 abbo.tistory.com 자바 코드 리팩토링을 진행하다보면 if else 구문으로 이루어진 서비스 로직을 자주 발견하게 되는데, else 만을 보았을 때는 ..
JPA에서 @Transactional 어노테이션을 사용하다 보면 Propagation, Isolation과 관련된 이슈와 접할 때가 종종 있습니다. 오늘은 이런 내용들을 어떻게 사용하는지와 어떤 상황에서 사용하는지를 정리해보고자 합니다. JPA Propagation 정리 세션의 트랜잭션을 어떻게 이용할지에 대한 설정입니다. 종류로는 아래와 같은 내용이 있습니다. 종류 트랜잭션 존재시 트랜잭션 미존재시 비고 REQUIRED 기존 트랜잭션 이용 신규 트랜잭션 생성 기본설정이다 SUPPORTS 기존 트랜잭션 이용 트랜잭션 없이 수행 MANDATORY 기존 트랜잭션 이용 Exception 발생 꼭 이전트랜잭션이 있어야 하는경우 NEVER exception이 발생한다 정상적으로 트랜잭션 없이 수행 트랜잭션 없을때..
회사에서는 도메인 주도 설계인 DDD(Domain Driven Design) 패턴을 사용하여 개발을 진행하고 있습니다. 이유는 도메인 패키지의 경우 메인 패키지이면서 다른 모듈 패키지에서도 사용하기 때문이기도 하고, RDBMS를 사용하는 회사의 시스템 상 다른 같은 Database Schema 를 사용하기 때문입니다. 그래서 DDD 사용하기 위해서는 주의해야 하는 부분이 있습니다. 1. 도메인 패키지 내에 엔티티 클래스와 리포지토리를 선언한다. Cash 라고 하는 엔티티가 있다고 가정해봅니다. Cash 폴더 내에 Cash와 관련된 엔티티 패키지는 도메인 패키지 내에 있다고 하지만 DTO, 서비스, 리포지토리는 어디에 위치하여 있는것이 효율적일까요? @Entity @Getter @NoArgsConstruc..
요새 고민인 부분이 있습니다. 한 번 정적 팩토리 메서드에 사용법에 대해 알고 나서부터는 만들고자 하는 대부분의 객체의 의존성을 배제하고 직접적인 Setter를 금지하여 객체를 만들고자 하는 욕심이 생겼습니다. 그래서 오늘은 지금까지 공부한 방법에 대해 연구하고 객체를 만드는 과정을 알아보고자 합니다. 0. `Builder` 패턴을 잘 사용하기, 그리고 생성자는 private로 하여 불변 및 상속 불능으로 만들기 정적 팩토리 메소드를 사용하는 이유 중에 하나는 인스턴스의 프로퍼티 변조를 막고 파라미터를 통해 클래스 인스턴스를 만들기 위함입니다. 그래서 생성자는 private로 접근 제어자를 설정하여 클래스 내부에서만 조립이 가능하도록 막습니다. 또, private 으로 선언이 된 이상 상속이 불가능합니다..
지금 회사에서 Mysql을 사용하고 있는 와중에 로컬 맥북에서 덤프를 하고, 덤프한 데이터를 기준으로 테스트를 해봐야 하는 시점이 오게되었습니다. 그래서 Docker를 설치하고 내부 컨테이너로 Mysql을 설치하는 방법을 간단히 알아보겠습니다. 기존에 제가 작성한 글로는 아래 링크의 글이 있지만 구버전인것 같아 새롭게 다시 설치하는 방법부터 알아보려 합니다. https://abbo.tistory.com/291 1. Docker Desktop 설치 가장 먼저 진행할 것은 Docker가 맥북에 설치되어야 있어야겠죠. 맥북에 Docker를 설치하기 위해서는 아래 링크로 들어가서 다운로드를 받은 후 압축을 해제하시면 설치가 가능합니다. 이미 설치가 되어있으신 분은 2번으로 넘어가주세요. https://www.d..