본문 바로가기

백엔드 개발/SpringMVC

@Configuration에 대하여 @Configuration은 해당 클래스가 설정에 관한 클래스임을 Spring Container에게 알리고, 그것을 Bean으로 등록하도록 하는 어노테이션이다. 어? 그러면 해당 클래스가 설정 파일임을 가시적으로 알리는 일 외에는 @Bean과 똑같은 것인가? 물론 아니다. 설정 파일의 경우, 해당 설정의 통일성을 위해서 하나만 생성하고, 프로젝트 내에서 계속 그 내용을 재활용하며 써야한다. 이에 상응하여 @Configuration이란 어노테이션은 클래스를 Bean으로 등록하고 해당 Bean 객체를 싱글톤이 되도록 설정해준다. 더보기
Rest-Template란 무엇인가 스프링에서 제공하는 HTTP Client REST API 호출에 필요한 함수를 제공하는 클래스이다. HTTP Client Rest API란? 먼저 웹이 어떻게 돌아가는지 살펴봐야한다. 웹은 클라이언트와 서버로 나뉜다. 클라이언트 부분은 사용자에게 필요한 정보를 서버에게 요청하고, 서버는 그에 맞는 데이터를 클라이언트에게 제공한다. 해당 과정에서 클라이언트가 서버에게 원하는 정보를 요청하는 부분을 HTTP Client REST API라고 한다. 우리가 사용하려는 SPRING은 백엔드 프레임워크로 서버의 역할을 담당하는 경우가 많지만, 때에 따라서 외부 API에게 데이터를 요청해야하는 클라이언트의 역할을 해야할 수도 있다. 원래 JAVA에서는 URLConnect나 HTTPClient 같은 클래스를 사용하여 .. 더보기
Spring Di 활용하기 - 이론 (1) Beans가 무엇인지 알아본다. Application Context가 무엇인지 어떻게 돌아가는지 그 원리, 종류에 대해서도 알아본다. 1. Beans란? (1) Beans의 역사 처음에 Java의 개발진인 SUNS에서 JavaBeans를 발표했다. JavaBeans는 재사용이 가능한 컴포넌트를 말한다. Beans는 Client 측면 (Front-end), 서버 측면 (Back-end) 각각 나뉘어서 쓰였다. 원래 개발진들은 Beans가 Client GUI에서 많이 사용되길 바랬다. 예를 들어 검색창을 누가 만들어 놓으면 누군가 그것을 재사용하도록 하는 것이다. 근데 Clinet GUI 파트에서의 Beans는 내용이 너무 복잡해서, 사람들이 아무도 쓰지 않아 망했다. 되려 서버 측면에서 Beans가 각광받.. 더보기
DI 활용하기 - 실습 0. 지금까지 한 것들 지금까지는 DI라는 컴퓨터 본체의 내부를 뜯어 봤다. Main1은 Di의 개념: 외부에서 객체를 생성해서 소스코드 내부로 주입한다는 게 어떤 의미인지 알아보았다. Config.txt라는 문서에 객체이름 = "해당 객체 구현하는 클래스의 경로주소" 로 값들을 저장해놓는다. 그러면 Main1 내부의 함수가 문서 내용을 받아와서, 경로주소를 ReflectionApi를 이용해 메타데이터로 진짜 객체를 만들어서 반환한다. 우리는 new 선언 없이 해당 매소드만을 이용해 객체 생성이 가능해졌다. Main2는 객체 저장소라는 개념을 소개 했고 그것이 어떻게 돌아가는지 로직을 설명했다. 객체 저장소는 Config.txt의 내용을 Map 형태로 일단 받아온다. 그러면 Key는 객체이름, Value.. 더보기
Spring Di (클래스 안의 인스턴스 변수가 객체일 때 자동으로 연결) 저번 시간에 배웠던 내용은 (main2.java)클래스의 경로주소가 들어가 있던 외부 저장 파일 (.porperties)에서 Key= 객체이름, Value= 클래스의 경로주소로 값 뽑아내서 객체 저장소란 map에 저장했다. 해당 map에서 다시 value의 경로주소를 통해 진짜 객체를 만들어 내서 value 값들을 갱신 했다. 결국 map은 (K(객체이름), V(객체))가 되어서 사용자가 어떤 객체를 선언하려하면, new를 이용해 동적할당 하지 않고 map에서 찾아 꺼내 썼다. 그다음 main3.java에서 배운 내용은 컴포넌트 어노테이션을 이용하는 것이였다. 먼저 우리가 사용할 클래스들에는 @Component를 붙인다. 그리고 doComponentScan이라는 함수를 만든다. 해당 함수는 패키지 내의 .. 더보기
DI 흉내내기(2) 저번 시간에 최종적으로 한 것은 DI를 흉내내어 변경에 유리한 코드를 만드는 것이었다. DI는 의존성 주입으로, 어떤 객체를 소스코드 내부에서 선언하는 것이 아니라, 외부에서 객체를 생성한 후 소스코드 내부로 주입하는 것을 의미한다. 저번 포스팅에서는 DI를 흉내내기 위하여 객체 생성 기능을 하는 매소드를 이용했다. 해당 매소드에 인수로 보낸 값이 properties의 Key 값으로 있다면, 매소드는 해당 Key에 대응되는 Value (전체이름 = 경로주소.클래스이름)를 이용하여 Class class 객체를 만들고, 그 Class class 객체를 이용하여 실제 객체를 만들어 반환 했다. Properties는 map처럼 형식을 띄고 있으나, K,V에 오직 String 값만 가능했다. 이번에는 객체 컨테이.. 더보기
DI 흉내내기 DI란 Dependency Injection으로서 의존성 주입을 뜻한다. 이는 어떤 클래스의 객체를 new 연산자를 통해 소스코드 내부에서 만드는 것이 아니라, 해당 클래스의 객체를 외부에서 만들어서 소스코드 내부로 주입 시키는 것을 말한다. 이렇게 하는 이유는 변경에 유리한 코드를 만들어, 개발자가 할 수 있는 실수를 줄이고, test 횟수도 줄이기 위해서 이다. 그럼 변경에 유리한 코드라는 것이 무엇인지 알아보고, 이를 어떻게 표현해야하는지 알아보자. 0. 가정 class Car{} class SportsCar extends Car {} class Truck extends Car {} SportsCar car = new SportsCar (); // (바꾸려는 것) Truck car = new Tru.. 더보기
Intellij 단축기 모음집 (계속 추가) alt + home 네비게이터로 가는 키 shift * 2 모두 찾는 돋보기 어디에 포커스가 있든 ESC 누르면 Editor로 돌아옴. ctrl shift A 바로 액션 뭐 있는지 찾기 ctrl tab 위에서 밑으로 // ctrl shift tab 밑에서 위로 최근에 읽거나 편집한 파일들의 목록 보기 > Ctrl + E ctrl shift E > 파일 보거나 편집한 이력이 쭉 나옴. ctr alt left right 누르면 left 전에 편집한 곳으로 감. right 뒤에서 다시 앞으로 옴 열려있는 탭들 간의 이동 alt 누르고 오른쪽 왼쪽 ctrl + / 쭉 누르면 밑으로 쭉 내려감. ctrl shift / 여러줄 주석 ctrl f 원하는 말 찾기 엔터 내려가기 shift 엔터 올라가기 ctrl + R.. 더보기