2022-06-14(Section2_Spring기초)

이상수·2022년 6월 17일
0

TIL_Spring Base

목록 보기
1/6
post-thumbnail
  1. 시작하게 된 계기 및 다짐 😮
  • 이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.

    • 그 날 배웠던 것을 길지 않아도 좋으니 정리하며 복습하는 습관 기르기
    • 주말에 다음주에 배울 내용들을 예습
    • 코딩 문제와 java코드들은 꾸준히 학습
    • 자료구조를 이용한 알고리즘 문제 해결 학습
  1. 학습 목표 😮
목표결과
Spring Framework 이해 및 사용이유 학습O
POJO에 대한 이해 및 필요이유 학습O
IoC, AOP, PSA에 대한 이해 및 학습O
  1. 정리

Spring Framework

 - ★ 핵심개념 _ POJO 프로그래밍을 지향 하는 프레임워크
 - 개발 생산성 향상 및 유지보수 용이하게 하는 Framework
 - 객체 지향 설계에 맞게 재사용성과 확장성이 가능한 app개발 스킬을 향상 시키고 보다 나은 기업용 엔터프라이즈를 구축하기 위해 사용
 - 내부적으로 Servelt을 사용하여 웹 요청을 처리


 (1) Sublet&Jsp -> Spring MVC
    - 클라 요청에 담긴 데이터를 꺼내오는 작업을 Spring에서 알아서 처리
    - 단, 애플리케이션의 기본 구조를 잡는 설정 작업이 여전히 불편하다는 단점
    - web.xml이라는 설정 파일을 작업하는게 복잡

 (2) Spring MVC  -> Spring boot 
    - 데이터를 실제로 저장하는 기능을 추가하였고, 코드는 간결해짐
    - web.xml 설정 파일을 Spring이 대부분 대신 처리해주어 좀더 간결해짐


[Extra]

# 서블릿(Servlet)
 - 클라이언트 웹 요청 처리에 특화된 Java 클래스
 - Spring을 사용한 웹 요청을 처리할때에도 내부적으로는 Servlet을 사용
 - Spring MVC와 같은 Java기반의 웹 어플리케이션 내부에서 여전히 사용

 참조 : https://ko.wikipedia.org/wiki/자바_서블릿

# 서블릿 컨테이너(Servlet Container)
 - 'Servlet 기반의 웹 어플리케이션 실행' 및 Servlet의 생명주기를 관리
 - 쓰레드 풀을 생성하여 Servlet과 Thread를 매핑

 (1) 아파치 톰캣(Apacke Tomcat) 
   - 서블릿 컨테이너 한 종류
   참조 : https://ko.wikipedia.org/wiki/아파치_톰캣
           https://tomcat.apache.org/

 참조 : https://ko.wikipedia.org/wiki/웹_컨테이너

# 기업용 엔터프라이즈 시스템
 - 기업의 업무를 처리해주는 시스템으로, 대량의 사용자 요청을 처리해야 하기에 서버의 자원 효율성,보안성,안정성,확장성 등을 충분히 고려하여 만든 시스템

# JSP
 - html코드와 Server쪽 java 코드가 섞여있는 방식

# MVC(모델-뷰-컨트롤러)
 - 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 많이 사용되는 sw 디자인 패턴






POJO(Plain Old Java Object)

 - Spring framework의 핵심 개념
 - ★ 최대한 객체지향(순수한)적으로 으로 코드를 작성하고 
    최대한 환경(특정 웹 기술{httpservletRequest) 프레임워크 클래스/인터페이스 사용 안됨)
    /기술(Java 언어 외)에 종속적이지 않아야됨, 책임/열할이 분명하게 나누어져 있어야함
 - 클래스/인터페이스등을 상속받지 않은 순수한 기본적인 객체 
 - (1)IoC/DI, (2)AOP, (3)PSA 이 세가지 핵심 개념을 기반으로 사용
 - 'PO' Java로 생성하는 순수한 객체, 'JO' Java Object 
 
[POJO 프로그래밍 규약]
 1). Java나 Java의 스펙(사양)에 정의된 것 외에는 다른 기술이나 규약에 얾매이지 않는다.
 2). 특정 환경/기술에 종속적이지 않는다  ==> 재사용 가능, 확장의 유연함

[POJO 프로그래밍 이유]
 1). 재사용성, 확장의 유연함
 2). 저수준 레벨의 기술/환경 종속 코드를 통한 코드의 간결함
 3). 코드가 간결하여 디버깅이 쉽고 테스트 간결
 ★). 객체 지향적인 설계를 제한 없이 적용할 수 있음

[extra]
객체 지향 설계 원칙
 - 높은 응집력과 낮은 결합도를 가져야함






IoC/DI(Inversioin of Control/Dependency Injection)


1. IoC
 - [객체의 의존성을 역전시켜 객체간의 겹할도를 줄이고, 낮은 결합도를 가져 유연한 코드 작성]
 - [가독성과 유지보수의 효율성이 좋아지며, 코드 중복이 줄어듬]
 - Spring Container에 등록된 객체를 Bean이라 함
 - 스프링 컨테이너가 개발자 대신 Bean(객체)들을 관리(제어)해주는 행위
 - 서버 컨테이너 기술, 디자인 패턴, 객체 지향 설계등에 적용하게 되는 개념

1.5 IoC 컨테이너
 - 객체의 생성, 의존성을 관리하는 컨테이너

2. DI - 의존성 주입
 - IoC의 개념을 조금 구체화 시킨 것
 - 느슨한 의존성 주입
 - 객체관 관계를 느슨하게

[의존성 주입]
 - 의존성 주입 : 생성자를 통해 어떤 클래스의 객체를 전달 받는 것 
 - 의존성이 있다 : A클래스가 B클래스의 기능을 사용할 때, 의존(의지)관계라 한다.

[느슨한 의존성 주입]
 - 인터페이스를 활용하여 느슨한 결합
 - 인터페이스의 특정 메서드 만을 활용하여 사용하므로, 인터페이스의 구현체가 바뀌어도 상관이 없음
 - new를 키워드를 통한 생성자를 사용해서 참조하지 않게 하기
   ==> Spring을 통한 API로 이를 해결할 수 있음(Config 클래스)

==> 이를 통하여 요구 사항의 변경에 유연하게 대처할 수 있음

[Extra]
 - 심화과정 실습하기
 - 엔드포인트 : 클라이언트가 서버의 자원을 이용하기 위한 끝 지점
 - 스텁(Stub) : 멱등성을 가진 미리 준비된 고정 데이터
 - Config 클래스 : Spring framework의 내 클래스로, 
                       정의해둔 필요 객체를 Spring의 도움을 받아서 클라이언트에 제공하는 클래스






AOP(Aspect[관심] Oriented Programming)

1. AOP란?
 - [애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 분리, ex.에너테이션] 
 - 애플리케이션의 '핵심 업무 로직' <==> '공통 기능 로직'(로깅,보안,트랜잭션)들을 분리 한것
    --> 재사용 가능한 모듈로 사용, 높은 응집도(SRP)
 - 공통 관심 사항(Cross-cutting concern) : 전반에 걸쳐 공통적으로 사용되는 기능에 대한 관심사
 - 핵심 관심 사항(Core concern) : APP의 주 목적을 달성하기 위한 핵심 로직에 대한 관심사

[ex]
 - 커피주문앱에서 커피를 주문하는 기능(핵심 관심사항), 보안 처리를 위한 부분(공통 관심 사항)

2. AOP 필요 이유
 1). 코드의 간결성 유지
 2). 객체 지향 설계 원칙에 맞는 코드 구현
 3). 코드의 재사용성
 4). 공통기능은 상속을 이용하여 보통 처리하는데 다중 상속이 Java의 경우 다중상속이 불가하여.

[extra]
commit : 모든 작업이 성공 적 수행되었을때, DB에 반영
rollback : 하나라도 실패시 작업 이전 상태로 되돌리는 것
      






PSA(Portable Service Abstraction)

1. PSA란
 - [환경 변화에 상관없이 서비스의 기능을 일관된 방식(환경) 유지하면서 제공하는 추상화구조]
 - [DI를 활용하여 사용할 객체만 바꿔주도록 구현]
 - Abstraction : 추상화/일반화, 클래스의 본직적인 특성만 추출하는 과정
 - 코드 레벨에서 어떤 클래스의 기능을 사용하는 측 역시 클라이언트라고 부름
 - 추상화 된 상위 클래스를 일관적으로 바라보며 하위 클래스의 기능을 사용하는 것이 바로 일관된 서비스 추상화(PSA)의 개념


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

[extra]
 - 심화과정 실습
      






SOLID 및 Framework/Library 정의

SOLID 5원칙
 1). 단일 책임 원칙(SRP) : 한 클래스는 하나의 책임만 가짐
 2). 개방-폐쇄 원칙(OCP) : 확장에는 열려있고 변경에는 닫혀있기.
 3). 리스코프 치환 원칙(LSP) : 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀수 있어야 함
 4). 인터페이스 분리 원칙(ISP) : 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
 5). 의존관계 역전 원칙(DIP) : 구체화가 아닌 추상화에 의존하여야 함

 #참조 : https://itvillage.tistory.com/entry/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84-%EC%9B%90%EC%B9%99-SOLID-%EC%9B%90%EC%B9%99
 
 
0. Framework
  - [요청에 따라 서블릿 컨테이너 로직(service() 메서드)이 서블릿을 제어하여 주도권이 서블릿 컨테이너에 있음]
  - 기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조
  - 개발자가 애플리케이션 핵심 로직개발에 집중할 수 있도록 도와줌
  - Spring,Apache Wicket, JSF등 많은 web framework존재

  장 : 체계적 관리, 코드의 재사용성/확장성이 좋다, 기본적인 설계와 라이브러리를 제공해 생산성 향상
  단 : 해당 Framework에 대한 학습 필요, 자유롭고 유연한 개발은 불가능

0. Library
  - [ 개발자가 작성한 코드를 순차적으로 실행 ]
  - 애플리케이션 개발에 필요한 내용을 미리 구현(작은 단위의 프로그램)하고 모아놓은 곳
  - 언제든지 재사용이 가능하고, 필요에 의하여 호출하여 사용

# 프레임워크는 틀이고 그 안에서 재사용이 가능하도록 만들어진 도구들을 라이브러리라고 한다.      






  1. 피드백 😮
  • POJO프로그래밍을 지향하는 Spring Framework의 기본적인 개념을 학습하였는데, 이는 객체 지향 설계로 읺나 재사용성과 확장성이 높은 App을 개발하기 위해 사용된다.

  • POJO는 IoC/AOP/PSA인 세가지 개념을 기반으로 설계하는데, 각 제어의역전 및 의존성 주입/관점 지향 프로그래밍(기능 분리)/추상화를 통한 일관된 서비스 기능 지원을 의미한다.

  • 또한, Spring은 객체지향 설계를 기반으로 하기 때문에 SOLID 5원칙을 준수하며 설계하여야 한다.

  1. 앞으로 해야 될 것 😮
  • 매일 꾸준히 할 것
    • 꾸준히 velog 작성
    • Java 언어 및 Algorithm 공부(Coding-Test)
    • 틈틈히 운동 하기

  • 내일 해야 할 것
    • Spring Framework 모듈과 Springboot에 대하여 학습
    • Spring 아키텍처와 이를 통해 모듈 구성을 이해
profile
Will be great Backend-developer

0개의 댓글