의존성 주입(DI), 데이터 제어, 데이터 이동, JUNIT, 스프링부트
@Autowired : 타입으로 의존성을 주입 [변수, 생성자, Setter 메서드, 일반 메서드 등에 적용]
@Resource : 이름으로 의존성 주입 [변수, Setter메서드 등]
DI: 클래스 간의 의존 관계를 스프링 컨테이너가 연결해주는 것
한마디로, 자동차 -> 세단, 포르쉐 가 있는데,
사용자는 각각을 사용하는데 이는 자동차라는 의존관계가 존재함(*uml에서 dependency 관계)
@Qualifier : 아래 2가지의 기능
1) @Autowired에서 연결한 빈 목록 중, 특정(유일)한 빈을 등록하는 것 @Qualifier(value ="빈이름")
2) 연결할 빈의 타입을 지정하는 것[springbeans.xml에 선언한 이름을 작성]
@Controller : MVC 패턴에서 view 반환을 위한 것, View를 반환하기 위해서는 ViewResolver가 사용된다.
@RestController : RestController는 JSON형태로 객체 데이터를 반환하는 것
RestController는 @ResponseBody가 같이 적용이 되어, 따로 명시 안해도 되고 역할은 HTTP본문에 자바객체가 매핑되어 데이터가 보내지는 것!(단, Controller에서는 따로 명시해야함(@ResponseBody를)
* 스프링에서 필요한 비동기 처리 애노테이션(데이터 형식: JSON)
> 여기서 비동기란?
데이터를 클라이언트와 서버가 상호 작용을 할 때, 화면이 갱신 되어도 데이터가 그대로 남아있는 것
그래서, 각각의 데이터는 본문(Body) 이라는 곳에 데이터를 담아둬야 한다.(그래야 데이터가 유지되는 것)
@RequestBody: 요청 본문[HTTP요청 바디 >자바 객체] : 요청 본문에 담긴 값들을 변환 시켜 객체에 저장
@ResponseBody: 응답 본문[자바 객체 > HTTP요청 바디] : 응답을 전송하기 위해 자바를 Http본문 객체로 변환하여
전송
@ModelAttribute : 한마디로, 객체를 만들어서 값들을 연결하고 출력까지 도와주는 애노테이션
1) @ModelAttribute("boardDTO") BoardDTO boardDTO: "boardDTO"의 객체를 자동으로 생성한다.
2) 생성된 boardDTO(오브젝트)에 Http 요청 본문으로부터 나온 값들을 바인딩시켜주는 것!
(해당 변수의 setter를 이용하여 데이터를 적용시킨다)
3) 이 객체가 자동으로 Model에 추가되고 추가된 객체는 view단 까지 전달이 됨(한마디로 데이터 입출력이 가능해짐!)
@PathVariable : url에서 각 구분자에 들어오는 값을 처리해야 할 때 사용
예) /mypage/service/{no} 여기에서, no를 처리할 때 사용하는 애노테이션이다.
@GetMapping("/mypage/service/{no}")
public ModelAndView mypageVocView(@PathVariable int no,HttpSession session) {
Qna qna = qnaMapper.findByNo(no);
Qnares qnares = qnaMapper.findByQno(qna.getNo());
Member member = memberMapper.findByNo((Integer)session.getAttribute("no"));
ModelAndView mv = new ModelAndView();
mv.setViewName("/mypage/vocView");
mv.addObject("member", member);
mv.addObject("qna", qna);
mv.addObject("qnares", qnares);
mv.addObject("css", "mypage/voc.css");
mv.addObject("js", "mypage/voc.js");
return mv;
}
여기서, 들어온 값(no)을 필요할 때 사용할 수 있다.
@RequestParam: HttpServletRequest와 같은 역할을 한다.(이는 파라미터 값을 넘기고 가져올 수 있도록)
@RequestMapping: http request로 들어오는 url을 특정 Controller 클래스나 메소드로 연결시킨다.
@Repository: DAO라는 것을 알리기 위함(DB에 접근하는 모든 코드가 모인 곳)
@Service: 비즈니스 로직과 관련된 모든 코드가 모인 곳(중간자 역할)
@Transactional: 처리한 쿼리를 자동 RollBack 해주기 위한 애노테이션
@Configuration: 스프링에게 해당 클래스를 Bean 구성 클래스임을 알려주는 것
@EnableTransactionManagement: 자바 형식으로 트랜잭션 처리를 허용해 주는 것
@Bean: DI에 관리되는 자바 객체(@Configuration과 무조건 같이 써야 함!)
@Component: 자신이 만든 클래스를 Bean으로 등록하는 것
@MapperScan: 해당 베이스패키지 내에서 DAO를 검색하여 등록하는 것
예) @MapperScan(basePackages = {"com.delluna"})
이것은 내가 했던 com.delluna.hotels라는 패키지의 베이스 패키지 이름이다.
@RequestMapping: http request로 들어오는 url을 특정 Controller 클래스나 메소드로 연결시킨다.
@Mapper: 해당 클래스는 빈으로 등록되며 Service단에서 Autowired하여 사용할 수 있다.
여기서 각각의 sql문들을 선언한다.
JUnit
- 기본 지식: mockito (단위 테스트를 위한 java mocking framework)
@Mock : Mock객체를 생성함(가짜모듈)
@InjectMocks : 생성한 Mock객체를 주입하여 사용하도록 한다.(여기서 쓰는 객체를 mock으로 가져다 만들어 쓰는 것)
@RunWith(MockitoJUnitRunner.class), @ExtendWith(MockitoExtension.class) : 버전 4에서는 Run 5에서는 Extend
Mockito에서 Mock객체를 사용하기 위한 애노테이션(class위에 달아준다!)
@ContextConfiguration:
스프링 컨테이너에 빈을 추가하기 위해서는 application-context.xml 파일과 같은 설정 파일을 읽어야한다.
이런 설정 파일을 로드하기 위해 필요한 애노테이션
@WebAppConfiguration : Controller및 web환경에 사용되는 빈들을 자동으로 생성하여 등록
@BeforeEach : 공통 파라미터 및 설정 시 사용
@AfterEach : 사용되고 난 후 종료되어야할 리소스를 처리하는 부분이다.
@Test : 테스트를 만드는 모듈 역할(직접 테스트하는 메소드)
SpringBoot
@SpringBootApplication: 스프링부트에 필요한 가장 기본적인 설정을 선언한다
@ComponentScan: @component , @Service, @Repository, @Controller 등을 스캔하여 Bean으로 등록해준다
@EnableAutoConfiguration: 특정 조건에 만족하는 라이브러리(사전에 정의함)들을 Bean으로 등록해주는 것
@Repository(클래스 명(여기서는 Mapper Interface)) : 해당 클래스가 데이터베이스에 접근하는 클래스임을 명시하는 것
Oracle과 SpringBoot (0) | 2021.08.28 |
---|---|
형상관리 및 was (0) | 2021.08.24 |
sts를 이용한 board 뷰들 (0) | 2021.08.09 |
sts를 이용한 member의 뷰 파일들 (0) | 2021.08.09 |
Board관련 sts 코드 (0) | 2021.08.09 |