🤔 < Test Code >

Test Code는 개발자가 작성한 소프트웨어의 성능,기능을 검증하는 데 있어 핵심적인 역할을 수행한다.

 

🚀 < Test Code의 장점 > 

①. 품질 보장 : Test Code를 통해서 정상 작동하는지 Test함으로 전반적인 품질이 보장된다.

②. 버그 감지 : Test Code는 새로운 기능을 추가하거나 기존 코드를 수정할 때 발생 할 수 있는 문제를 미리 감지하는데 도움이 된다.

③. Refactoring : 안정적인 Test Code가 있으면 Refactoring이 쉬워진다. 코드의 구조를 변경하더라도 테스트 코드를 통해

기능 유지가 되는지 확인할 수 있기 때문이다.

④.문서화 : 해당 기능이 어떻게 동작해야 하는지를 보여주는 좋은 예제가 된다.

 

🎁 < Where ? >

Test Code는 test Directory에서 작업한다.

 

테스트 코드를 작성하는 데에는 다양한 방법이 있으며, 그 중 하나가 바로 'Given-When-Then' 패턴이다.

이 패턴은 테스트를 세 가지 단계로 나눠 보는 방법이며, 이는 다음과 같다.

 

1 ) Given - 이 단계에서는 테스트의 전제 조건을 설정한다. 즉, 테스트를 진행하기 위한 준비 단계로써, Data를 초기화하거나 특정 상태를 설정하는 등의 작업을 수행한다.

 

2 ) When - 이 단계에서는 실제로 테스트하고자 하는 행동,메서드를 실행한다. 즉, 검증하고자 하는 부분이 이 단계에서 수행된다.

 

3 ) Then - 마지막으로, 이 단계에서는 테스트 결과가 예상대로 동작하는지를 검증한다. 보통 'assert'라는 메서드를 이용하여, 결과값이 예상한 값과 일치하는지 확인하는 방식으로 진행된다. 

 

 

< given-when-then 테스트 코드 예시 >

@DisplayName("새로운 메뉴를 저장한다.")
@Test
public void saveMenuTest() {
 //given : 메뉴를 저장하기 위한 준비 과정
 final String name = "아메리카노";
 final int price = 2000;
 
  final Menu americano = new Menu(name, price);
  
  
  //when : 실제로 메뉴를 저장
  final long savedID = menuService.save(americano);
  
  // then : 메뉴가 잘 추가되었는지 검증
  final Menu saveMenu = menuService.findById(sevedId).get();
  assertThat(savedMenu.getName()).isEqualTo(name);
  assertThat(savedMenu.getPrice()).isEqualTo(price);
  }

위 코드는 세 부분으로 나누어져 있다. 메뉴를 저장하기 위해 준비하는 과정인 given절, 실제로 메뉴를 저장하는 when절, 메뉴가 잘 추가되었는지 검증하는 then절로 나누어져 있다. 

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

🌍< Spring Boot로 만든 App에서 HTTP Request가 오면,

어떠한 과정을 거치며 실행되고 응답하는 걸까? >

 

Spring Boot의 전체 Process 과정이 어떻게 진행 되는지 그림으로 알아보자. 

①. 그림을 보면 Postman에서 Tomcat에 /test GET Request를 보낸다. 그러면 이 Request는 Spring Boot 내로 이동하게 된다.

②.이때 Spring Boot의 Dispatcher servlet이 URL을 분석 후, 이 Request를 처리할 수 있는 Controller를 찾는다.

TestController가 /test라는 패스에 대한 GET 요청을 처리할 수 있는 getAllMembers() Method를 가지고 있다는 가정하에 Dispatcher servlet은 TestController에게 /test GET Request를 전달한다.

③.마침내 /test GET Request를 처리할 수 있는 getAllMembers() Method와 이 요청이 매치된다. 그리고 getAllMembers() method에서는 Business 계층과 Persistence Layer를 통하여 필요한 Data를 가져온다.

④.그러면 View Resolver가 Template Engine을 통해 HTML Doc을 만들거나, JSON,XML 등의 Data를 생성한다.

⑤.그 결과 members를 return하고 그 Data를 Postman에서 볼 수 있게 된다. 

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편 http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

'스프링부트' 카테고리의 다른 글

JUnit  (0) 2023.05.23
Test Code  (0) 2023.05.18
Spring Boot3 구조  (0) 2023.05.18
@SpringBootConfiguration/@ComponentScan/@EnableAutoConfiguration  (0) 2023.05.18
@SpringBootApplication  (0) 2023.05.18

Spring Boot는 다음 그림에서 보듯 각 계층이 양 옆의 계층과 통신하는 구조를 따른다.  여기서 계층이라는 단어는

각자의 역할,책임이 있는 어떤 Software의 구성 요소를 의미한다. 각 계층은 서로 소통할 수는 있으나 다른 계층에 직접 간섭하거나 영향을 미치지는 않는다.

 

<🍗치킨과 🍕피자로 이해하는 계층 > 

어떤 거리에 치킨집과 피자집이 있다고 생각해보자. 치킨은 치킨을, 피자는 피자를 판다.

그런데 필요한 경우 협업 관계를 맺음으로 어떤 손님이 피자를 사면 치킨을 할인 할 수도 있다.

 

이것이 계층 간의 소통이다. 하지만 치킨 알바생이 치킨을 팔다 말고 피자집에 가서 피자를 팔 수는 없는 것이다.

즉, 계층은 서로 영향을 끼치지는 못한다. 이렇게 각 계층은 자신의 책임에 맞는 역할(치킨 팔기,피자 팔기)를 수행하며,

필요에 따라 소통(피자 사면 치킨 할인)한다. Spring boot에는 presentation,Business,Persistence 계층이 있다. 이 계층이 서로 통신하며 프로그램을 구성 한다. 

🌈 Presentation 계층 (Controller)

 Presentation 계층은 사용자로부터 요청을 받아들이고, 사용자에게 응답을 전달하는 역할을 한다. 이는 웹 어플리케이션의 '얼굴'이라고 볼 수 있으며, 이 계층에서는 사용자의 요청을 파싱하고 유효성을 검사한 후에 적절한 Business 계층의 메서드를 호출한다. Spring Boot에서는 @Controller 또는 @RestController 어노테이션이 붙은 클래스가 이 역할을 담당한다.

 

🌈 Business 계층 (Service)

Business 계층은 실제 비즈니스 로직이 구현되는 곳으로, Presentation 계층에서 받은 요청을 처리하고 결과를 반환한다. 예를 들어, 온라인 상점에서 주문이 들어왔을 때 주문 처리 로직, 재고 확인, 할인 적용 등의 비즈니스 로직이 이 계층에서 구현된다. Spring Boot에서는 @Service 어노테이션이 붙은 클래스가 이 역할을 담당한다.

🌈 Persistence 계층 (Repository)

Persistence 계층은 데이터에 직접 접근하는 역할을 한다. 주로 데이터베이스와의 상호작용을 처리하며, 데이터를 생성(Create), 읽음(Read), 업데이트(Update), 삭제(Delete)하는 CRUD 연산을 담당한다. Spring Boot에서는 @Repository 어노테이션이 붙은 클래스가 이 역할을 담당한다..

 

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

'스프링부트' 카테고리의 다른 글

Test Code  (0) 2023.05.18
Spring Boot Request~Response Process  (0) 2023.05.18
@SpringBootConfiguration/@ComponentScan/@EnableAutoConfiguration  (0) 2023.05.18
@SpringBootApplication  (0) 2023.05.18
Portable Service Abstraction  (0) 2023.05.18

@SpringBootAplication을 Ctrl+클릭 시, 아래와 같은 구성으로 되어있다는 것을 알 수 있다.

📟 < SpringBootConfiguration > 

@SpringBootConfiguration Annotation은 Spring Boot에 관련된 설정을 나타내며, 사실상 @Configuration을 확장한 것이다. 주의할 점은, 일반적으로 개발자들이 직접 사용하는 Annotation은 아니라는 것이다.

📟 < ComponentScan > 

@ComponentScan은 Spring에서 관리할 Bean을 찾는 역할을 한다. @Component를 상속한 다른 Annotation(@Service,@Repository,@Controller 등)을 붙인 Class를 Bean으로 등록한다.

 

이 Annotation은 보통 Spring Boot의 Main Class나 Setting Class에 붙여 사용한다.Spring Boot App을 생성하면 Main Class에 @SpringBootApplication Annotation이 붙는데, 이 Annoation 안에 @ComponentScan이 포함되어 있는 것이다. 그래서 따로 @ComponentScan을 사용할 필요가 없는 경우가 많다.

 

@Component를 포함하는 다른 Annotation들이 있으며, 이들은 개발 과정 중 특정 용도에 따라 사용된다. 몇 가지 중요한 Annotation을 간단하게 살펴보자.

Annotation description
@Configuration 설정 파일 등록
@Repository ORM Mapping
@Controller,@RestController Routing 처리 
@Service Business Logic 처리 

📟 < EnableAutoConfiguration > 

Spring Boot에서 자동 구성을 활성화하는 Annotation이다. Spring boot Server가 실행될 때 Spring Boot의 Meta file을 읽고 정의된 설정들을 자동으로 구성하는 역할을 수행한다.

 

예제 코드로 Bean이 어떻게 등록되는지 알아보자.

@RestController
public class TestController {
  @GetMapping("/test")
  public String test() {
    return "Hello, world!";
  }
}

@RestController Annotation은 Route 또는 Endpoint로 작동한다. 예를 들어,

@RestController Annotation이 붙은 Class 내에 정의된 test method가 /test 라는 GET 요청에 응답하도록 설정할 수 있다.

직접 살펴보면 의문이 풀릴 것이다.

하지만, 여기서 @RestController와 @Component 차이점에 대해 의문이 생길 수 있다.

이 두 Annotation은 어떻게 서로 다른 용도를 가지면서 동시에 Spring에서는 같은 방식으로 취급 될까?

 

 

@RestController Annotation을 Ctrl+클릭하면 구현하는 RestController.java file로 이동할 것이다.

코드를 보면 @Controller, @ResponseBody Annotation이 함께 있는데. 이 코드를 보면 

@Controller Annotation + @ ResponseBodyt Annotation이 합쳐진 결과물이 @RestController Annotation임을 알 수 있다.

그런데 아직도 @ComPonent Annotation을 찾지 못했다.

 

계속해서 @Controller Annotation 구현 파일인 Controller.java File로 이동해보자.

위와 같이 @Component Annotation이 있다. 이를 통해 @Controller Annotation이 @ComponetScan을 통해 Bean으로 등록되는 이유를 알았다. 그 이유는 바로 @Controller Annotation에서 @Component Annotation을 상속하고 있기 때문이다.

앞서 소개한 @Configuration,@Repositiory,@Service Annotation 모두 @Component Annotation을 가지고 있다.

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

'스프링부트' 카테고리의 다른 글

Spring Boot Request~Response Process  (0) 2023.05.18
Spring Boot3 구조  (0) 2023.05.18
@SpringBootApplication  (0) 2023.05.18
Portable Service Abstraction  (0) 2023.05.18
관점 지향 프로그래밍(Aspect Oriented Programming)  (0) 2023.05.18
package com.example.myspringbootapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MySpringBootApp {
  public static void main(String[] args) {
    SpringApplication.run(MySpringBootApp.class, args);
  }
}

MySpringBootApp Class는 Application의 시작점이다. 여기서 Spring Boot Application은 시작된다.

@SpringBootApplication Annotation은 이 Class가 SpringBoot App의 주요 설정 파일임을 알려준다. 이 Annotation은

Spriong의 자동 설정, Spring bean 읽기,생성 등 Spring Boot App에 필요한 기본 설정을 제공한다.

SpringAplication.run() method는 실질적으로 Spring Boot App을 실행한다. 이 method는 두 개의 인자를 받는다.

첫 번째 인자는 App의 주 class,두 번째 인자는 Command line의 인자들을 전달한다. 

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

 🌳 < Portable Service Abstraction ? >

 

Portable Service Abstraction은 줄여서 PSA라고 부르며, '이식 가능한 서비스 추상화'라는 뜻을 가지고 있다.

이는 Spring이 제공하는 다양한 기술을 추상화하여 Dev가 쉽게 사용할 수 있는 Interface를 제공하는 것을 의미한다.

 

그럼 이것이 왜 필요한지, 실제로 어떻게 활용되는지 알아보자.

🔥  < PSA의 활용 예시 >

PSA는 Client의 Mapping과 Class, Method의 Mapping을 위한 Annotation을 포함한다.

그리고 Spring DataBase에 접근하기 위한 기술로는 JPA,MyBatis,JDBC  등이 있지만, 이 중 어떤 기술을 사용하더라도 일관된 방식으로 DataBase에 접근할 수 있도록 Interface를 제공한다.

 

또한, Web Application Server(WAS)역시 PSA의 좋은 예시라고 볼 수 있다.

PSA 덕분에 Dev는 코드 변경 없이, Tomcat,Undertow,Jetty 등 다양한 WAS에서 실행할 수 있기 때문이다.

📟 < Spring과 PSA >

Spring의 주요 개념인 IoC(Inversion of Control),DI(Dependecy Injection),AOP(Aspect-Oriented Programming),PSA(Portable Service Abstraction)은 Spring의 근간을 이루고 있다. 이러한 개념들을 활용한다면, Spring을 더욱 효과적으로 사용할 수 있게 된다.

 

Spring FrameWork는 IoC/DI를 통해 객체 간 의존 관계를 설정하며, AOP를 통해 핵심 관점과 부가 로직을 분리해 개발하며, PSA를 통해 추상화된 다양한 Service들을 일관된 방식으로 사용하도록 한다.

 

 

Spring의 핵심 4가지
IoC 제어 흐름을 개발자가 아닌 프레임워크가 관리
DI 외부에서 프레임워크가 주입하여 관리
AOP 공통 사용 기능을 분리하여 관리(핵심,부가 관점)
PSA 다양한 환경,기술에도 일관된 개발이 가능하도록 인터페이스를 제공하는 개념

 

 

출처:스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

🤍 관점 지향 프로그래밍(Aspect Oriented Programming) 

스프링에서 또 다른 중요한 개념으로는 AOP가 있다. AOP는 Aspect Oriented Programming을 줄인 표현이다.

직역하면 관점 지향 프로그래밍이다. 조금 의미를 풀어 설명하자면 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어 관심 기준으로 모듈화하는 것을 의미한다.

 

예를 들어 계좌 이체, 고객 관리하는 프로그램이 있을 때 각 프로그램에는 로깅 로직, 즉, 지금까지 벌어진 일을 기록하기 위한 Logic과 여러 Table을 관리하기 위한 Database Logic이 포함된다. 이때 핵심 관점은 계좌 이체,고객 관리 로직이고, 부가 관점은 로깅,데이터베이스 연결 로직이다. 실제 프로그램의 기능으로 로직을 정리하면 다음 그림과 같다. 

 

 

그림 반응이 좋아서... 감사합니다..?

그림을 보면 로깅, 데이터베이스 연결은 모두 계좌 이체와 고객관리에 필요하다. 여기에 AOP 관점을 적용하면,

부가 관점에 해당하는 Logic을 modularized하여 앞에서 본 그림처럼 개발할 수 있게 해준다.

다시 말해, 부가 관점 코드를 핵심 관점 코드에서 분리할 수 있게 해준다. 

그 결과 프로그래머는 핵심 관점 코드에만 집중할 수 있게 될 뿐만 아니라 프로그램의 변경과 확장에도 유연하게 대응 할 수 있어 좋다.

 

Reference : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

'스프링부트' 카테고리의 다른 글

@SpringBootApplication  (0) 2023.05.18
Portable Service Abstraction  (0) 2023.05.18
Bean / Spring Container  (0) 2023.05.18
IoC(Inversion of Control)/DI(Dependency Injection)  (0) 2023.05.18
th 문법(with)  (0) 2023.05.14

🤔 < Spring Container ?> 

 

Spring Container는 Bean을 생성하고 관리한다. 즉, Bean이 생성~소멸까지의 Life Cycle을 이 Spring Container가 관리하는 것이다. 또한 개발자가 @Autowired 같은 Annotation을 사용해 Bean을 주입받을 수 있게 DI를 지원하기도 한다.

 

그럼 Bean은 무엇일까?

 

 

🤔 < Bean ?>

Bean은 Spring Container가 생성하고 관리하는 객체이다.

public class A {
@Autowired
B b;
}

여기서 B가 바로 Bean이다. Spring은 Bean을 Spring Container에 등록하기 위해 XML 파일 설정, Annotation추가 등 여러 방법을 제공한다. 다시 말해 Bean을 등록하는 방법은 여러 가지 있다는 뜻.

 

예를 들어 MyBean이라는 Class에 @Conponent Annotation을 붙이면 MyBean Class가 Bean으로 등록된다.

이후 Spring Container에서 이 Class를 Managed 한다. 이때 Bean의 name은 Class name의 첫 글자를 소문자로 바꿔 관리한다.

지금 MyBean 같은 경우 myBean으로 된다.

@Componet //Class MyBean을 Bean으로 등록!
public class MyBean {
}

어렵게 생각할 필요 없이 Spring의 Object라고 생각하면 된다.

 

 

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

 

참고 하면 좋을 블로그 글: 

https://taeyoungcoding.tistory.com/168

 

@Bean Annotation @Configuration @Autowired

@Bean Annotation @Configuration @Autowired "Bean": 스프링 프레임워크에서 관리하는 객체 @Configuration : 빈(bean) 정의 및 의존성 주입 등 다양한 설정을 포함할 수 있다. 1.빈 등록: @Bean 어노테이션과 함께 사용

taeyoungcoding.tistory.com

https://taeyoungcoding.tistory.com/85

 

Container in springboot

 

taeyoungcoding.tistory.com

 

'스프링부트' 카테고리의 다른 글

Portable Service Abstraction  (0) 2023.05.18
관점 지향 프로그래밍(Aspect Oriented Programming)  (0) 2023.05.18
IoC(Inversion of Control)/DI(Dependency Injection)  (0) 2023.05.18
th 문법(with)  (0) 2023.05.14
Dependency Injection/DI  (0) 2023.05.14

Spring은 모든 기능의 기반을 제어의 역전 IoC와 의존성 주입DI에 두고 있다.

🎶 < IoC란 ? >

 

IoC는 Inversion of Control을 줄인 표현이다. 직역하자면, 제어의 역전이다.

 

다음을 보면 Class B object를 사용하기 위해 Class A에서 Object를 직접 생성한다.

public class A {
b = new B();  //Class A에서 new keyword로 class B의 object 생성 
}

제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라, 외부에서 관리하는 객체를 가져와 사용하는 것을 말한다. 위 예제에 제어의 역전을 적용하면 다음과 같이 코드의 형태로 바뀐다. 이전과는 다르게 Class B object를 직접 생성하는 것이 아니므로, 어딘가에서 받아와 사용하고 있다고 추측해볼 수 있다. 실제로 스프링은 스프링 컨테이너가 객체를 관리,제공하는 역할을 한다.

 

public class A {
private B b;
}

 

🎶 < DI 란 ? >

앞에서 설명한 것처럼 Spring에서는 Object들을 관리하기 위해 제어의 역전을 사용한다. 그리고 제어의 역전을 구현하기 위해 사용하는 방법이 DI이다. 여기서 DI라는 개념이 등장한다. DI는 Dependency Injection을 줄인 표현이며, 직역하자면 의존성 주입이다.

 

DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻이다. 조금 어려운 표현이겠지만  코드를 보면 매우 쉽다.

 

다음 코드는 IoC/DI를 기초로 하는 Spring Code이다. 여기서 사용하는 @Autowired라는 Annotation은 Spring Container에

있는 Bean을 주입하는 역할을 하는데, Bean은 Spring Container에서 Managed하는 Object이다. Bean은 바로 다음 글에 설명할 개념이므로 우선 이 정도로만 이해하도록 하자. 이전 코드에서는 개발자가 직접 B Object를 생성했지만,다음 코드는 어딘가에서 B b;라고 선언했을 뿐 직접 객체를 생성하지는 않고 있다. 다시 말해 Object를 주입받고 있다. 

public class A {
// A에서 B를 주입받음
@Autowired
B b;
}

위와 같이 코드를 작성해도 프로그램은 잘 동작한다. 그 이유는 Spring Container라는 곳에서 Object를 주입했기 때문이다.

쉽게 말해 Spring Container가 B Object를 만들어 Class A에게 준 것이다.

 

그림처럼 기존의 Java Code는 Class A에서 B Object를 쓰고 싶은 경우 직접 생성했지만, Spring의 경우 Class A에서 B Object를 쓰고 싶은 경우 Object를 직접 생성하는 것이 아니라 Spring Container에서 Object를 주입받아 사용한다.

 

이 IoC/DI 개념은 Spring의 핵심 개념이라고 할 수 있을 만큼 중요하기에 반드시 이해해야 한다.

 

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

 

참고 하면 좋은 자료 : 

https://taeyoungcoding.tistory.com/93

 

IoC(Inversion of Control) 제어의 역전

🤔 < IoC ? > < IoC(Inversion of Control) : 제어의 역전 > -출처: Wikipidia - In software engineering, inversion of control (IoC) is a programming principle. IoC inverts the flow of control as compared to traditional control flow. In IoC, custom-wri

taeyoungcoding.tistory.com

IoC 및 DIC에 관한 다른 설명 Version은 위의 글이 있으니 같이 참고하면 IoC와 DI의 이해에 도움이 된다.

 

  th:with="s_id=${session?.loginMemberShip?.memberId},
    s_email=${session?.loginMemberShip?.memberEmail},
    s_name=${session?.loginMemberShip?.memberName}"
    th:data-member-id="${s_id}"
    th:data-member-email="${s_email}"
    th:data-member-name="${s_name}">

th:with은 변수를 선언하고 초기화 한다.

?은 Nullable연산자. null일 경우 메소드 진행 안하고 null값 반환.

예를 들어서

s_id=${session?.loginMemberShip?.memberId}

이 경우 `session`이 `null`이면 `session.loginMemberShip`을 호출하지 않고 바로 `null`을 반환 함. 이렇게 하면 `NullPointerException`을 방지할 수 있음.

마찬가지로, `session.loginMemberShip`이 `null`인 경우, memberId 속성에 접근하지 않고 `null`을 반환.

`th:data-*`HTML5 `data-*속성을 동적으로 설정 가능하게 함. 아래의 코드가 있다고 가정.

th:data-member-id="${s_id}"

th:data-member-email="${s_email}"

th:data-member-name="${s_name}"

이 경우, `th:data-*`속성을 사용하여 HTML 요소에 회원정보 저장함.

즉, data-member-id 에는 {s_id}이 저장되는 거임

s_id 변수의 값이 1234라고 한다면, 최종적으로 생성되는 HTML 요소는 다음과 같다.

data-member-id="1234"

    th:fragment="main(title,styles,scripts,style,script,upm,header,nav,main,footer)">

이 속성은 'main'이라는 이름의 프래그먼트를 정의하고, 여러 개의 파라미터를 전달할 수 있도록 설정한다. 이 프래그먼트는 다른 페이지에서 th:replace나 th:insert를 사용하여 가져올 수 있다.


이것은 mainAterLogin에 쓰인 html이다.

th:fragment="main(title,styles,scripts,style,script,upm,header,nav,main,footer)">으로 fragment="main"으로 main에 main html의 값들을 넣어줘서

replace로 가져올 수 있었다.

그런데 ~{}도 있는데, 그것은 해당 fragment를 사용하지 않겠다는 것이다.

여기서는 style,styles,script를 사용하지 않는 것으로 본다.

+ Recent posts