틀에서 동작하는것을 뜻한다.
프레임워크가 왜 나왔을까?
개발할때 그 틀을 벗어나지 말라고 프레임워크를 사용하는 것. 그러면서 프레임워크에서 지원하는 기능들을 편리하게 이용하는 것이다.
여러 다양한 개발자들이 자신의 마음대로 개발을 진행하지 않도록 하며, 프레임워크라는것을 사용하여 그 틀안에서 개발을 진행할 수 있도록 한다. 틀을 벗어나지 않고 스프링프레임워크 틀안에서 개발을 진행함에 그 의미가 있다.
제어의 역전(Inversion of Control) : 주도권이 스프링한테 있다는 뜻.
개발자가 개발한 수많은 Object를 Spring에서 모두 다 스캔하여 객체들을 메모리에 띄우는 역할을 한다.
즉, 개발자가 직접 관리하는것이 아니라 Spring에서 객체들을 관리하기 때문에 굉장히 편리하게 사용할 수 있다.
DI(Dependency Injection) : 의존성 주입이라고 한다. 스프링이 스캔을 해서 Object를 메모리에 띄웠기 때문에 이것을 IOC 제어의 역전이라고 하고, 스프링이 관리하는 모든 객체들을 개발자가 원하는 모든 클레스의 함수에서 가져와서 사용할 수 있다.
예를들어 클래스 자동차가 스캔되어 스프링에 떳다면 딱 한번만 메모리에 뜨고, 딱 한번만 뜬 자동차를 공유해서 사용할 수 있다. 모든함수에서 사용가능한 것이다. 이렇게 필요한곳에서 가져가서 사용하는것을 DI(Dependency Injection)라고 한다.
어노테이션 : 주석은 컴파일러가 무시하지만, 어노테이션은 주석이긴 한데 컴파일러가 무언가를 체킹할 수 있도록 힌트를 주는 주석이다. 그래서 Spring의 어노테이션은 컴파일러가 무시하지 않는다. 컴파일시 어노테이션을 체크하여 에러가 있다면 컴파일시 에러를 표시한다.
스프링에서는 어노테이션을 통해서 객체를 생성한다. 무슨말?
예를들어...
@Compont >> 클래스 메모리에 로딩
@Autowired >> 로딩된 객체를 해당 변수에 집어넣어.
위와 같은 어노테이션의 역할을 미리 약속을 해두고 어노테이션에 따라서 스프링이 처리하는 것이다.
따라서 개발자가 직접 class를 new하여 생성하기보다는 Spring에서는 IoC를 사용하여 class위에 @Component라는 어노테이션을 선언해두면 Spring이 해당 클래스를 스캔해서 Spring이 들고있는 어떤 메모리 공간에 해당 class를 로드한다.
스프링이 객체를 생성한다. 그때 사용하는 기법, 어노테이션 기법을 사용한다. 스프링이 제어하는 것이다(IoC). 어노테이션을 통하여 생성한 객체를 다른 어떤곳에서든 가져와서 사용할 수 있는데 이것을 의존성 주입(DI) 라고 한다.
한국사람이 미국사람에게 "안녕하세요" 라고 메시지를 보내면 미국사람은 이해할 수 없을 것이다. 마찬가지로 미국사람이 한국사람에게 "hello" 라고 메시지를 보내면 이해할 수 없을 것이다.
물론 한국사람이 영어공부를 해서 "hello"를 보낼수도 있을것이고, 반대로 미국사람이 한국어를 공부해서 "안녕하세요" 를 보낼수도 있을것이다. 하지만 이는 시간이 많이 들고 리소스가 상당하다.
따라서 스프링에서는 중간언어라는 것이 있다. 예전에는 중간언어로 xml이 많이 사용되었는데 최근에는 json이 많이 사용되고 있다. 이 중간언어는 모든 나라의 사람이 이해할 수 있는 것인데 json 이라고 한다.
Java Object가 Pyton에게 Java Object를 전송한다면 Python입장에서는 "이거 뭔소리야?" 라고 할것이다.
Python Object가 Java에게 Python Object를 전송한다면 Java입장에서는 "이거 뭔소리야?" 라고 할것이다.
따라서 Json이라는 중간언어가 있는 것이다.
스프링에서는 json으로 변경해주는 라이브러리가 존재한다. Jackson이라는 라이브러리는 json으로 변경을 도와주는 라이브러리 이다.
요청시, 메시지 컨버터에서 Java Object를 Json으로 변환하여 요청한다.
응답시, 메시지 컨버터에서 Json을 Java Object로 변환하여 받는다.
Spring의 Message Converter가 있기 때문이 데이터 요청 및 응답받는것이 매우 편리하다.
데이터 통신할 때 전기선을 통해서 데이터가 이동한다. 통신은 비트단위로 통신이 된다.
그런데 이 통신 방식은 발전의 시작이 영어권 국가에서 먼저 발전을 시작했기 때문에, 이렇게 bit단위로 통신하게 되면 사람이 이해하기 어렵다고 생각하였다. 그래서 bit단위로 통신하는것이 아니라 어떻게 하면 영어 한문자로 통신할 수 있을까 라고 생각해봤더니 최소 8bit가 필요하였다. 8bit만 있으면 256가지의 문자를 전송할 수 있다.
그런데 만약 한글이라면 8bit로 통신하지 못한다. 왜냐하면 한글은 종류가 더욱 다양하기 때문이다. 그래서 한글은 최소 16bit가 필요하다. 그러면 영어권 국가에서는 8bit면 통신이 가능하다.
"8bit씩 끊어 읽어. 그럼 한문자씩 받을 수 있을거야!"
"아 그래? 그럼 내가 8bit씩 끊어 읽을께. 그럼 내가 한문자씩 읽을 수 있겠네?"
라고 해서 8bit를 논리적인 단위로 1바이트라고 하는 것이다. 이 1바이트는 통신의 단위가 된다. 물론 비트통신도 있지만 우리가 일반적인 프로그래밍에서는 바이트 통신을 한다. 만약에 영어권에서 발생한것이 아니라 대한민국에서 제일 처음 시작되었다면 1바이트는 16bit가 되었을 것이다.
그런데 중국은 언어가 10만개? 정도 된다. 그럼 중국은 2바이트로도 통신이 불가능하다. 3바이트가 되어야 한다. 전세계적으로 문자를 표현하기 위해서 필요한 바이트가 다를것이다. 미국은 1바이트, 한국은 2바이트, 중국은 3바이트이기 때문에 인터넷상에서는 문제가 발생한다.
따라서 유니코드에서 정해둔것이 UTF-8이라는 캐릭터 인코딩을 정해두었다. 이것이 3바이트 통신이다. 그래서 요즘은 문자 인코딩을 3바이트로 한다.
문자를 전송할때 InputStreamReader를 사용하면 배열로 여러개의 문자를 보내게 되는데 작은 문자를 보내면 낭비를 하게 된다. 따라서 이런것들을 BufferedReader로 감싼다. 따라서 BufferedReader를 사용하면 가변길이 문자열을 받을 수 있다.
데이타를 받을때는 BufferedReader를 사용하고, 데이타를 쓸때는 BufferedWriter를 사용한다. 스프링에서는 우리가 이런것들을 직접 구현할 필요없이 어노테이션 @ResponseBody를 사용하게되면 BufferedWriter가 동장하게 된다. 그리고 @RequestBody를 사용하게되면 BufferedReader가 동작하게 된다.
스프링에서 어노테이션 @ResponseBody를 사용하면 Buffered Writer가 존재하게 된다.
스프링에서 어노테이션 @RequestBody를 사용하면 Buffered Reader가 존재하게 된다.
인프런 최주호 스프링부트 개념정리(이론) 강의노트정리
SpringBoot 프로젝트 생성 및 HelloWorld 실행 (0) | 2022.02.18 |
---|---|
스프링 탄생 배경 (0) | 2022.01.26 |
[Spring] 빌드 관리 도구 Maven vs Gradle (0) | 2021.03.11 |
[Java] WAS의 특정 경로에 있는 이미지 조회 (0) | 2020.07.14 |
[Java] GeoServer 프록시 서버 (0) | 2020.04.04 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.