본문 바로가기

Dev/[Java]

[Spring Framwork] Spring 이란?

반응형

목적

- 우선 프레임워크가 왜 개발에 필요한지 부터 생각해봐야합니다.

 

- 개개인의 실력 차이가 크더라도, 항상 만족할만한 일정 수준 이상의 결과물이 나온다면,

 

- '생산성' 이 증가합니다.

 

- Spring Framwork도 이 생산성을 위해 개발되었습니다.

 

- 특정한 틀이 있고, 거기에 Application을 구현하는 개발자는 살을 더해나간다고 보면 됩니다.

 

- 개발자들이 손쉽게 개발을 할 수 있도록 도와주지만,

 

- 그만큼 개발자의 자유가 제한됩니다.(스프링의 내부단은 건드리기가 힘들다..)

 

 

특징

- 구조를 통일해줍니다.

 

- 하드웨어적인 구성이 필요 없는 경량화 된 프레임워크입니다.

 

- POJO(오래된 방식의 자바 오브젝트)를 자바 EE에 의존적이지 않게 해줍니다.(일반적인 자바EE는 특정한 인터페이스를 구현하거나, 상속을 받아야하지만, 그럴 필요가 없다는 뜻..?)

 

- 개발자에게 가이드라인을 제공해줍니다.

 

- 다양한 도구가 제공됩니다.

 

- 제어 역행(IoC)기술을 통해 애플리케이션 간 종속성을 느슨하게 해줍니다.(컨트롤의 제어권이 사용자가 아니라 프레임워크에 있고, 필요에 따라 이를 호출한다는 내용..)

 

- 또한 종속성이 강하면, 그만큼 사이드이펙트가 많아지므로, 개발자들에게 종속성을 제거한다는 것은 굉장히 중요한 내용

 

- 관점 지향 프로그래밍(AOP)이 가능하다. 다시 말해, 특정 기능을 가진 클래스에는 핵심이 되는 것만 포함시키고, 이로부터 파생되어 나오는 내용들은 따로 정리할 수 있다.

 

- 구체적으로 로그 출력, 예외처리 등 공통화 할 수 있는 것들을 Aspect라는 단위로 모으는것.

 

- 아래는 AOP에 대한 위키백과의 예제...

 

- 은행 어플리케이션의 송금 기능을 생각해 보았을 때..

 

void transfer(Account fromAcc, Account toAcc, int amount) throws Exception {
  if (fromAcc.getBalance() < amount)
      throw new InsufficientFundsException();

  fromAcc.withdraw(amount);
  toAcc.deposit(amount);
}

여기에 로그 기록 기능, 보안 검사 기능, 데이터 손실 방지 기능을 추가하고싶다..!

    Logger logger, Database database) throws Exception {
  logger.info("Transferring money...");

  if (!isUserAuthorised(user, fromAcc)) {
    logger.info("User has no permission.");
    throw new UnauthorisedUserException();
  }

  if (fromAcc.getBalance() < amount) {
    logger.info("Insufficient funds.");
    throw new InsufficientFundsException();
  }

  fromAcc.withdraw(amount);
  toAcc.deposit(amount);

  database.commitChanges();  // Atomic operation.

  logger.info("Transaction successful.");
}

- 이렇게 변경하려면 상당한 작업 시간이 소요된다.. 그래서 AOP는 Aspect라는 단위로 독립적 모듈로 표현할 수 있게 해준다.

 

- 아래는 로깅 기능을 만든 것..

  void Bank.transfer(Account fromAcc, Account toAcc, int amount, User user, Logger logger)  {
    logger.info("Transferring money...");
  }

  void Bank.getMoneyBack(User user, int transactionId, Logger logger)  {
    logger.info("User requested money back.");
  }

  // Other crosscutting code.
}

 

- 또한 의존성을 주입시킨다(DI : Dependency Injection)..?(종속성은 없애고자하면서 의존성은 주입시킨다?)

 

- 종속성과 의존성은 다른 내용이다. 의존성을 '주입'한다면, 종속성이 느슨해진다..

 

- 공부를 하면 할수록 어렵네용 Spring은...

 

- 이러한 개념이 뭐가 중요하겠습니까....

 

- 갑이 원하는 기능만 잘 만들면 되는것 아니겠습니까ㅎㅎ..

 

- 라고 생각한다면 평생 을로 살수밖에 없습니다.

 

- 개념을 잘 알고 일한다면, 갑이 될 수 있다!

 

- 마무리가 이상하네요.

 

반응형