본문 바로가기
Java/자바공부

부트캠프가 끝난뒤...(6)

by 티코딩 2023. 5. 16.

ㅇ Spring Framework의 특징

- POJO 기반의 구성

- DI 지원

- AOP 지원

- Java 언어를 사용함으로써 얻는 장점

이것들과 관련된 포스팅이 이미 있으므로 간단하게 리뷰하는 식으로 작성하겠다.

https://thcoding.tistory.com/52

하지만 중요하니 꼭 외우자!!!

 

ㅇ POJO(Plain Old Java Object)

Java로 생성하는 순수한 객체를 의미한다. 그래서 POJO프로그래밍으로 작성한 코드라고 불리기 위해선 Java나 Java의 스펙에 정의된 것 이외엔 다른 기술이나 규약에 얽매이면 안된다. 그리고 특정 환경에 종속적이지 않아야 한다. 예를 들어 Tomcat을 사용하다가 갑자기 Tomcat 대신 Zetty 를 사용하라고 하면 Tomcat API 코드들을 모두 걷어내고 Zetty로 수정하던가 최악에는 전부 뜯어고쳐야할 수도 있다는 점이다.

필요한 이유 - 특정환경이나 기술에 종속적이지 않기 때문에 확장 가능한 유연한 코드를 작성할 수 있고, 코드가 깔끔해진다. 그리고 객체지향적인 설계를 제한 없이 적용할 수 있다.

Spring은 POJO프로그래밍을 지원하는 Framework다. POJO프로그래밍 코드를 작성하기 위해서 Spring에선 세가지 기술을 지원하는데, 그것이 IoC/DI, AOP, PSA 이다.

 

ㅇ IoC(Inversion of Control)

Library와 Framework의 큰 차이는 주도권이 누구에게 있느냐 였다. Library는 개발자에게, Framework는 Framework에게 있었다.

IoC는 애플리케이션 흐름의 주도권이 뒤바뀐것이다. 

서블릿 기반의 애플리케이션을 웹에서 실행하면, 별도의 main() 메서드가 없다. 클라이언트의 요청이 들어올때마다 서블릿 컨테이너 내의 컨테이너 로직이 서블릿을 직접 실행시켜준다. 이 경우, 서블릿 컨테이너가 서블릿을 제어하기 때문에 애플리케이션의 주도권은 서블릿 컨테이너에 있다. 서블릿과 웹 애플리케이션간에 IoC의 개념이 적용되어 있다. 

 

ㅇ DI(Dependency Injection)

IoC는 일반적인 개념인데 반해 DI는 IoC개념을 조금 구체화 시킨 것이다. 먼저 의존성 주입이라는 뜻을 알아보자.

객체지향 프로그래밍에서 의존성이라 하면, 대부분 객체 간의 의존성을 의미함.

내가 짠 코드의 일부다. CalculatorController위에 @RequiredArgsConstructor 을 사용해, 생성자를 자동으로 만들어주고, CalculatorService, CalculatorMapper, PhysicalService의 객체를 만들어줌으로 써 DI를 한것이다.

의존성 주입할때 주의할 점은 new 키워드를 사용하지 않는 것이다.

new키워드를 사용하면 클래스들 간 강하게 결합된다. 강하게 결합되면 유지보수가 굉장히 힘들어진다.

느슨한 결합을 하기 위해선 인터페이스를 사용하는 방법이 있다.

스텁데이터가 필요하면 MenuServiceStub을 사용하고, 실제 서비스를 할땐 MenuServiceImpl을 사용하는 방법으로 느슨한 결합이 된다. 이렇게 되면 new 를 쓸 필요없이 spring에서 제공하는 기능들로만 느슨한 결합을 만들 수 있다.

 

ㅇ AOP(Aspect Oriented Programming)

한마디로 관심지향 프로그래밍. 프로그래밍에서 관심이란? 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통기능에 대한 관심과 관련이 있다. 공통기능들에 관한 관심사를 공통 관심 사항 이라고하고, 비지니스 로직에 관한 관심사를 핵심 관심 사항이라고 한다. 공통 관심 사항의 예를 들면 로깅이나 보안, 트랜잭션 같은것이다.

왜 분리할까? 핵심 로직에 공통적인 기능의 코드들이 있으면 코드가 복잡해진다. 복잡해지면 버그 발생 가능성도 높아지고 유지보수도 당연히 어려워지는 코드가 될 가능성이 높다. 그래서 중복된 코드를 공통화해서 재사용 가능하도록 만들어야 한다. 

 

ㅇ PSA(Portable Service Abstraction)

추상화의 개념 - 객체지향 프로그래밍에서 추상화는 어떤 클래스의 본질적인 특성만을 추출해서 일반화하는 것.

 클라이언트가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 일관된 서비스 추상화의 기본 개념.

이처럼 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것을 PSA라고 함.

PSA가 필요한 이유 - 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함. PSA를 통해 애플리케이션의 요구 사항 변경에 유연하게 대처할 수 있음.

Spring에서 PSA가 적용된 분야는 트랜잭션 서비스, 메일 서비스, Spring Data 서비스 등이 있음.

 

'Java > 자바공부' 카테고리의 다른 글

부트캠프가 끝난뒤...(5)  (0) 2023.05.11
부트캠프가 끝난뒤...(4)  (0) 2023.05.03
부트캠프가 끝난뒤...(3)  (0) 2023.04.27
부트캠프가 끝난뒤...(2)  (0) 2023.04.26
부트캠프가 끝난뒤...(1)  (0) 2023.04.11