전체 글 (31) 썸네일형 리스트형 테스트 코드 개선하기 개요Flab 티케팅 프로젝트를 진행하며 받았던 테스트 코드에 대한 피드백과 개선사항을 정리하고자 합니다.티케팅 프로젝트에서 테스트시 사용하는 프레임워크와 라이브러리는 아래와 같습니다.KotlinKotest(+ kotest-extensions-spring)mockk개선 전 UnitTest저는 모든 TestCode를 BDD형식으로 작성하고 개발하고 있었습니다. 아래는 이에 대한 예시코드로, UserService의 회원가입 로직을 검증하는 테스트입니다.given("이메일 인증 코드 검증이 완료된 사용자의 경우") { val email = "email@email.com" every { emailVerifier.checkVerified(email) } returns Unit.. Java의 시간 클래스들 개요JAVA의 발전에 따라 사용하는 JAVA의 시간 클래스를 다루어보고 각 클래스들의 차이점과 주의 사항에 대해 알아보고자 합니다.JAVA의 발전에 따른 JAVA 라이브러리의 변경초기 Java에서는 Date와 Calander를 사용하여 시간을 표현하였습니다. 그러나 이 라이브러리들은 TimeZone을 표현하기 불편하다거나, 클래스의 인터페이스가 불편한 문제점이 있었습니다. 그리고 가장 큰 문제는 가변 객체이기 때문에 다양한 환경에서 하나의 객체를 나타낼 때 안전성을 보장하지 못했습니다.그래서 이를 개선해서 나온게 joda의 Joda-Time 라이브러리로, 위 초기 Java 라이브러리에서 발생한 문제를 모두 해결한 라이브러리였습니다.Java 1.8 버젼에서 Joda-Time 라이브러리와 유사한 java.t.. War와 Jar 개요Spring 또는 Java로 웹 어플리케이션을 만들게 되면 .war 파일과 .jar 이 생성됩니다. 이번에는 이 파일들에 대해 알아보고자 합니다.Jar 파일jar 파일은 java archive의 약자로, JVM위에서 실행되거나 라이브러리로 사용할 수 있도록 관련 된 자바 클래스 파일을 압축한 파일입니다.실행하는 경우 main() 메서드가 필요하며, MANIFEST.MF에 메인 메서드의 클래스를 지정해 주어야 합니다.jar 파일을 압축 해제 했을때 포함하는 파일은 다음과 같습니다.META-INFMANIFEST.MF : jar 파일을 시작할 때 실행되는 main 메서드와 기타 메타 정보를 포함한 파일classes : 사용자가 작성한 Java 코드(ByteCode의 형태)jar 파일은 기본적으로 Jar파일.. Spring과 Spring Boot의 차이점 스프링이란?💡 Spring은 자바 프로그래밍을 모든 사람들에게 더 빠르고, 더 쉽고, 더 안전하게 만들어줍니다. Spring은 속도, 단순성, 그리고 생산성에 집중한 자바를 세계에서 가장 인기 있는 프레임워크로 만들었습니다.스프링은 여러 프로젝트를 포함한 프레임워크로, 객체지향 어플리케이션을 개발할 수 있도록 도와주는 프레임 워크입니다.스프링은 DI와 DI Container, AOP, Web MVC등을 지원해 객체지향적인 어플리케이션을 개발하도록 도와줍니다.DI란?DI는 Dependency Injection의 약자로, 특정 객체의 생명주기를 관리하고 의존성을 주입시켜주는 역할을 합니다.Spring에서는 이러한 DI를 소스코드가 아닌 외부 파일(.xml 등)을 통해 정의해주어야 했습니다.Spring의 문.. 낙관적 락과 비관적 락, 그리고 Redis를 활용한 Lock 비관적 락이란?개요비관적 락(Pessimistic Lock)은 DB 단계에서 관리하는 락으로, 이 방식을 사용하면 select 된 데이터를 잠가 다른 트랜젝션이 Update할 수 없도록 제한합니다.락에는 Write Lock과 Read Lock이 있으며, Write Lock을 걸었을 경우 다른 트랜젝션이 Read와 Write가 모두 불가하고, Read Lock의 경우 읽기는 가능하나 쓰기가 불가능합니다. Write Lock의 경우 SELECT 쿼리 뒤에 FOR UPDATE 가, Read Lock의 경우 FOR SHARE 가 붙게됩니다.JPA에서는 @Lock(LockModeType.PESSIMISTIC_WRITE) 와 @Lock(LockModeType.PESSIMISTIC_READ) 로 구현이 가능합니다.비.. MYSQL 정렬 방식(indexsort와 filesort) 개요CURSOR 방식의 조회를 공부하던 중, 정렬 방식에 대한 공부가 필요한 것 같아 정리하고자 합니다.실행 계획 분석먼저 아래의 쿼리를 보겠습니다.select p1_0.product_uid, p1_0.name, p1_0.price, p1_0.thumbnail_image_url from products p1_0where product_uid > 'KRvlj5cFxz08PiR'order by p1_0.created_at desc limit 10; 위 쿼리는 간단한 쇼핑몰의 상품조회 SELECT문으로, 커서 페이지네이션 방식으로 작성되어 있습니다. 정렬 방식은 상품이 등록된 최신순으로 조회를 합니다.해당 쿼리에 대한 실행계획을 조회하면 다음과 같은 결과가 나왔습니다.idselect_typetablepar.. Cursor vs Offset Pagination의 성능 비교 및 최적화 개요SELECT 문으로 다수의 레코드를 가져올 때, 한 화면에 많은 양의 레코드를 한번에 보여줄 수 없을 때가 있습니다. 이 때 데이터 전체가 아닌 일부만 가져오게 되는데, 크게 페이지네이션과 무한스크롤 방식이 있습니다.💡 페이지네이션(Pagination) - Offset Pagination페이지네이션은 디지털 콘텐츠를 웹사이트의 또 다른 페이지들로 분리하는 방법입니다. 사용자는 페이지 하단에 있는 숫자 형식의 링크를 클릭하여 페이지들을 탐색할 수 있습니다. 페이지네이션된 콘텐츠 일반적으로 몇 가지 공통된 주제 혹은 목적들을 지니고 있습니다.무한 스크롤(Infinite scroll) - Cursor Pagination무한 스크롤은 사용자가 페이지 하단에 도달했을 때, 콘텐츠가 계속 로드되는 사용자 경험.. 이전 1 2 3 4 다음