본문 바로가기

전체 글194

[gradle] gradle의 퍼포먼스를 늘릴 수 있는 유용한 정보 및 옵션들 요즘은 spring의 빌드 도구로 java, kotlin을 가리지 않고 gradle을 많이 사용합니다. 오늘은 이와 관련된 주제로 gradle의 퍼포먼스를 늘릴 수 있는 유용한 정보 및 옵션드에 대해서 알아보는 시간을 가져보도록 하겠습니다. 의존성을 주입할 때 dynamic version 보다는 static version을 사용하자 일반적으로 의존성을 주입할 때 dnynamic version 보다는 static version을 사용하는 것을 권장합니다. 이유는 버전을 dynamic version으로 하게되면 이후 특정 모듈의 버전이 올라감에 있어서 호환성 이슈가 발생할 수 있기 때문입니다. 이와는 별개로 static version을 사용하는것이 좋은 이유가 있습니다. 바로 성능적인 문제입니다. grad.. 2021. 10. 13.
[kotlin] 코틀린 차곡차곡 - 13. data class 안녕하세요. 오늘은 코틀린의 13번째 시간입니다. 오늘 여러분들과 공유할 내용은 코틀린의 data 클래스입니다. kotlin data class에서 만들어지는 것들 Java로 코딩을 하다보면 DTO나 VO를 만들 때 get/set 메서드, toString 과 같은 코드를 만드는 일이 반복적으로 일어나게 됩니다. 이러한 반복적인 코드를 보일러플레이트 코드라고 하는데요. 자바에서 이러한 코드르 없애려고 노력하듯이 코틀린 또한 노력하고 있습니다. 자바에서는 lombok 이나 16버전 이상부터 사용학능한 record를 사용하면 됩니다만 코틀린에서는 data class 라는 타입으로 이를 해결할 수 있습니다. 예제로 한번 알아보도록 하겠습니다. 아래는 일반적인 java 코드입니다. get/set/toString/.. 2021. 10. 5.
[git] merge, squash & merge 그리고 rebase에 대해서 알아보자 - 이론편 안녕하세요. 오늘은 merge와 squash & merge 그리고 rebase의 차이점에 대해서 알아보는 시간을 가지도록 하겠습니다. 오늘은 이론적인 부분에 대해서만 말씀드릴 것이며 명령어를 실습하는 것은 다음시간에 이어서 진행하도록 하겠습니다. branch 병합 개발은 혼자 진행할 수도 있지만 대개는 여러명이 팀을 이루어 함께 개발을 합니다. 이럴 경우 github, gitlab과 같은 원격 저장소를 이용하여 코드의 형상관리를 하게됩니다. 이때 branch라는 개념을 이용하여 각자가 맡은 기능에 대한 개발을 진행하고 개발이 완료되면 master와 같은 base 브런치에 병합(merge)한 후 하나가 된 base의 코드를 서버에 배포하는 과정을 거치게됩니다. 위 이미지는 1개의 base 브런치에서 2개의.. 2021. 10. 2.
[JPA] JPA의 IDENTIFY 테이블에서 다건 insert 시간 비교 - save vs saveAll 안녕하세요. 오늘은 JPA에서 auto_increment 테이블에 bulk insert를 지원하지 않는 이유에 대해서 알아보도록 하겠습니다. 그리고 JPA를 이용해서 다량의 데이터를 넣어보고 각 insert가 완료되기 까지의 시간을 확인해보는 포스팅을 진행하도록 하겠습니다. 또한 왜 이런 상대적인 결과가 나왔는지도 알아보도록 하겠습니다. JPA와 bulk insert, 그리고 IDENTIFY 일반적으로 RDBMS에서는 bulk insert라고 하여 한번의 쿼리로 여러건의 데이터를 insert 할 수 있는 기능을 제공해주고 있습니다. 이런 bulk insert 쿼리를 이용하면 한번의 쿼리로 여러건의 데이터를 한번에 insert 할 수 있기 때문에 데이터베이스와 어플리케이션 사이의 통신에 들어가는 비용을 줄.. 2021. 9. 24.
[회고] 팀 프로젝트에서 개인 프로젝트로 그리고 안드로이드 앱 개발까지 안녕하세요. 4명이서 팀으로 진행했던 Pika라는 팀 프로젝트가 끝난지 2달정도 지났습니다. 이후 저는 잠깐의 휴식시간을 가졌고 1달 전부터 개인 프로젝트로 앱을 만들기 시작하였습니다. 그리고 1주일 정도 전에 출시까지 해보았습니다. 오늘은 그 경험에 대해서 여러분들에게 이야기해보고자 합니다. 기술적인 이야기를 드리기에는 아직 많이 모자란 점이 많기 때문에 그런 부분은 빼고 경험과 느낀점을 중점으로 이야기하고자합니다. 백엔드 엔지니어인 내가 앱을 개발하기까지 회사에 소속되어 개발을 하다보면 개인은 주체적으로 결정을 하는데 큰 영향을 주지 못하는게 사실입니다. 저 역시 마찬가지로 다양한 의견들과 기술적으로 개발해보고 싶은 부분이 있지만 회사의 사정에 맞춰 포기해야했던 여러 부분들이 있었습니다. 그런점을 해.. 2021. 9. 21.
[flyway] flyway를 통해 DDL 형상관리를 하자 - Spring Boot (Java API) 편 안녕하세요. 오늘은 flyway를 이용하여 로컬 환경에서 DDL의 형상관리를 하는 방법을 알아보도록 하겠습니다. flyway flyway는 데이터베이스의 형상관리를 목적으로 하는 툴입니다. 데이터베이스의 형상 관리란 어떤 것일까요? git을 통하여 우리가 코드를 관리하는 것의 데이터베이스 버전으로 볼 수 있습니다. git에서는 코드를 파일별로 로깅을 통해서 변화의 이력을 추적합니다. flyway는 데이터베이스의 DDL의 이력을 쌓아서 DDL이 어떻게 변화되었는지 관리하는 툴로 사용할 수 있습니다. 위 이미지는 flyway 공식 홈페이지에 나와있는 이미지로 DDL 형상관리의 이해를 위해서 가져왔습니다. 위 이미지를 보시면 Axel과 Christian이 별개로 DDL을 만들고 있습니다. 그리고 서버로 배포할.. 2021. 9. 17.
[UML] 상태 머신 다이어그램 이해하기 안녕하세요. 오늘은 오랜만에 UML의 시간을 가져보고자합니다. 오늘 알아보고자 하는 UML은 상태 머신 다이어그램입니다. State Machine Diagram (객체 상태 다이어그램) 상태 머신 다이어그램 모델이란 객체의 행동 다이어그램 중 하나입니다. 객체는 특정 상태를 지니며 이 상태는 이벤트와 같은 액션에 의하여 상태는 변경될 수 있습니다. 이러한 객체의 상태와 상태의 변화를 도식화 한 다이어그램이 바로 객체 상태 다이어그램입니다. 외부에 비동기적으로 데이터를 전송하고 이벤트를 수신함에 있어서 응답 확인 처리를하는 시나리오가 있을 수 있습니다. 이럴경우 이를 상태 머신 다이어그램으로 나타낼 수 있습니다. 아래의 이미지를 보시면 명확하게 알 수 있습니다. 아래의 이미지는 전송 완료 상태에서 응답 확.. 2021. 9. 9.
[mockk] 코틀린 테스트 프레임워크에 대해서 알아보자 안녕하세요. 오늘은 코틀린 테스트 프레임워크인 mockk의 사용법에 대해서 알아보는 시간을 가져보도록 하겠습니다. mockk framework mockk는 코틀린 스타일로 테스트 코드를 작성할 수 있도록 도와주는 라이브러리입니다. 기존의 java에서 사용하시던 mockkito를 대체한다고 보시면 됩니다. mockk를 사용하기 위해서는 아래처럼 mockk에 대한 의존성을 주입해주실 필요가 있습니다. 포스팅을 쓰는 시점의 가장 최신 버전은 1.12.0 이므로 저는 이 버전을 사용하도록 하겠습니다. testImplementation("io.mockk:mockk:1.12.0") 테스트 서비스 예제 코드 mockk로 테스트를 만드는데 사용할 코드는 아래와 같습니다. 메인으로 테스트할 코드는 마지막에 있는 Mapp.. 2021. 9. 6.
[kotlin] 코틀린 차곡차곡 - 12. 리플렉션(reflection) 안녕하세요. 오늘은 코틀린에서의 리플렉션(reflection)에 대해서 알아보도록 하겠습니다. 리플렉션(reflection) 이란 리플렉션이란 런타임에 프로그램의 클래스를 조사하기 위해서 사용되는 기술입니다. 즉, 프로그램이 실행중일 때 인스턴스 등을 통해 객체의 내부 구조 등을 파악할 수 있습니다. Spring에서는 이 기술을 적극적으로 활용하고 있습니다. 대표적으로 어노테이션의 활용을 들 수 있습니다. 멤버 변수에 어노테이션을 붙인다면 어떻게 활용할 수 있을까요? 바로 이 리플렉션을 이용하는 것입니다. 리플렉션을 이용해서 멤버변수에 해당 어노테이션이 붙어있다면이라는 조건문을 통해 처리할 수 있는 것입니다. 우리가 자주사용하는 jackson library의 field를 추가하는 메서드 코드를 보도록 하.. 2021. 8. 29.
[kotlin] 코틀린 차곡차곡 - 11. Annotation ( 어노테이션 ) 안녕하세요. 오늘은 코틀린에서 Annotation을 사용하는 방법에 대해서 알아보도록 하겠습니다. 어노테이션( Annotation ) 어노테이션은 자바 또는 코틀린에서 사용됩니다. 어노테이션은 메타데이터 ( 부가기능 )을 코드에 비침투적으로 추가할 수 있는 수단으로 kotlin docs에서는 정의하고 있습니다. 어노테이션은 멤버 변수, 함수, 클래스 등 다양한 곳에 위치 시킬 수 있으며 또한 다양한 기능을 가진 다양한 어노테이션이 있습니다. 그리고 우리는 기 정의된 어노테이션 뿐만 아니라 스스로 정의한 커스텀 어노테이션을 만들어 사용할 수도 있습니다. 기본적인 선언 및 사용방법 코틀린에서 어노테이션은 아래와 같이 선언하면 사용할 수 있습니다. 아래 코드는 Karol이라는 어노테이션을 제작한 것이며 @Ka.. 2021. 8. 28.
[Spring] Spring의 Event를 어떻게 사용하는지에 대해서 알아봅시다. - @TransactionalEventListener에 대해서 안녕하세요. 오늘은 Spring의 Event의 2번째 시간으로 @TransactionalEventListener에 대해서 알아보는 시간을 가져보도록 하겠습니다. 이전 포스팅에서는 Spring에서 Event란 무엇이며 기본적인 구현에 대해서 알아보았습니다. 이쪽은 [Spring] Spring의 Event를 어떻게 사용하는지에 대해서 알아봅시다 포스팅을 참고해주시기 바랍니다. @TransactionalEventListener Event를 사용할 때 기본적으로 사용하는 @EventListener는 event를 publishing 하는 코드 시점에 바로 publishing합니다. 그런데 우리는 event를 퍼블리싱 할때는 대부분 메인 작업이 아닌 서브의 작업이 많고 비동기로 진행해도 되는 경우도 많습니다. 다른.. 2021. 8. 23.
[Spring + JPA] jpa에서 Repository를 이용한 비관적락을 구현해봅시다. With MariaDB 안녕하세요. 오늘은 이전 시간에 이어서 비관적락을 JPA를 통해 이론적인 부분과 이를이용하여 구현하는 방법, 그리고 도출되는 쿼리를 알아보도록 하는 시간을 가져보도록 하겠습니다. 비관적 락 비관적락은 내가 접근하고 하는 Database 리소스에 다른사람이 접근조차 하지못하도록 락을 걸고 작업을 진행하는 것을 말합니다. 물론 여기서 접근이라는 것은 READ 작업과 WRITE 작업이 분할되어 있습니다. 경우에 맞춰 둘다 불가능할지 아니면 하나만 가능할지를 정하는것이 가능합니다. 비관적락을 사용할 때 2가지 옵션을 선택할 수 있습니다. 배타락(exclusive lock)과 공유락(shared lock)입니다. 공유락을 걸면 다른 트랜잭션에서는 읽기는 가능하지만 쓰기는 불가능힙니다. 베타락에서는 다른 트랜잭션에.. 2021. 8. 16.