04.16 학습&숙제

한강섭·2025년 4월 16일
0

학습 & 숙제

목록 보기
66/103
post-thumbnail

🧱 Framework

정의 : Frame을 가지고 하는 작업(work), 또는 구조물의 뼈대나 틀
소프트웨어에서의 정의 : 비즈니스 로직이 빠진 뼈대만 갖춰진 반제품 형태의 애플리케이션


🌿 Spring Framework

Java 애플리케이션 개발을 위한 경량 Framework입니다.

프레임워크는 비즈니스 로직과 무관한, 귀찮고 어렵고 모듈화할 수 있는 작업들을 대신 처리해줍니다.
개발자는 프레임워크에 맞춰 비즈니스 로직 작성에 집중할 수 있습니다.


⚡ Spring Boot

Spring Boot는 또 다른 Spring이 아닌, Spring 애플리케이션을 빠르게 개발하기 위한 템플릿입니다.

  • 설정 자동화를 통해 개발 속도를 향상시킵니다.
  • 단위 테스트 기능을 강화하여 프로젝트 안정성을 높입니다.

Connection → Bean으로 자연스럽게 이어지도록 해줍니다.

🫢 "Boot 바보가 되지 말자!"


🌟 주요 특징

Spring 핵심 특징

  • POJO 기반의 DI, AOP, PSA 지원

💉 DI (Dependency Injection) - 의존성 주입

  • 의존성을 없앨 수 있을까?
  • 의존성은 어떻게 관리되는가?

new를 이용한 객체 생성 방식은 의존성 직접 구매 방식입니다.
하지만 DI는 외부에서 의존성을 주입받아 사용하는 방식으로, 객체 간 결합도를 낮춰 유지보수를 용이하게 합니다.

의존성이 바뀌더라도 주입받는 객체는 변경될 필요가 없습니다.


👀 AOP (Aspect Oriented Programming) - 관점 지향 프로그래밍

비즈니스 로직에서 종단 관심사(로깅, 보안, 트랜잭션 등)를 모듈화하고, 필요한 곳에만 적용할 수 있습니다.

핵심 비즈니스 로직에 집중할 수 있도록 도와줍니다.

❓ Casher와 우렁각시의 차이점은 무엇일까요?


⚙️ PSA (Portable Service Abstraction) - 이식 가능한 서비스 추상화

  • 추상화란? → 자동차 기어와 자전거 기어처럼 조작은 다르지만 본질은 동일
  • 강력한 모듈화 제공

복잡한 기술을 특정 환경에 종속되지 않도록 추상화해 쉽게 사용할 수 있게 해줍니다.
JPA를 쓰든, MyBatis를 쓰든 트랜잭션 처리 방식은 동일합니다.

JPA에서 MyBatis로 교체했을 때, 트랜잭션 로직은 그대로 동작했습니다. PSA 덕분이죠.


☕ POJO (Plain Old Java Object)

POJO는 프레임워크나 라이브러리에 종속되지 않는 일반 자바 클래스입니다.
인터페이스 구현이나 상속 없이도 작동합니다.

DI, AOP, PSA를 적용하기 위해선 특별한 조건 없이 평범한 자바 객체만 만들면 됩니다.

  • 가독성과 유지보수성이 뛰어남
  • 단위 테스트 작성이 용이함

📋 SLF4J와 Logging

📌 Logging이란?

  • 디버깅과 장기간 동작하는 시스템 상태 추적을 위한 핵심 도구
  • 파라미터 확인, 예외 처리 등을 로깅 수준에 맞게 기록
  • 콘솔에만 로깅한다면? → 시스템 운영 시 불편함 발생

🧰 SLF4J (Simple Logging Facade for Java)

SLF4J는 자바 로깅을 위한 Facade 패턴 기반 인터페이스입니다.

복잡한 로깅 구현체 구조를 단순화해서 사용할 수 있도록 해줍니다.

SLF4J의 구현체: Log4j, Logback 등


🧭 SLF4J의 로깅 수준 (TDIWE)

  • trace < debug < info < warn < error
  • 설정에 따라 로그 출력 수준 조절 가능

다양한 Appender 제공:

  • ConsoleAppender
  • FileAppender
  • RollingFileAppender 등

✅ JUnit - 자바 단위 테스트 프레임워크

🔍 왜 테스트가 필요한가요?

  • 테스트는 성공/실패 여부를 명확히 판별합니다.
  • 단위 테스트 자동화는 안정적인 코드 개발을 위한 필수 요소입니다.
  • TDD(Test Driven Development) 기반 개발도 가능하게 합니다.

🧪 기본 애너테이션

  • @Test : 테스트 메서드 지정
  • @BeforeEach, @AfterEach : 각 테스트 전후 공통 작업 처리
  • @BeforeAll, @AfterAll : 모든 테스트 전에 한 번만 실행되는 작업 (static)
  • @DisplayName : 테스트 목적을 설명하는 문자열

✅ Assertion - 단정문

  • org.junit.jupiter.api.Assertions의 다양한 단정 메서드 사용
  • 예상 결과와 실제 결과 비교 검증

비교 예:

  • equals vs same
  • 배열 내용 비교
  • 예외 발생 검증
  • 여러 assert를 그룹핑하여 한 번에 검증

📌 단정문은 테스트의 핵심입니다. 단정 실패 시 테스트는 즉시 종료됩니다.

📐 Given - When - Then 패턴

BDD(Behavior Driven Development)에서 권장되는 테스트 흐름:

  • Given: 테스트를 위한 상황 준비
  • When: 테스트 대상 실행
  • Then: 결과 검증

🎯 FIRST 원칙 (좋은 단위 테스트를 위한 기준)

  • Fast: 빠르게 실행되어야 함
  • Independent: 테스트 간 의존성 없어야 함
  • Repeatable: 반복 실행 시 동일 결과 보장
  • Self-validating: 테스트 결과는 자체적으로 검증 가능해야 함
  • Timely: 실제 코드보다 먼저 작성하는 것이 이상적 (TDD)

@SpringBootTest는 편리하지만 무겁기 때문에 @DataJpaTest 등의 슬라이스 테스트를 권장합니다.


정리한 그림




숙제

정처기 공부와 1알고리즘 풀고 취침

profile
기록하고 공유하는 개발자

0개의 댓글