spring boot starter 3.1.6 -> starter : 의존성 처리 자동, 의존성 전이 케어
ModelAndView - 페이지 배포 위치 설정
2tier : client, server
3tier : client, middleware(server) - server
multi-tier : 4~이상 => [[EJB]] 기술(분산 컴퓨팅 기술)
application.yml 분석
datasource:
url: jdbc:oracle:thin:@127.0.01:1521/xe -> thin : 멀티티어 지원되는 드라이버 방식
username: -> @ : 도메인 /xe : sid 이름
password:
driver-class-name: oracle.jdbc.OracleDriver -> 드라이버 클래스 정보는 build.gradle 기입 ojdbc11.jar
hikari: -> HTTP 요청 순차적 DB 커넥션을 처리해 주는 기능을 수행
connection-timeout: 20000
validation-timeout: 3000
minimum-idle: 5
maximum-pool-size: 12 -> 연결시 lock flag 값 존재->종료 시 lock flag false
-> 13번째 사람 기다림
idle-timeout: 300000
max-lifetime: 1200000
auto-commit: true -> 자동 저장
pool-name: oraPool
servlet:
multipart: -> MultipartRequest API 사용 가능
enabled: true
배포 시 필요
- jar / war / ear : zip 방식이라고 생각하면 되지만 알아서 압축을 풀어낸다는 차이점이 있다.
- 현업에서 서버 업데이트가 필요한 경우, usb에 war를 넣어둔 채 서버마다 연결하여 업데이트를 해주는 방식으로 배포한다.
Get/post 방식
- 바이너리 파일 전송시 반드시 Post 방식 필요하다고 했었다.
- 이것을 스프링에서는 MultipartReqest API를 통해 파일 업로드를 제공하고 있다.
스프링 사이트에서 생성하기
- https://start.spring.io/를 통해서도 기초적인 설정과 war파일 생성 가능
- 필요 의존성을 검색하여 explore 클릭시 해당 의존성에 대한 코드 확인도 가능
자바 객체 간 의존관계 및 연결관계가 있는 개발, 제어권을 애플리케이션이 갖고 있음.
결합도 낮은 코드작성 위해 인터페이스, 추상클래스를 설계했음 -> 유연함, [[다형성]]
A a = new A() : 결합도 높음
생성부, 선언부 다르지만 직접 생성을 했음(인터페이스 변수 = new 구현체클래스())
문제제기? 컴포넌트 간 결합도가 높아 확장 및 재사용 어려움
@WebServlet -> @Controller + @RequestMapping
- 클래스 이름에만 사용 가능, CRUD마다 클래스 필요했음(4개의 게시판이면 서블릿 4개 선언 -> 비효율적)
- 클래스 한 개에 메소드 하나씩 존재
페이징처리, 메소드 : url을 문자열로 나누어 업무 배열, page 배열을 나누어 각 콘트롤러로 페이징처리를 연결했음.
요청처리 : 서블릿을 상속받아 req.getParameter() 를 통해 전달하면서 처리했었음.
클래스 연결 : Controller 클래스에 Logic 클래스를 생성하여 메소드 사용하였음.
DB 연결 : SqlSession(mybatis.jar)
@Controller : 스프링에 bean 등록 & 페이지 출력시 사용
@Controller("" 클래스 풀네임일 경우 생략 가능), 이름 혹은 타입으로 적을 수 있음.
JSON 포맷 예외적 사용하고 싶다면 ==@ResponseBody== 사용
@RestController : 컨트롤계층 지원, 페이지 출력이 아닌 경우 사용
@ResponseBody계층의 일을 하게 됨. 왜? Front와 Back의 분리를 선호하면서 생김.
@RequestMapping 클래스 앞에 붙임(메소드 앞에도 붙임. but 메소드인 경우, @GetMapping, @PostMapping을 더 많이 씀)
클래스 하나에 메소드 네 개를 넣고 싶은 것을 실현시켜줌.
페이징 처리, 메소드 : 메소드별 mapping을 넣어서 별도의 메소드를 배열로 담을 필요조차 없음! 스프링에서 클래스와 메소드들을 등록하여 사용이 필요한 곳에서 의존성을 주입하여 사용할 수 있게 됨.(마치 어제 사용해 본 것 처럼)
요청처리 : @RequestParam을 통해 서블릿 없이도 요청에 대한 웹 서비스 제공 가능!
메소드의 파라미터 자리에 사용되는 어노테이션
클래스 연결 :
1. @Autowired @Service 에 의한 Service 객체 생성(@Service는 모델계층-처리, 기능, 퍼시스턴스 계층)
- Logic 클래스에 @Service 어노테이션을 붙임.Controller 클래스에 @AutoWired NoticeLogic noticeLogic = null; 로 작성
- Dao 클래스에 @Service 붙이고, Logic에 @AutoWired 붙임.(이처럼 DB연동 클래스 따로 설계 추천)
2. @Repository 퍼시스턴스계층(모델 계층의 일부?) -> 추후 실습 예정
DB 연결 : @Autowired ==SqlSessionTemplate==(mybatis-spring.jar)
- selectList("noticeList");