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

DaramGee·2023년 12월 18일
0

Spring 학습 소개

학습계획

  • 스프링은 레파지토리의 jar 파일을 받아 다양한 의존관계를 자동화 하는 것!

    	- spring-core.jar - [[IoC]]지원(설계적 관점) - 느슨한 결합(상속으로 처리 x) - 더 이상 서블릿(HttpServlet 상속)이 아니어도 됨(@Configuration-xml 방식에서 java코드 이용 환경 설정으로 옮겨옴)
    	- spring-aop.jar - [[AOP]]지원 - 공통된 관심사를 분리해서 개발자가 일일이 코딩하지 않고 자동으로 처리하도록 지원
    	- spring-orm.jar - [[Hibernate]]지원, JPA API 지원 
    	- spring-dao.jar - [[MyBatis]]와 같은 라이브러리 지원
    	- XXXLogic클래스에서 여러 XXXDao 클래스 메소드 호출 가능(업무적 복잡도 높음) 
    	- spring-context.jar는 IoC를 지원하는 ApplicationContext 제공함. -> 빈 관리에 관여(라이프사이클)
  • 스프링을 사용하면?

    	- 라이프사이클 관리를 스프링에게 빼앗긴다. 
    	- 개발자의 책임(관심사)이 아니다. 이것을 분리하는 것이다. 

스프링은?

  • 프레임워크이다. 라이브러리와 다르게 프레임워크는 제어권을 갖는다. 클래스(빈) 관리에 대한 제어권을 갖는다.
  • IoC컨테이너를 갖는다(제어의 역전이 일어난다. 책임을 분리한다.)
  • DI를 지원한다 -> 개발자가 각 기능들을 꺼내어 사용하도록 지원한다.
  • 많은 필터와 어노테이션을 갖고 있다.

강의 내용

스프링 부트 프로젝트 실습

  • 스프링 부트?

    	- 스프링 프레임워크의 하위 프로젝트로, 스프링 기반 애플리케이션을 쉽게 만들고 실행할 수 있도록 해준다.  
    	- 자동 구성(Auto-configuration), 내장 서버(Embedded Server), 간편한 의존성 관리 등의 기능을 제공하여 개발자들이 애플리케이션을 빠르게 구축할 수 있도록 지원한다.(자동으로 맞춰줄 때가 행복할 때라고 한다..ㅎㅎ)
  • 프로젝트 생성 과정

  1. Spring Initializr를 통한 생성

    • springframework 3.16. -> java 17 -> war -> 라이브러리 선택(롬복, spring boot devtools, spring web)
  2. 생성 후 demo 폴더로 프로젝트 오픈, 각 폴더 생성

  3. 커스텀 스니펫 생성(for jsp 생성 시 자동화)

  4. 의존성 설정 확인

    • build.gradle 확인 (아직 구성이 완료되지 않은 것을 추가해 둘 경우, 빌드 자체가 실행되지 않으니 주의)
  5. 빌드 및 코드 작성 시작

    • gradle build 후 코드 작성 시작
  • 기타 설정
    - 뒤에 jsp를 붙이거나 /를 붙이는 등 공통된 설정은 application.yml 파일에서 설정해둘 수 있다.

어노테이션 실습([[@어노테이션]])

  • 어노테이션?
    - url 요청 처리에 대해 xml파일이 점점 증가하며 복잡해짐! => 어노테이션이 사용되기 시작
    - 주석이 컴파일러가 보지 못 한다면, 어노테이션은 컴파일러가 반드시 본다! 처리한다!
    - 두 가지 방법을 혼합해서 사용할 수 있음. (4.0, 레거시는 xml / 스프링 부트는 어노테이션 사용)

  • 컨트롤계층?
    - 응답페이지 처리에 대한 책임(관심사)이 있다는 것이다.
    - 서블릿 상속받지 않았지만 필요할 때 요청객체, 응답객체 사용할 수 있다.(메소드 파라미터 갯수 제약 없음?!)
    - 실제 처리는 로직클래스에게 미룬다.
    - 순수한 상태를 유지하여 추후 이종언어와의 결합 시 유용하다!!(like React)

  • @Controller 실습 : 내가 컨트롤러이고, 화면도 직접 처리 시 사용
    - http://localhost:8000/user/loginForm
    - 응답 처리에 대한 책임이 있음.
    - 메소드 이름이 페이지 이름이 됨

  • @RestController : 데이터를 반환하는 데 사용 =>UI, json 활용 필요 시 사용
    - http://localhost:8000/step1/home?param=1
    - 중요한 부분, @Controller와 다르게 응답이 Page가 아니고 [[mime type]]이 text/plain이다.

  • @RequestMapping("/step1/") & @GetMapping("home") => 함께 사용
    - @RequestMapping은 요청에 대해 매핑할 때 사용
    - 매핑 주소를 정하면서 메소드가 실행될 때, 파라미터에 있는 값 또한 url로 담길 수 있음.
    - user -> RequestMapping(/user/*)으로 처리

    	- @GetMapping은 위 요청에 대한 핸들러 메소드(처리 메소드)를 지정할 때 사용
    	- @GetMapping은 @RequestMapping(method = RequestMethod.GET)의 축약형이라고 보자! 
    	- loginForm(메소드 이름, 페이지이름) -> GetMapping으로 처리 
    	- 이게 대체 어떻게 가능한거지?  여러 라이브러리를 지원받고, 스프링이 이에 대한 제어권을 갖고 있고, 따르게 됨. 
  • @RequestParam
    - 앞에 POJO에서는 requestGetParameter() 식으로 하나씩 다 입력을 받았음.
    - 스프링에서는 requestGetParameter를 쓰지 않고, 사용할 수 있는 어노테이션! 훨씬 코드가 간결해짐.
    - 대신, null값, 빈 문자열 전달에 대한 부분을 신경써야함. (둘은 엄연히 다름!!)
    - reqired를 통해 필수 매개변수 여부를 설정할 수 있음!(default는 true!)
    - 어노테이션까지 생략하게 될 경우, false로 설정되어서 null값이 서버에 전달될 수 있음.
    - 아니 파라미터에 넣는거 20개면 어떻게해?? 그러니까 Map을 써서 처리하기도 한다.

  • @Map??
    - 파라미터에 들어가는 @RequestParam 옆에 Map을 넣자

	@GetMapping("login5")
	public String login5(@RequestParam Map<String, Object> pMap) {
	logger.info(pMap.get("mem_id") + ", " + pMap.get("mem_pw") + ", " + pMap.get("mem_name"));
	return "redirect:/index.jsp";
	}

이밖에도 스프링에는 너무 많은 어노테이션이 쓰이고 있음.
이러한 어노테이션들은 스프링 프레임워크에서 코드를 더 간결하고 유연하게 작성할 수 있도록 도와주니 실습을 통해 조금이라도 익숙해지도록 하자!! >


강의 마무리

  • 어색한 스프링 익숙해지기

0개의 댓글