어노테이션, 스프링의 시작 (22.6.4)

0

Today I learned

목록 보기
2/75
post-custom-banner

어노테이션

코드를 보다보면 @Override처럼 @가 붙은걸 볼수있는데 자바 @의 의미는?
어노테이션(annotation) 이라고 한다

기존 자바 웹애플리케이션은 프로그램의 전체 및 각 레이어별 구성과 설정값들을 외부의 XML 설정파일에 명시하는 선언적인 프로그래밍 방식을 사용한다.
이것의 장점은 변경사항을 코드가 아닌 외부설정 파일에 분리하기때문에 쉽게 컴파일없이 적용할 수 있다
단점은 프로그램 작성을 위해 매번 많은 설정파일을 작성해야 한다.

어노테이션을 사용하면 데이터에 대한 유효성 검사조건을 Model 클래스에 직접 명시하여 쉽게 파악할 수 있고, 코드의 양도 줄어든다

어노테이션의 용도는 문서화, 컴파일러 체크, 코드 분석을 위한 용도로 사용된다. 컴파일 타임에 에러를 발생시켜주어 위험요소 경고 및 확인목적으로 사용한다. 또 데이터에 대해 설명하는 데이터인 '메타 데이터' 로서의 용도로도 쓰인다.

예를들어 @Override에서 수퍼클래서에 해당하는 메소드가 없으면 컴파일러가 인지하고 에러를 발생시킨다.



스프링이란

스프링은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크이다.

스프링의 특징

  • 자바 객체와 라이브러리들을 관리해주며, 톰캣과 같은 WAS 가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있다.

  • 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리한다. 객체의 생성 및 소멸과 같은 생명주기를 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용한다.

  • 가장 큰 특징은 IOC와 DI가 많이 언급된다.

    • 제어의 역전 (IOC, Inversion Of Control)
      일반적으로 자바 프로그램에선 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC라고 한다.
      • 요약하면 Spring의 IOC란 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출 구조이다.

    • 의존성 주입(DI, Dependency Injection)
      - 어떤 객체(B)를 사용하는 주체(A) 가 객체(B)를 직접 생성하는게 아니라 객체를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식이다. 사용하는 주체(A)가 사용하려는 객체(B)를 직접 생성하는 경우 의존성(변경사항이 있는 경우 서로에게 영향을 많이 준다)이 높아진다. 하지만, 외부(Spring)에서 직접 생성하여 관리하는 경우에는 A와 B의 의존성이 줄어든다.



스프링 부트란

스프링 부트(Spring Boot)는 스프링(Spring)을 더 쉽게 이용하기 위한 도구라고 볼 수 있다. 스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많다. 여러가지를 세팅해야되는 진입 장벽이 존재하여 Spring 을 처음 배우려는 사람들은 중도에 그만두는 경우가 많다고 한다. Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할을 하고 있다

김영한 선생님의 스프링 강의 공부

무료 스프링 입문
스프링을 설치하고 인텔리제이에 들어가보면 내가 설치하기 원했던 라이브러리보다 훨씬 더 많이 설치가 되어있는데 이건 라이브러리들이 의존관계로 인해 붙어오기 때문
예전에는 톰캣처럼 웹서버랑 분리되어있었는데 요즘은 딸려나온다.

실무에서는 sys.out.print를 쓰지않고 log를 쓴다

첫 Welcome 페이지 만들기.

@Controller
public class HelloController {
 @GetMapping("hello")
 public String hello(Model model) {
 model.addAttribute("data", "hello!!");
 return "hello";
 }
}

resources/templates/hello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
 <title>Hello</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
  • 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버가 화면을 찾아서 처리한다.
    • 스프링 부트 템플릿엔진 기본 viewName 매핑
    • resources:templates/+{ViewName}+.html

빌드하고 실행하기

  1. gradlew build
  2. dir build/libs
  3. java -jar hello-spring-0.0.1-SNAPSHOT.jar
  4. 실행 확인



잡담

김영한 선생님의 스프링 강의를 예전부터 들을 계획은 있었다. 원래는 알고리즘 공부를 하며 백준 플래티넘을 달성하고 그 다음으로 수강하려고 계획했는데 우연히 인프런에 들어가보니 김영한 선생님의 스프링 강의들이 새 DB 강의가 나온 기념으로 전부 할인하고 있었다.

6/9 까지인 이번 할인을 놓치면 복학 전까지 할인을 못 받을것같아서 강의를 구매하려던 찰나, 그래도 50만원이 넘는 금액이기에 무작정 구매하기보다는 일단 어떤 강의인지 조금은 알아보고 구매하려고 급하게 공부를 시작했다.

아직은 뭐가 뭔지 잘 모르겠지만 열심히 해봐야겠다.

profile
공부한 내용 정리
post-custom-banner

0개의 댓글