풀스택 웹개발 부트캠프 17주차 (1)

syxxne·2023년 11월 8일
0

부트캠프

목록 보기
42/42

Spring

  • Java 기반의 웹 어플리케이션을 만들 수 있는 백엔드 프레임워크
  • Java로 다양한 어플리케이션을 만들기 위한 프로그래밍 툴

Spring 구조

Spring 프레임워크 특징

  1. IoC (Inversion of Control, 제어 반전)
  2. DI (Dpendency Injection, 의존성 주입)
  3. AOP (Aspect Object Programming, 관점 지향 프로그래밍)
  4. POJO (Pain Old Java Object 방식)

IoC

  • Inversion of Control, 제어 반전
  • 객체의 생성부터 소멸까지 개발자가 직접 하는 것이 아닌 spring container가 대신해주는 것
  • 의존성을 역전시켜 제어권을 직접 갖지 않는 것
  • 제어권이 개발자가 아닌 IoC에 있음
  • IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸해 생명 주기를 관리
// 일반 객체
class Sample {
  private Apple apple = new Apple();
}

// IoC 객체 : 제어권이 외부에 있는 객체
class Sample {
  private Apple apple;
  
  public Sample(Apple apple) {
    this.apple = apple;
  }
}

class SampleTest {
  Apple apple = new Apple();
  Sample sample = new Sample(apple);
}
  • Apple 객체의 제어권이 Sample에 있는 것이 아니라 SampleTest에 있음

DI

  • Dependency Injection, 의존성 주입
  • 구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의되는 것
  • DI를 통해서 IoC를 이룸
  • 코드 간의 재사용률 ↑ 모듈 간의 결합도 ↓
  • 느슨한 결합
  • 결합 : 무엇인가를 변경하는 데에 얼마나 많은 작업이 관련되어 있는지에 대한 측정
  • 필드 주입을 가장 많이 사용
// 1. Field Injection (필드 주입)
@Autowired
private FieldService fieldService;

// 2. Setter Injection (수정자 주입)
private SetterService setterService;

@Autowired
public void setSetterService(SetterService setterService) {
  this.setterService = setterService;
}

// 3. Contructor Injection (생성자 주입)
private final ConstructorService constructorService;

@Autowired
public ExampleComponent(ConstructorService constructorService) {
  this.constructorService = constructorService;
}

AOP

  • Aspect Object Programming, 관점 지향 프로그래밍
  • 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고, 그 관점을 기준으로 각각 모듈화
  • 비즈니스 로직공통 모듈로 구분한 후, 개발자의 코드 밖에서 필요한 시점에 비즈니스 로직을 삽입하여 실행
  • 비즈니스 로직을 분리하기 편함 → 회사에서 spring을 많이 사용
  • 계좌 이체, 입출금, 이자 계산 로직을 처리할 때, 공통적으로 로깅, 보안, 트랜잭션 작업 수행 필요
  • AOP는 공통 관심 (로깅, 보안, 트랜잭션) 을 따로 빼내어 객체별로 처리하는 것이 아닌 관점별로 외부에서 접근해 사용하도록 만듦

POJO

  • Plain Old Java Object, 단순한 자바 오브젝트
  • 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고, 필요에 따라 재사용될 수 있는 방식으로 설계된 오브젝트
  • getter, setter와 같이 기본적인 기능만 가진 자바 오브젝트

Spring Boot

  • Spring을 더 쉽게 이용하기 위한 도구
  • Spring을 이용하기 위해 필요한 여러 세팅 작업들 (ex. 톰캣 서버 설정, xml 설정 등) 없이 쉽고 빠르게 프리엠워크를 사용할 수 있도록 만들어진 것
  • 최근에는 kotlin 이용하여 spring을 개발하면서 maven보다는 gradle 많이 사용
  • snapshot : 만들어지는 중
  • RC1 : 거의 만들어졌으나 아직 배포 ❌
  • 3.x.x 버전으로 선택하기

Spring Boot 동작 환경

Spring Project 생성

  • Group : 기업명 or 도메인
    • Group명에 example → 테스트 버전
  • Artifact : jar 파일로 빌드했을 때, 결과물로 나올 이름
    • 일반적으로 Artifact와 name (project name) 은 동일

타임리프 : spring 내에서의 view 엔진
실무에서는 프론트 / 백을 나누므로 사용 X (교육 중에서만 사용)
node.js에서의 ejs와 유사

Spring MVC

  • http 요청을 controller에서 가장 먼저 받음
  • controller 내에서 문자열 return
    → 해당 이름을 가진 파일 (템플릿) 을 찾음
    → 이를 변환하여 브라우저에 보여줌
    ex) return "hello"; → hello.html 찾음
  • static 폴더 내의 index.html
    → "/" url이 mapping되지 않은 경우, default로 이를 보여줌
    • but @GetMapping("/") 이 있을 경우, url이 우선 순위이기 때문에 return한 파일명을 가진 페이지를 보여줌

Thymeleaf

  • Spring 내에서의 view 엔진 템플릿
  • node.js에서의 ejs와 유사
  • 실무에서는 프론트 / 백을 나누므로 사용 ❌ (교육 중에서만 사용)

0개의 댓글