TIL - 20250718

juni·2025년 7월 18일

TIL

목록 보기
68/316

0718 학습내용 정리

✅ Spring 컴포넌트 구조 및 의존성 주입 개념 복습

1. 구성 요소

  • @Controller: 클라이언트의 요청을 받아 처리하고 응답을 반환하는 역할.
  • @Service: 비즈니스 로직을 처리.
  • @Repository: DB와 직접 연결되어 데이터 CRUD 처리.
  • @Component: 스프링이 관리하는 일반 컴포넌트로, 위 3가지 어노테이션의 상위개념.

2. 의존성 주입 (Dependency Injection)

  • 생성자 주입 방식을 주로 사용.
  • @Autowired 어노테이션을 붙이면 스프링이 자동으로 해당 타입의 빈을 주입.
  • 생성자가 하나뿐이라면 @Autowired는 생략 가능.
@Controller
public class MyController {
    private final MyService myService;

    @Autowired
    public MyController(MyService myService) {
        this.myService = myService;
    }
}

✅ ComponentScan과 Configuration

  • @Configuration: 설정 클래스로, 스프링 설정 정보가 담긴 클래스임을 명시.
  • @ComponentScan: 특정 패키지 범위 내에서 @Component가 붙은 클래스를 스캔하여 스프링 컨테이너에 빈으로 등록.
@Configuration
@ComponentScan(basePackages = "com.spring.core.chap02_3")
public class MyModelConfig {}

✅ Feed 게시판 예제 구조

주요 클래스 구조 및 역할

  • FeedController: REST API 엔드포인트 처리

    • 피드 조회, 등록, 삭제, 개별 조회 등
  • FeedService: 비즈니스 로직 담당

    • 입력 데이터 검증, 변환 처리 등
  • FeedRepository: 데이터 저장소 역할 (메모리 기반)

  • DTO 클래스들

    • 요청 DTO (FeedCreateRequest): 클라이언트 입력을 객체로 받아옴
    • 응답 DTO (FeedListResponse, FeedDetailResponse): 필요한 정보만 클라이언트에게 응답
  • Feed: 실제 피드 데이터 (Entity)

컨트롤러 주요 API

메서드경로설명
GET/api/v5-5/feeds전체 피드 목록 조회
POST/api/v5-5/feeds피드 생성
DELETE/api/v5-5/feeds/{id}피드 삭제
GET/api/v5-5/feeds/{id}피드 개별 조회

✅ @Qualifier 사용 이유

  • 같은 타입의 빈이 여러 개 존재할 경우 어떤 빈을 주입할지 명시적으로 지정.
@Autowired
public StudentController(@Qualifier("smr") StudentRepository repository) {
    this.repository = repository;
}

✅ 롬복(@Getter, @Setter 등) 사용으로 코드 간결화

  • @Getter, @Setter, @ToString, @Builder, @NoArgsConstructor, @AllArgsConstructor, @EqualsAndHashCode
  • DTO, Entity, Model 클래스에서 반복되는 보일러플레이트 코드를 줄임.
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Feed {
    private Long feedId;
    private String content;
    private String writer;
    private LocalDateTime createdAt;
    private int viewCount;
}

✅ 정리 요약

  • @Component, @Controller, @Service, @Repository는 빈 등록용 어노테이션.
  • @Configuration + @ComponentScan 으로 빈 자동 등록 가능.
  • Feed 게시판 구조에서 Controller -> Service -> Repository 구조로 책임 분리됨.
  • DTO를 통해 요청/응답 구조를 깔끔하게 정리함.
  • 롬복 어노테이션으로 반복 코드 제거 가능.
  • @Qualifier로 동일 타입 빈 중 원하는 빈을 지정 가능.

0개의 댓글