Spring FrameWork 기본

InSeok·2022년 9월 9일
0

TIL

목록 보기
25/51

Spring FrameWork 기본

목차


  1. Spring FrameWork
  2. POJO
  3. SOLID
  4. AOP
  5. PSA
  6. IOC / DI

배운 내용


1. 프로젝트 생성

Spring Initializr 기능활용

  • Spring Initializr 공식 사이트 활용 하여 Spirng Boot 기반 샘플 프로젝트 생성

Lombok 설정

  • [File] > [Settings] > [Build, Execution, Deployment] > [Annotation Processors] [Enable annotation processing] 체크 박스에 체크

2. 프레임워크란?

  • 기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조
  • 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 서포트해준다.
  • 애플리케이션 흐름의 주도권이 개발자가 아닌 Framework에 있다.(Library는 주도권이 개발자에게 있다.)

스프링 역사

  • Spring MVC 방식이 도입됨으로써 Java 웹 애플리케이션의 제작 방식이 획기적으로 변하게 되었다.
  • Spring MVC 설정의 복잡함과 어려움을 극복하기 위해 Spring Boot이 탄생

POJO(Plain Old Java Object)

  • Java로 생성하는 순수한 객체

POJO 프로그래밍 규칙

  1. Java나 Java 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.

  2. 특정 환경에 종속적이지 않아야 한다. → 재사용 가능하고 , 확장가능한 유연한 코드 작성 가능

    → 객체지향적인 설계를 제한없이 적용가능

  • Spring은 POJO프로그래밍을 지향하는 Framework 이다.
  • 이를 위해, IoC/DI, AOP, PSA 세가지 기술 지원

IoC(Inversion Of Control) 제어의 역전

  • 애플리케이션 흐림의 주도권이 역전되는것
    • 주도권을 Spring이 갖는다.

DI(Dependency Injection) 의존관계 주입

  • 클래스 내부에서 다른 클래스의 객체를 생성하게되면 두 클래스간에 의존관계가 성립하게 된다.
  • 의존관계 주입 : 생성자를 통해서 어떤 클래스의 객체를 전달 받는 것
    • 생성자의 파라미터로 객체를 전달하는 것을 외부에서 객체를 주입한다라고 표현
  • 일반적으로 Java에서 new 키워드를 사용해서 객체를 생성하는데, Reflection이라는 기법을 이용해서 Runtime시에 객체를 동적으로 생성할 수 있는 방법도 있다.

new 키워드 사용할때 발생하는 문제

  • new 키워드를 사용해서 객체를 생성하게 되면 참조 할 클래스가 바뀌게 될 경우, 이 클래스를 사용하는 모든 클래스들을 수정해야 한다.

  • new 키워드를 사용해서 의존 객체를 생성할 때, 클래스들 간에 강하게 결합(Tight Coupling)되어 있다라고 표현

  • 어떤 클래스가 인터페이스 같이 일반화된 구성 요소에 의존하고 있을 때, 클래스들 간에 ‘느슨하게 결합(Loose Coupling)’되어 있다고 표현

    • 인터페이스 타입의 변수에 그 인터페이스의 구현 객체를 할당(Upcasting)

엔트리 포인트(Entry point)

  • main() 메서드처럼 애플리케이션이 시작되는 지점

엔드포인트(Endpoint)

  • 클라이언트 측면에서 서버의 자원(리소스, Resource)을 이용하기 위한 끝 지점

AOP(Aspect Oriented Programming) 관심지향 프로그래밍

  • 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션,모니터링, 트레이싱 같은 공통 기능 로직들을 분리하는것

공통 관심 사항(Cross-cutting concern)

  • 공통 기능들에 대한 관심사(부가적인 관심 사항)

핵심 관심 사항(Core concern)

  • 비즈니스 로직 즉, 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사

PSA(Portable Service Abstraction) 일관된 서비스 추상화

  • 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것
  • 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것
  • 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영

SOLID(객체지향 설계 원칙)

1. SRP(Single Responsibilty Principle, 단일 책임원칙)

  • 클래스가 제공하는 기능들은 하나의 책임을 수행하는데 집중해야 한다는 원칙

2.OCP(Open Close Princilple, 개방폐쇄의 원칙)

  • 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙

3.LSP(Liskov Substitution Principle, 리스코브 치환의 원칙)

  • subclass의 객체는 superclass의 참조변수에 대입해서 superclass의 역할을 수행하는데 문제가 없어야 한다는 원칙
  • 상위 타입 객체를 하위 타입 객체로 치환해도 정상적으로 동작해야 한다.

4.ISP(Interface Segregation Principle, 인터페이스 분리의 원칙)

  • 인터페이스의 단일 책임을 위한 원칙
  • 일반적인 하나의 인터페이스를 조금 더 구체적인 인터페이스로 쪼개는것이 낫다.

5.DIP(Dependency Inversion Principle, 의존성 역전의 원칙)

  • 자주 변경되는 구체 클래스에 의존하지 않고, 추상화(일반화) 된 클래스에 의존한다는 것을 의미

참조 https://itvillage.tistory.com/entry/객체지향-설계-원칙-SOLID-원칙

어려운 내용(에러)


애플리케이션 제작시 갖춰야할 사고 마인드

  1. 어떻게 하면 이 코드를 깔끔하게 유지할 수 있을까?
  2. 어떻게 하면 여기 저기 중복되는 코드들을 재사용 할 수있을까?

트랜잭션(Transaction)

  • 데이터를 처리하는 작업단위
  • 커밋 : 모든 작업이 성공했을 경우 데이터베이스에 반영
  • 롤백 : 작업이 하나라도 실패한다면 이전에 성공한 작업들을 작업수행 이전 상태로 되돌리는것
profile
백엔드 개발자

0개의 댓글