[2023.12.20] 개발자 교육 63일 차 : 강의-Spring Boot 실습 [구디 아카데미]

DaramGee·2023년 12월 20일
0

복습

Demo 프로젝트 분석

  • 구성

  • spring boot starter 3.1.6 -> starter : 의존성 처리 자동, 의존성 전이 케어

  • ModelAndView - 페이지 배포 위치 설정

  • RDBMS 제품 종류?

  • 2tier : client, server

  • 3tier : client, middleware(server) - server

  • multi-tier : 4~이상 => [[EJB]] 기술(분산 컴퓨팅 기술)

    • client 측(html, css, js - 정적페이지 - 다운로드 - 결정됨 - 비동기-브라우저)
    • 서버 측 - appache([[WAS]]) -> 웹컨테이너서버 Tomcat 5.0 이후 아파치 추월
      - 멀티티어(서버가 두개다)? 동시접속자수가 많아져도 처리가 용이 -> thin 드라이버 방식 사용
  • 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 클릭시 해당 의존성에 대한 코드 확인도 가능


강의 내용

스프링의 제어역전([[Dev/개념정리/IoC]])

  • 기존 방식

  • 자바 객체 간 의존관계 및 연결관계가 있는 개발, 제어권을 애플리케이션이 갖고 있음.

  • 결합도 낮은 코드작성 위해 인터페이스, 추상클래스를 설계했음 -> 유연함, [[다형성]]

  • A a = new A() : 결합도 높음

  • 생성부, 선언부 다르지만 직접 생성을 했음(인터페이스 변수 = new 구현체클래스())

  • 문제제기? 컴포넌트 간 결합도가 높아 확장 및 재사용 어려움

  • @WebServlet -> @Controller + @RequestMapping
    - 클래스 이름에만 사용 가능, CRUD마다 클래스 필요했음(4개의 게시판이면 서블릿 4개 선언 -> 비효율적)
    - 클래스 한 개에 메소드 하나씩 존재

  • 페이징처리, 메소드 : url을 문자열로 나누어 업무 배열, page 배열을 나누어 각 콘트롤러로 페이징처리를 연결했음.

  • 요청처리 : 서블릿을 상속받아 req.getParameter() 를 통해 전달하면서 처리했었음.

  • 클래스 연결 : Controller 클래스에 Logic 클래스를 생성하여 메소드 사용하였음.

  • DB 연결 : SqlSession(mybatis.jar)

  • 스프링 IoC의 등장![[Dev/개념정리/IoC]]

  • @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");


강의 마무리

  • 스프링의 핵심원리

  • 지금까지의 학습과정, 스프링을 새롭게 학습하며 스프링이 갖고 있는 핵심 원리에 대한 이해를 하는 시간을 갖고 있음.
  • 의존관계를 자동으로 주입해준다는 것은 무엇이며, 스프링의 제어역전이라는 것이 어떤 의미인지 실습을 통해 이해해보았음.
  • 스프링 컨테이너별 역할 및 어노테이션에 대한 이해

0개의 댓글