분류 전체보기 174

인수 테스트 격리하는 방법

테스트 코드를 짜서 하나씩 실행했을 때 문제가 없었는데 한 번에 동작시키니 오류가 발생했습니다.😥순서도 보장되지 않고 독립적으로 수행되고 있지 않았던 것 같군요...테스트는 서로 순서에 상관없이 모두 독립적으로 동작할 수 있도록 짜여있어야 합니다.이 부분을 잊고 테스트 코드를 작성한 것이 문제였던 것 같아 인수 테스트 격리하는 방법들을 적용해 보며 정리해 보겠습니다.🙂 @DirtiesContext@DirtiesContext 어노테이션은 Spring Framework에서 테스트 격리를 위해 사용됩니다.이 어노테이션을 사용하면 테스트가 실행된 후 테스트 컨텍스트를 "더럽게"만들어 다음 테스트에서 새로운 컨텍스트를 사용하도록 할 수 있습니다. 아래의 classMode는 아래와 같은 종류가 있습니다. 적용하..

Backend/TestCode 2024.07.06

[Java] of와 from 메서드의 차이

코드 작업을 하던 중 명확하게 의미를 파악하고 사용하고 있지 않았던 부분에 궁금증이 들었습니다!Java에서 메서드 명명 규칙으로 of와 from 메서드의 확실한 용도가 무엇일까요? 🧐  of용도: 주로 입력 파라미터의 유효성을 검증하여 새로운 객체를 생성하는 정적 팩토리 메서드입니다.특징: 입력된 값을 기반으로 새로운 객체를 생성하며, 주로 변환 작업 없이 객체를 만듭니다.public class Money { private final int amount; private final String currency; private Money(int amount, String currency) { this.amount = amount; this.currency = cur..

Backend/Java 2024.07.04

[MongoDB] Spring Boot에서 임베디드 MongoDB를 사용하는 방법

MongoDB를 사용하며 Test 할 때 어떻게 작업할지 고민하다가 Embedded MongoDB가 있다는 사실을 알고 적용해 보았습니다. 임베디드 MongoDB란?임베디드 MongoDB는 테스트 환경에서 MongoDB를 별도로 설치하지 않고도 MongoDB 서버를 실행할 수 있는 라이브러리입니다.이를 통해 단위 테스트 및 통합 테스트를 보다 간편하게 작성할 수 있습니다. 의존성 추가하기Spring Boot 프로젝트에 임베디드 MongoDB를 추가하려면 build.gradle 파일에 다음 의존성을 추가합니다.dependencies { // Other dependencies... testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo..

Data/MongoDB 2024.06.30

[MongoDB] _class 필드 개념과 제거 방법

MongoDB 에서 데이터를 입력하는데 _class라는 값이 입력되었다. (이게 모지😮)_class에 대해 알아보고 제거하는 방법도 알아보겠습니다! '_class' 필드란 무엇인가?MongoDB는 NoSQL 데이터베이스로 JSON과 유사한 BSON 형식으로 데이터를 저장합니다.MongoDB는 스키마가 없으므로 데이터를 유연하게 저장할 수 있지만, 애플리케이션의 객체 지향 구조와 MongoDB의 문서 구조를 매핑하는 과정에서 추가적인 메타 데이터가 필요할 수 있습니다. 그중 하나가 '_class' 필드입니다. '_class' 필드의 역할객체 매핑'_class' 필드는 Spring Data MongoDB와 같은 ODM(Object-Document Mapping) 프레임워크에서 사용됩니다.이 필드는 Mong..

Data/MongoDB 2024.06.29

[Git] GitHub Repository에 연결하기

로컬 저장소에 만든 레포지토리를 깃허브에서 만든 원격 저장소에 연결하는 방법을 알아보겠습니다 🤗 GitHub Repository 생성자신의 프로필에서 Repositories에 접근하면 New를 클릭하여 Repository를 생성할 수 있습니다! 생성하고 나면 아래와 같은 주소를 확인할 수 있는데 이 주소를 로컬 저장소와 연결하기 위해 복사해 주세요 로컬 저장소에 원격 저장소 연결먼저 원격 저장소 정보가 있는지 확인합니다.git remote -v'not a git repository (or any of the parent directories): .git'저는 git을 사용하지 않던 Repository여서 위와 같은 에러 문구가 뜹니다.아래의 문구를 실행하면 오류가 해결됩니다.git init그리고 아까 ..

Infra/Git 2024.06.28

[MySQL] UPSERT(UPDATE + INSERT)

데이터베이스를 사용할 때, 중복 데이터를 방지하면서 효율적으로 데이터를 삽입하고 싶을 때가 분명 올 것입니다 🤨이를 해결하기위해 'UPSERT'라는 기능을 제공합니다. 이번 글에서는 평소에 사용하던 UPSERT의 개념과 MySQL에서 UPSERT를 어떻게 사용하는지에 대해 알아보겠습니다!  UPSERT 란?UPSERT는 "insert"와 "update"의 합성어입니다.데이터베이스 테이블에 데이터를 삽입할 때 해당 데이터가 이미 존재한다면 업데이트를 하는 작업을 의미합니다.이는 데이터베이스에 중복 데이터를 방지하면서 효율적으로 데이터를 갱신할 수 있는 방법입니다. MySQL에서의 UPSERT INSERT INTO table_name (column1, column2, ...) VALUES (value1,..

Data/MySQL 2024.06.28

계층형 아키텍처와 도메인형 아키텍처: 패키지 구조의 비교

소프트웨어 아키텍처는 코드의 유지보수성과 확장성을 결정짓는 중요한 요소입니다.특히 패키지 구조는 코드의 가독성과 관리에 큰 영향을 미친다고 생각합니다.이번 글에서는 계층형 아키텍처와 도메인형 아키텍처의 패키지 구조에 대해 살펴보고, 각 아키텍처의 장단점과 예시를 살펴보겠습니다. 계층형 아키텍처계층형 아키텍처는 애플케이션을 여러 층으로 나누어 관리합니다.프레젠테이션 계층사용자 인터페이스와 관련된 코드가 있는 곳입니다.서비스 계층비즈니스 로직을 처리하는 코드가 있는 곳입니다.리포지토리 계층데이터베이스에 접근하는 코드가 있는 곳입니다.도메인 계층핵심 비즈니스 객체와 로직이 있는 곳입니다. 패키지 구조 예시com.example.application├── controller (프레젠테이션 계층)├── servic..

개발끄적 2024.06.24

MongoDB란?

MongoDB 란?MongoDB는 NoSQL 데이터베이스 중 하나로 문서 지향(Document-Oriented) 데이터베이스입니다.데이터를 JSON과 유사한 BSON(Binary JSON) 형식으로 저장합니다.MongoDB는 유연한 스키마 설계와 수평적 확장이 용이한 특성 덕분에 대규모 데이터 처리와 복잡한 데이터 구조를 다루기 적합합니다.  MongoDB 주요 용어문서(Document)MongoDB에서 데이터는 BSON 형식의 문서로 저장됩니다.각 문서는 필드와 값의 쌍으로 이루어지며, 값은 다른 문서, 배열, 기본 데이터 타입 등을 포함할 수 있습니다.JSON과 유사하지만, BSON은 바이너리 형식으로 저장되어 더 빠른 접근과 더 많은 데이터 타입을 지원합니다.컬렉션(Collection)컬렉션은 여러..

Data/MongoDB 2024.06.16

[Java] Equals와 == 의 차이

Java를 사용하다 보면 데이터나 객체를 비교해야 할 때가 많습니다.이때 'equals'와 '=='를 어떻게 사용해야 하는지 헷갈리기 쉽습니다. 이 둘은 자주 사용되지만 용도가 다르기 때문에 제대로 이해하고 사용하는 것이 중요합니다. 'equals'와 '==' 에 대해 알아보겠습니다. '==' 연산자'==' 연산자는 주로 기본 타입(primitive types) 비교에 사용되며, 참조 타입(reference types) 비교에도 사용됩니다. 기본 타입 비교기본 타입의 값을 비교할 때 '=='를 사용하면 값이 동일한지 여부를 확인할 수 있습니다.int a = 5;int b = 5;System.out.println(a == b); // true, 참조 타입 비교참조 타입에서는 '=='를 사용하여 두 객체가 ..

Backend/Java 2024.05.25

[Redis] Redis, Spring session을 이용하여 login 구현하기

Spring에서 redis를 이용하여 간단하게 login을 구현해보겠습니다.  build.grable 에 추가implementation 'org.springframework.session:spring-session-data-redis'implementation 'org.springframework.boot:spring-boot-starter-data-redis'  application.yaml 설정spring: session: store-type: redis redis: repository-type: indexed flush-mode: on_save data: redis: host: 127.0.0.1 password: password123 ..

Data/Redis 2024.05.04