1. 프로젝트 코드 변경 사항
- 애플리케이션을 실행시키면 샘플 데이터들을 모두 DB에 반영하도록 Listener을 추가했다. 애플리케이션이 실행되고 애플리케이션 컨텍스트가 생성된 직후에 onApplicationEvent()가 호출된다.
@Component
public class AppStartedListener implements ApplicationListener<ApplicationStartedEvent> {
@Autowired
SaveDBService saveDBService;
// 애플리케이션이 시작되고 ApplicationContext가 생성되고 난 후에 실행되는 리스너 메소드
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
saveDBService.saveAllSampleData();
}
}
- 이에 따라 HomeController의 home() 메소드를 삭제했다.
2. 팀장 강의 내용
1) Listener
(1) 개념 설명
- 특정 이벤트가 발생하기를 기다리다가 자동으로 실행되는 컴포넌트
(2) 프로젝트 적용 내용
- [1. 프로젝트 코드 변경 사항]에서 언급함
2) Validation
(1) 개념 설명
- Validation은 요청 파라미터를 검사해주는 기능이다.
- 컨트롤러 메소드의 파라미터에서 검사를 원하는 객체 앞에 @Valid를 붙이고, 바로 뒤에 있는 파라미터에는 반드시 검사결과 객체가 와야 한다. 해당 프로젝트에서는 BindingResult 객체를 사용했다.
public String testResult(@Valid SQLData sqlData, BindingResult result, Model model){...}
- @InitBinder 메소드는 Spring Validator를 사용할 때 @Valid으로 검증이 필요한 객체를 가져오기 전에 수행되는 메소드다.
@InitBinder("sqlData") // 참고로, @InitBinder의 파라미터에 @Valid 객체의 이름을 명시해두는 것이 좋다.
protected void initBinder(WebDataBinder binder) { binder.setValidator(new SQLValidator()); }
- Errors.rejectValue() 메소드를 통해 문제가 발생한 필드의 이름과 에러 메시지를 함께 저장할 수 있다.
(2) 프로젝트 적용 내용
- 추가한 라이브러리 : spring-boot-starter-validation
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 검사 대상 : com.example.demo.vo.SQLData
- 검사 클래스 : com.example.demo.validator.SQLValidator
- 검사 내용 : 입력된 SQL문의 공백 여부와 위험한 키워드 검사
- 테스트 케이스
1. 공백 입력
2. SELECT * FROM AGRI_FOOD_INFO
3. SELECT * FROM COVID_VACCINATION_CENTER LIMIT 10
4. SELECT EVENT, WRITTEN_TEST_EXAMINATION FROM TEST_STATUS_BY_EVENT ORDER BY WRITTEN_TEST_EXAMINATION DESC
5. SELECT * FROM COVID_INFECTION_STATUS WHERE DATE BETWEEN '2021-07-10' AND '2021-07-20'
6.
SELECT *
FROM COVID_VACCINATION_CENTER
WHERE ID=1
7. DROP TABLE AGRI_FOOD_INFO
8. DELETE FROM AGRI_FOOD_INFO
3) Mybatis
(1) 개념 설명
- Spring에서 DB 연동을 도와주는 프레임워크들 중 하나
- 자바 객체와 SQL 사이에서 자동 매핑을 도와줌
- SpringBoot에서는 @Mapper 인터페이스를 이용하여 손 쉽게 SQL을 저장할 수 있다.
(2) 프로젝트 적용 내용
- 사용자가 입력한 SQL문을 실행하여 결과를 받아왔다.
- 추가한 라이브러리 : mybatis-spring-boot-starter
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
- @Mapper 인터페이스 : com.example.demo.mapper.TestMapper
- com.example.demo.service.test.SQLResultClass
- getResult() : TestMapper를 호출하여 SQL 실행 결과를 받아오고 예외 처리까지 담당한다.
- checkKeywords() : SQL문의 안전성을 검증하여 만약 문제가 있다면 Model에 에러 메시지를 추가하고 false를 반환한다.
- checkSyntax() : SQL을 실행했을 때 예외가 발생했다면 Model에 에러 메시지를 추가하고 false를 반환한다.
3. 안내 사항
- 지금까지 강의에서 사용했던 소스코드들은 com.example.demo.example 패키지에 저장해두었으니 나중에 필요할 때 참고하면 된다.
4. 과제물 및 작업
- 다음주 토요일까지 수행할 것
과제물 : /test 페이지에서 잘못된 SQL을 입력했을 때 alert() 알람이 출력되는 과정을 자세히 txt 파일에 설명
작업 : jpa.repository에서 각자 가져왔던 샘플데이터에 대한 레포지토리를 생성하고, 그 안에 문제용으로 쓸만한 메소드를 3개 정도 작성해서 pull request
'개발 프로젝트 > [팀] Web - SQL 교육 사이트' 카테고리의 다른 글
[팀 프로젝트] SQL 교육 사이트 - 20220925 안내 사항 (0) | 2022.09.25 |
---|---|
[팀 프로젝트] SQL 교육 사이트 - 20220917 안내 사항 (0) | 2022.09.17 |
[팀 프로젝트] SQL 교육 사이트 - 20220823 안내 사항 (0) | 2022.08.23 |
[팀 프로젝트] SQL 교육 사이트 - 20220806 작업 사항 (0) | 2022.08.06 |
[팀 프로젝트] SQL 교육 사이트 - 20220801 강의 정리 (0) | 2022.08.02 |
댓글