[게시판]1. 레이어 책임

gov's avatar
Nov 18, 2024
[게시판]1. 레이어 책임
💡
프로젝트 생성 및 종속성
레이어 책임 IoC
Dependency 의존성

프로젝트 생성 및 종속성 추가

notion image

레이어 책임

  1. Controller 컨트롤러 : 사용자 요청 받고 응답 받은 요청을 서비스에 넘기고, 게시글 목록을 서비스에서 받아옴. Content-Type 설정, 관리
      • Content-Type : HTTP 요청과 응답에 약속한 데이터 형식을 명시하는 헤더
      • MIME : 메세지 내부에 다른 파일 전송이 가능한 전자메일 프로토콜 인코딩한 파일은 Content-Type 헤더에 담음
        • text/plain : 평문 - 문자 그대로의 텍스트
        • text/html : HTML - 웹 페이지를 위한 HTML 콘텐츠
        • application/x-www-form-urlencoded : key=value 형식 데이터 전송
          • form=1&balance=200&to=2
        • application/json : JSON 데이터 전송
          • { "form": 1, "balance": 2000, "to": 2 }
             
  1. Service 서비스 : 비즈니스 로직 처리 컨트롤러가 받은 요청을 기반으로, DB 데이터 조회 및 서비스 호출. 데이터 처리
      • 트랜잭션 처리: 여러 DB 작업을 하나의 트랜잭션에 묶어 처리, 오류 발생시 롤백 (트랜잭션 : DB 상태 변화를 수행하는 작업 단위)
      • DTO 사용
        • class DTO { // DTO : 계층간 데이터 교환을 위해 사용하는 객체 // DTO로 받은 데이터를 BC가 JSON으로 변환 private int from; private int balance; private int to; }
      • 여러 번의 업데이트: 서비스에서 여러 개의 레포지토리 메서드를 호출하여 하나의 트랜잭션 내에서 여러 번의 DB 업데이트 작업 처리
      • 레포지토리 의존성: 서비스는 레포지토리를 의존
  1. Repository 레포지토리 : DB 상호작용 데이터 저장, 조회 등 DB와 직접 연결되어 작업 처리 CRUD(Create, Read, Update, Delete) 작업 처리

IoC

  • IoC (제어의 역전) : 객체가 필요로 하는 다른 객체를 외부에서 주입하는 방식.
  • IoC컨테이너 : 객체를 관리, 생성, 의존성 주입 역할 수행 BoardControllerBoardService 객체를 직접 생성하지 않고, 스프링 IoC 컨테이너가 관리하고 생성
  • DI (디펜던시 Dependency, 의존성 주입) : IoC를 실현하는 방법 중 하나로 IoC를 구현한 기술
즉, IoC가 개념이라면, DI는 그 개념을 실제 코드로 구현한 것
 

레이어책임(실습) - Dependency 의존성

  • 전통방식 : new 키워드를 사용해 객체를 직접 생성
class A { private B b = new B(); // B 객체를 직접 생성 }
  • 스프링 : 의존성 주입을 통해, A 객체는 B 객체를 스프링 컨테이너가 주입
    • package com.example.blog.Board; import org.springframework.stereotype.Controller; @Controller public class BoardController { // final : 객체가 생성될 때 반드시 초기화. 이후 변경 불가능 // boardService 필드를 final로 선언 private final BoardService boardService; // 생성자 public BoardController(BoardService boardService) { this.boardService = boardService; } }
      package com.example.blog.Board; import org.springframework.stereotype.Service; @Service public class BoardService { private final BoardRepository boardRepository; public BoardService(BoardRepository boardRepository) { this.boardRepository = boardRepository; } }
 
Share article

goho