[Java/Spring] 스프링 기본 정리

올랜도·2022년 2월 27일
0

Spring

목록 보기
1/1
post-thumbnail

개요

2 주간 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 완강하고
스프링 핵심 원리 - 기본편을 수강하면서 익혔던 굵직한 것들에 대해 복기합니다.

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술


스프링 부트

  • Apache tomcat 내장 서버
    • was(web applicaiton server)
    • HTTP Request, Response 처리
    • 동적 데이터 처리(DB, 가공 데이터)
  • 스프링 컨테이너
    • 객체의 생성과 소멸에 대한 컨트롤 권한 소유
      (IOC)
    • 생성되는 객체들을 Bean이라고 부른다.

스프링 웹 개발

기초

  • 정적 컨텐츠
    • 단어 그대로 멈춰있는 페이지 그대로를 말한다.
    • 단순한 요청을 반환해주는 정도의 역할을 수행한다.
  • MVC와 템플릿 엔진
    • Model, View, Controller 세가지 요소를 중점으로 돌아가는 컨텐츠
    • 요청을 받으면 Controller에서 Model에 반환값을 찾아 View를 통해 반환한다.
  • API
    • 클라이언트가 서버에 요청을 할 경우 요청에 맞는 응답을
      반환하는 매개체의 역할

애플리케이션

계층 구조

  • 컨트롤러
    • MVC의 컨트롤러에 해당
  • 서비스
    • 핵심적인 비즈니스 로직
  • 도메인
    • 비즈니스 도메인 객체(테이블에 들어갈 객체) - 데이터 베이스에 저장하고 관리
  • 리포지토리
    • 데이터베이스 접근, 도메인 객체 관리

Etc

  • DI(Dependency Injection)
    • 객체 의존관계(인터페이스 혹은 구현체) 등을 외부에서 주입하는것으로 번역하면 의존성 주입이라고 한다.
    • 스프링에서는 컴포넌트 스캔 방식으로 컨테이너에서
      생성된 객체, bean을 주입한다
  • JPA(Java Persistance API)
    • 작성한 클래스의 엔티티 정보를 바탕으로 테이블 생성 및 데이터 저장 역할을 수행한다.
    • 메서드 실행 시 트랜잭션을 시작 하며 메서드 호출이 종료될 때 커밋을 수행한다. 메서드 수행 도중 예외가 발생하면 롤백을 수행한다.
  • AOP(Aspect Oriented Programming)
    • 메서드간의 호출 시간을 측정할 수 있도록 프록시를 주입하여
      측정

스프링 핵심 원리 - 기본편


SOLID

  • SRP(single responsibility principle)
    • 단일 책임 원칙으로 번역되며 한 클래스는 하나의 책임만 가져야 한다. 클래스 수정 시 파급력이 적을 경우 단일 책임 원칙을 잘
      따른 것
  • OCP(Open/closed priciple)
    • 개방 - 폐쇄 원칙으로 확장에는 열려있고 변경에는 닫혀있어야 함을 말한다. 클라이언트 에 인접한 코드에서 변경이 없는 것을 지향한다.
  • LSP(Liskov substitution principle)
    • 리스코프 치환 원칙으로 인터페이시의 하위 클래스는 인터페이스의 정의된 기능을 반드시 고수하여야 한다.
  • ISP(Interface segregation principle)
    • 인터페이스 분리원칙, 범용 인터페이스보단 특정 클라이언트를 위한 인터페이스 여러개를 구현하는것이 훨씬 낫다는 말
  • DIP(Dependency inversion principle)
    • 의존성 주입과 연관이 깊은 원칙으로 구체화가 아닌 추상화에 의존해야 한다는 원칙이다.

스프링은 일반적으로 DI(Dependency Injection)과 DI컨테이너를 통해 OCP, DIP를 가능하게 한다. 영한님이 작성하실때 처럼 역할과 구현의 관계를 파악하고 분리하면 지나가던 옆집 뽀삐도 스프링으로 서비스를 구현할것 같다.

AppConfig/

관심사의 분리

  • 강의 중, 서비스 구현체 작성 시 리포지토리를 비롯한 구현체가 직접적인 형태(생성자 주입)로 주입되어 의존성이 역전되는 DIP가 발생한다. 이를 해결해야 한다.
    • config파일에 순수 자바 코드, 더 나아가 스프링 컨테이너를 생성하여 각각의 구현체(스프링 빈)를 생성하고 이를 갖는 추상화를 서비스에 주입하는 방식으로 해결 가능하다. 이를 관심사의 분리라고 부른다.

Spring container/bean

  • Container
    • 스프링에서 사용하는 객체들을 생성한다. 호출 시, 자바코드 혹은 xml파일에 정의된 빈들의 의존관계를 주입하는 역할을 하며 전반적인 생명주기를 관리한다.
      • bean
        • 통상적으로 명시한 모든 구현체에 대한 객체를 칭한다.
profile
☂️생존주의 개발자

0개의 댓글