-
테스트코드에서의 @Transactional
테스트코드에서 @Transactional을 쓰는 것이 마치 금기인 것 같은 분위기이다. 남들이 쓰지 말래서, 아무도 안 쓰니까, 코드 리뷰받을까 봐 등등의 이유 말고 제대로 된 이유를 알아보자! [ 목차 ] 왜 테스트 코드에서 @Transactional을 사용하고 싶은 걸까? 언제, 어떤 문제가 발생할까? 그럼 어떻게 해야 할까? 그렇다면 테스트코드에서의 @Transactional은 무조건 나쁜 걸까? 1. 왜 테스트 코드에서 @Transactional을 사용하고 싶은 걸까? 대표적인 이유는 자동 롤백을 통한 손쉬운 테스트 격리이다. JUnit의 @Test 내에서 @Transactional을 선언하면 예외가 발생하지 않아도 데이터가 롤백된다. 따라서 테스트 수행 이후 데이터가 모두 삭제되기 때문에 테스트..
2024.04.07
-
[ Mermaid ] 명령어로 Diagram 그리기
ERD를 그리기 위해 이런저런 방법들을 찾아보다가 Mermaid를 알게되고 박수를 쳤다.Mermaid를 활용하면 간단한 명령어만으로도 각종 Diagram을 뚝딱 그릴 수 있다! Mermaid란? Markdown에서 텍스트와 코드를 통해 동적으로 Diagram을 생성할 수 있는 도구이다.FYI. JavaScript 기반으로 만들어졌다고 한다. 활용 예시 Notion코드 블럭을 통해 작성할 수 있다. GithubPull Request, Issue 등등.. 이 외에도 Markdown 문법이 사용가능한 곳들에서는 모두 활용 가능하다. (초간단) 문법 정리 ERD 활용 예시 명령어 예시erDiagram 테이블명 {테이블간의 관계} 테이블명 : “설명" 테이블간의 관계 표현을 위한 명령어왼쪽오른쪽의미|oo|0개이거..
2024.01.14
-
Kotlin 문법 벼락치기⚡️
생애 첫 회사생활을 보내며 허우적거리던 지난 자프링 개발자 세월..어느날 갑자기 코프링을 하게됐다!살아생전 코틀린의 ㅋ도 써본 적이 없는데!! 기본개념이고 뭐고 당장 만들 수 있을 만큼만 알아보자! 변수 선언하기파라미터 이름 뒤에 타입을 쓴다.var (variable) : 수정 가능한 타입val (value) : 읽기 전용 타입 ( 수정 불가능 )? : null 허용var name: String? // String 자료형의 수정 가능하고, null을 허용하는 변수 val name: Int // Int 자료형의 읽기 전용, null을 허용하지 않는 변수 함수 선언하기( 자바와 달리 ) 꼭 클래스 안에 함수를 넣어야 할 필요가 없다.중괄호를 없애고 더 간결하게 표현할 수도 있다.이때 반환 타입은 생략이 가능..
2024.01.07
-
DTO 변환하기 귀찮은 사람들 다모여라~ @MapStruct로 객체 변환하기!
계층간에 쓸 객체는 분리해야겠고.... 매핑 메서드 만드는건 너무 귀찮고... 필드 하나 바뀔때마다 계속 수정해줘야 하는건 더 귀찮다.... 그냥 대충 객체 하나로 싹다 하면 안되나? 라고 생각하는 사람들 다모여라! MapStruct가 해결해줄터이니~ 초간단 MapStruct 사용방법 가보자구👊 MapStruct란? Java 객체간의 데이터를 매핑해주는 코드 생성기이다. MapStruct의 특징 컴파일 시점에 코드를 생성한다. 속도가 빠르다. Lombok의 getter, setter, builder등을 이용하여 생성되므로, Lombok에 의존성이 추가되어야 한다. 초간단 사용법 매핑을 위한 interface를 생성한다. (Spring에서 사용할거라면) 빈으로 만들어 사용할 수 있도록 @Mapper어노테이..
2023.04.23
-
Apache Kafka 찍먹을 위한 초간단 정리
카프카란? 한마디로 말하자면 메시징 시스템이다. MSA 환경의 서로 다른 서비스에서 메시지를 발행하고, 구독하여 처리하는 형태로 이용하는 것이 대표적이다. 초간단 용어 정리 프로듀서 메시지를 발행한다. 컨슈머 메시지를 받아 처리한다. 토픽 / 파티션 파티션은 간단히 말하자면 메시지를 담은 메시지 큐이다 토픽은 여러 개의 파티션을 담는 단위이다. 토픽 / 파티션 하나의 파티션에는 물리적인 file 매핑된다. 해당 file에 데이터가 쌓이는 형식이고, 삭제 없이 추가만 되는 형식이기 때문에 디스크임에도 불구하고 매우 빠르다. 파티션은 삭제 없이 추가만 가능하다. Producer 메시지를 생성하여 카프카로 전송한다. 특정 파티션에 발행되도록 key를 통해 지정하여 전송할 수 있다. 만약 지정하지 않는다면 ro..
2023.03.08
-
[QueryDSL] BooleanExpression을 이용하여 동적쿼리 간결하게 작성하기
QueryDSL을 이용하여 동적으로 쿼리를 작성해야 할 때가 있다. 이럴 때 발생할 수 있는 문제상황과 BooleanExpression을 이용한 리팩토링 방법을 알아보자. 문제상황 예시 게시판 글의 필터링 기능을 만든다고 상상해보자. 필터링할 수 있는 조건은 게시일, 작성자, 검색어, 카테고리 등등 매우 많다. 클라이언트는 필터링 정보를 쿼리파라미터에 담아 요청을 보낸다. 사용자가 딱히 필터링 정보를 선택하지 않았다면 쿼리파라미터 값은 null이다. 우리는 요청을 받아 쿼리파라미터에 데이터가 있는지 확인하고, 있다면 필터링하여 데이터를 반환한다. 단순히 해당 코드를 작성한다면 BooleanBuilder나 List를 이용할 수 있을 것이다. public List find(Criteria criteria) ..
2023.02.12
-
기술 블로그 시-작!🎉
학부생, 취준 기간 동안 내내 미뤄왔던 기술 블로그를 드디어 시작해보려한다! 회사업무 말고 개인공부도 하고싶은데 기술블로그가 좋은 수단이 되었으면 좋겠다. 햇병아리 신입이라 회사 적응만으로도 벅차지만.. 아무튼!
2023.01.24