티스토리 뷰

Web 개발

[Web] Spring Boot with JPA (0-1) Spring 이란?

코딩브론즈 2021. 8. 26. 18:57

Spring 이란?

  • Spring은 Framework 이다. frame은 틀, work는 일. 틀 안에서 동작하다 라고 생각하자.
  • Spring은 오픈소스(=무료)이다. 따라서 소스코드가 공개되어있기 때문에 불편한 부분을 고쳐서 기여(Contribute)할 수 있다. 
  • Spring은 IoC 컨테이너를 가진다. IoC는 Spring의 핵심이다. 
    • IoC (Inversion of Contoroll) 를 해석하면 "제어의 역전" 이며 주도권이 Spring 한테 있다는것을 말한다.
      • Class : 설계도
      • Object : 실체화가 가능한 것
      • Instance : 실체화 된 것
      • 이전에는 개발자가 직접 객체의 주소를 관리했어야 하지만 이제부터는 Spring이 스캔을 해서 객체들을 메모리에 띄워놓았기 때문에 개발자가 관리하는것이 아니라 Spring이 관리하게 된다. 
  • DI 를 지원한다.
    • DI (Dependency Injection) : IoC로 Spring이 관리하게 된 객체들을 내가원하는 모든곳에서 객체를 가져와서 쓰는것을 DI라고 한다
    • 이쪽에서 쓰는 A객체와 저쪽에서 쓰는 A객체는 같은 객체가 되는것. <== 싱글톤이 된다.
  • Spring은 많은 Filter를 가지고 있다. 
    • Spring 자체가 가지고있는 기본 필터도 있고 
    • 사용중이지 않은 필터를 사용할수도 있고
    • 직접 필터를 생성하여 쓸 수 도 있다.
    • Tomket이 가지고 있는 필터는 실제로도 filter라고 불리고 이 필터의 기능을 하는 파일이 바로 web.xml 이다.
    • Spring Container 가 가지고 있는 필터는 인터셉터라고 불린다. AOP 라는 개념이 있는데 일단 있다정도만 알자.
  • Spring은 많은 어노테이션을 가지고 있다.
    • 컴파일 체킹 (어노테이션) : 주석과 비슷하지만 주석과 다르게 어노테이션은 컴파일러가 무시하지 않는다. 예를 들어 A 클래스에 a 메소드가 있고 A클래스를 상속하는 B클래스에서 a메소드를 오버라이딩할 때 어노테이션이 사용된다. 컴파일러는 상속한 A클래스에 a메소드가 존재하는지 체킹하고 없다면 에러가 난다.
    • Spring에서의 어노테이션(주석 + 힌트)은 객체생성할때 많이 쓰인다.
      • 위에서 설명한 IoC (제어의 역전)이 이때 발동한다. 어노테이션이 붙은 해당 클래스를 Spring이 읽고 heap 메모리에 로드한다.
      • @Component : 클래스를 메모리에 로딩해!
      • @Autowired : 로딩된 객체를 해당 변수에 집어넣어!
      • Spring이 클래스를 스캔하면서 어떤 메소드, 필드, 어노테이션이 있는지 분석하는 것을 리플렉션이라고 하는데 이때 무엇이 있다면 어떤 동작을 해라! 라고 지정할 수 있다. 리플렉션은 런타임때 실행된다.
  • Spring은 MessageConverter를 가지고 있다.
    • Java과 Python이 있다. 서로의 객체를 가져오고 싶은데 언어가 달라서 할 수가 없다. 이때 Java도 이해할 수 있고 Python도 이해할 수 있는 중간언어를 만들어서 연동하자.
    • 과거의 중간언어는 xml이었는데 요즘은 json을 많이 쓴다.
    • 한국인과 일본인이 영어로 대화한다고 생각하자.
    • request 시 자바 객체를 Json 객체로 변경해줌
    • response 시 Json을 자바 객체로 변경해줌.
    • 한마디로 개꿀임
  • BufferedReader, BufferedWriter를 쉽게 사용할 수 있다.
    • 먼저 통신의 기본단위는 1Byte이다. 그 이유는 영어권의 한 문자가 8bit(256가지)로 전송이 가능하기 때문이다. 하지만 우리나라의 경우 2Byte가 필요하다. (중국은 3Byte) 전 세계에서  통신을 하기위해 유니코드에서 UTF-8 (3Byte)을 제공해 주었다.
    • 자바에서는 데이터를 InputStream로 읽는다. InputStream은 1Byte 단위로 읽는데 이렇게 되면 위에서 언급했듯이 영어권이 아닐경우 문자가 아닐 수 있다. 따라서 (char) 과 같이 캐스팅을 해 줘야하는데 그러기엔 너무 귀찮다. 그래서 생긴것이 InputStreamReader이다. InputStreamReader는 배열로 여러개의 문자를 받는다. 하지만 배열은 크기를 정해줘야한다는 단점이 있다. 그러므로 이것도 못쓴다. 그래서 생긴게 BufferdReader이다.
    • BufferedReader는 가변길이의 문자를 받을 수 있다.
    • BufferedReader와 BufferedWriter는 결국 Byte 스트림으로 데이터를 전송할때 가변길이의 데이터를 사용하게 해주는 클래스이다.
    • BufferedReader와 BufferedWriter는 직접 구현할 필요 없이 @ResponseBody 어노테이션으로 쓸 수 있다.
      • @ResponseBody 를 쓰는 순간 BufferedWriter가 동작한다.
      • @RequestBody 를 쓰는 순간 BufferedReader가 동작한다.
    • 스프링은 계속 발전중이다.

출처 : https://www.youtube.com/playlist?list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg

 

후기

 

 Spring Boot 공부를 하기에 앞서 위의 유튜브 내용을 천천히 정리해 보았다. 겉핥기로 배우기는 했지만 기초적인 부분에 대하여 곱씹고 넘어가야한다고 생각했기 때문에 강의를 찾았고 내용이 너무 알차고 설명이 좋았다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함