전체 글 105

멀티 모듈

멀티모듈이란, 하나의 프로젝트를 여러 개의 독립적인 모듈로 나누어 관리하는 프로젝트 구조 공통으로 사용하는 코드를 공통으로 관리, 각 모듈을 독립적으로 배포가능, 모듈 간 서로 의존성을 가지며 연결함 모듈 : 독립적으로 운영될 수 있는 의미를 가지는 구성요소 단위 필요성○ Web과 API에서 공통으로 사용되는 코드의 관리○ 단일 모듈의 한계 적용1. 프로젝트 분리의 기준 정하기2. 각 모듈의 의존성 관리 방법 결정3. 모듈별 독립적인 빌드와 배포환경 구성4. 모듈간의 인터페이스 명확하게 정의, 공통 기능 별도의 모듈로 분리5. 멀티 모듈 구조의 적용은 지속적인 리팩토링과 개선 과정을 통해 이루어짐 * 도메인 관점에서 진행할 경우 - 팀 단위 작업 분리, 유지보수 용이, 비즈니스 로직 집중, 확장성 - ..

카테고리 없음 2025.11.10

DDD : 도메인 주도 설계

Domain Driven Design : DDD소프트웨어 개발의 복잡성을 해결하기 위한 설계 방법론1. 비즈니스 Domain 별로 나누어 설계하는 방식2. 핵심 목표 : "Loosly coupling", "High cohesion" - 모듈 간의 의존성 최소화 및 응집성 최대화3. Strategic Design(개념 설계) / Tactical Design(구체적 설계) 특징- 도메인의 모델과 로직에 집중 (데이터 중심 → 도메인 중심 접근)- Ubiquitous Language : 보편적 언어 사용 : 여기서 말하는 언어는 개발자도 알고 도메인 전문가도 아는 언어 == 비즈니스 용어를 하나로 통합한 공통의 언어 ※ 고려사항 - Bounded Context (제한 영역) 범위 내에서 정의 ..

카테고리 없음 2025.11.05

테스트 하기 쉬운 코드 && 테스트 범위와 종류

테스트가 어려운 코드● 하드 코딩된 경로 : 해당 경로에 파일이 반드시 위치해야함● 의존 객체를 직접 생성● 정적 메서드 사용● 실행 시점에 따라 달라지는 결과 ○ LocalDate.now() 혹은 Random 사용하는 코드● 역할이 섞여 있는 코드● 메서드 중간에 소켓 통신 코드 포함 +) 소켓 통신이나 HTTP 통신의 경우 실제를 대체할 서버를 로컬에 띄워서 처리 가능 (서버 수준의 대역)● 콘솔에서 입력을 받거나 결과를 콘솔에 출력● 테스트 대상이 사용하는 의존 대상 클래스나 메서드가 final : 대역으로 대체하기 어려움● 테스트 대상의 소스를 소유하고 있지 않아 수정이 어려움테스트 가능한 설계테스트가 어려운 주된 이유 = 의존하는 코드를 교체할 수 있는 수단이 없음 ●..

Java 2025.10.14

테스트 코드

테스트 코드의 구성요소● 상황 == given 테스트 할 대상에 따라 상황을 설정하는 방법이 달라짐● 실행 == when● 결과 확인 == then이 구조로 작성해야하는 것은 맞지만 이 구조에 너무 매몰되서도 안됨. 테스트 내용의 이해를 위해서 존재하는 것 우연에 의해 테스트 결과가 달라질 수 없도록 해야한다ex) 파일이 없는 경우 테스트에서 현재 존재하지 않는 파일이름으로 리턴 → 명시적으로 파일이 없는 상황을 만들기 실제 존재하는 경우에도 삭제하는 로직 추가 → 항상 파일이 존재하지 않음 보장 외부 상태가 테스트 결과에 영향을 주지 않음 + 테스트 코드는 항상 정상적으로 동작하는 것이 중요함 외부 상태에 따라 테스트의 성공 여부가 바뀌지 않기 위한 방법1. 테스트 실행 전에 외부를..

카테고리 없음 2025.10.01

기능명세로서의 테스트코드 및 JUnit 기본

설계 과정을 지원하는 TDD 테스트를 만들려면?1. 테스트할 기능 실행 - 클래스, 메서드, 함수이름 - 파라미터2. 결과를 검증 - 리턴 값 이러한 과정에서 이름을 고민하고 파라미터 타입과 리턴 타입을 고민한다. 이것이 곧 설계 과정이다.이름은 설계에서 매우 중요하며, 이름이 기대하는 것과 다르게 동작할 경우 코드 분석 시간을 중가시키므로 잘 정하는 것이 중요하다 테스트 코드 작성 시,파라미터와 결과 값을 정해야함 → 요구사항 문서에서 기능의 입력과 결과 도출 필요구현 시 애매한 점의 경우 구체적으로 정리 필요 → 구체적인 예를 통해서 모호함이 줄어들고, 구체적인 명세가 된다 주의 사항 - 필요할 것으로 예측해서 미리 코드를 만들면 안됨 (설계도 마찬가지) ..

카테고리 없음 2025.09.25

TDD로 기능 추가해보기

원래 어느정도 기능이 구현되어 있던 간단한 게시판 프로젝트에 TDD를 이용해서 새로운 기능을 추가해보았다 * 기존의 회사 컴은 java 1.8 버전을 사용중이라 이 프로젝트의 실행을 위해서는 java-sdk를 version17로 변경해준다!File → Settings → Build Tools → Gradle → Gradle JVM 내가 추가해볼 기능은 바로 댓글 좋아요 기능이다! 이때, commentLike 도메인 정도는 먼저 작성하려고 했었는데 찾아보니, TDD의 경우 도메인 코드보다 테스트 코드가 먼저!즉, CommentLike 도메인 클래스를 먼저 만드는 것이 아니라, "이 클래스가 어떤 동작을 해야 하는지"를 테스트 코드로 먼저 정의하는 것이 출발점이라고 한다테스트 작성 (Red 단계)아직 Com..

Java 2025.09.24

mongodb/redis connect with springBoot

의존성 추가해주기 - build.gradle // redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' // Mongo DB implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'redis application.yml - local 연결용 data: redis: host: localhost port: 6379 mongodb 연결 시에 host/port 가 아니라 uri 로 한 줄만 쓰는 것이 표준이라고 한다!data: mongodb: uri: 또한, mongodb 서비스를 시작하는 명령어는 mac..

카테고리 없음 2025.09.23

테스트 코드 작성 순서

● 쉬운 경우에서 어려운 경우로 진행● 예외적인 경우에서 정상인 경우로 진행 방식1. 정해진 값을 리턴2. 값 비교를 이용해서 정해진 값을 리턴3. 다양한 테스트를 추가하면서 구현을 일반화 이후에는 코드 중복, 메서드 추출 등의 방법을 통해서 지속적인 리팩토링 작업 필요 java.time.LocalDate 클래스의 plusMonths() 함수: 특정 LocalDate 객체에 지정된 개월 수를 더한 새로운 LocalDate 객체를 반환하는 메서드이 함수는 원래의 날짜를 변경하지 않고 새로운 날짜 객체를 생성하며, LocalDateTime에서도 동일한 방식으로 사용가능* 이전 달과 이번 달의 말일이 같지 않아도 알아서 처리해줌 파라미터 개수는 적을 수록 코드 가독성과 유지보수에 유리함→ 파라미터의 개수..

카테고리 없음 2025.09.12

TDD 시작하기

나는 IntelliJ와 Maven을 이용해서 할 예정이다...!일단 먼저 JUnit 설정을 해야하는데, 프로젝트 하나를 새로 생성해주고, JUnit5 라이브러리를 추가해주면 된다.라이브러리 추가의 경우,[File] → [Project Structrue ...] 메뉴를 통해서 생성해주면 된다 org.juni.jupiter:junit-jupiter:5.5.0 을 입력하라고 하는데, 이렇게 하면 Found:0 으로 검색이 안된다....따라서, 아래와 같이 검색해주어야 한다. 그리고 클래스를 추가해서 테스트 코드를 실행하면, 잘 실행이 되는 것을 확인할 수 있다. 이제 메이븐 프로젝트에서 JUnit을 설정해보자.이를 위해서 pom.xml 파일에 JUnit5를 위한 의존성을 추가해주어야 한다. TDD : Test..

Java 2025.09.09

스프링 데이터 JPA

스프링 데이터 JPA = 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트CRUD를 처리하기 위한 공통 인터페이스 제공 org.springframework.data.jpa.repository.JpaRepository리포지토리 개발 시, 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해줌➡️ 데이터 접근 계층을 개발 시, 구현 클래스 없이 인터페이스만 작성해도 개발 완료 가능스프링 데이터 JPA를 사용하기 위해서는 'spring-data-jpa' 라이브러리가 필요함 스프링 데이터 프로젝트- 스프링 데이터 JPA는 스프링 데이터 프로젝트의 하위 프로젝트들 중 하나. 이는 다양한 데이터 저장소에 대한 접근을 추상화하여 개발자의 편의를 제공..

Java 2025.08.17