본문 바로가기

개발/Spring

(25)
[Spring] @ResponseBody란 원래 그냥 리턴을 하면, 즉 @ResponseBody가 없다면 viewResolver한테 던져서 해당 뷰를 리턴해준다. 하지만 @ResponseBody가 있기 때문에 HTTP응답에 그대로 이 데이터를 넘기려고 한다. 여기서 문자면 그냥 문자를 넘겨주겠지만, 객체를 넘겨줘야 하기 때문에 JSON방식으로 데이터를 만들어서 HTTP응답에 반환을 한다. @ResponseBody가 있다면 HTTPMessageConverter가 동작을 한다. 만약 그냥 문자열을 반환해야 한다면 StringConverter가 동작하지만, 객체일 경우 JsonConverter가 동작한다. JsonConverter은 객체를 JSON스타일로 바꿔서 반환해준다.
Spring 예제 실행 과정 localhost:8080/hello-mvc?name=Spring 을 접속할 때의 과정을 설명하겠다. 우선, 웹 브라우저가 내장 톰켓 서버에 localhost:8080/hello-mvc?name=Spring을 요청한다. 내장 톰켓 서버는 스프링에 요청한다. 스프링은 우선 컨트롤러에 hello-mvc가 있는지 찾아본다.(없다면 resource를 뒤져서 찾아낸다.) 해당 예시에는 컨트롤러에 hello-mvc가 있으니 찾았다. 파라미터로 변수 name에 받아온 값 "name"을 넣었다. model.addAttribute를 통해 model의 name에 변수 name을 넣었다. return hello-template를 통해 해당 html에 name에 변수 name값을 넣는다. return을 할 때, 컨트롤러가 v..
터미널로 Spring실행하는 방법 cmd로 실행하는 법 1. git bash로 프로젝트 파일에 가서, ./gradlew build를 한다. 2. gradle -> lib에 가서 ls -arlth를 친다. 그럼 뒤에 나오는 프로젝트명~을 복사한다. 3. java -jar 붙여넣기(복사한거)
[Spring] 인프런 8차 Event IoC컨테이너의 ApplicationEvent 스프링 4.2부터는 상속받지 않아도 쓸 수 있다. 사용방법 그 이전에는 ApplicationEvent라는 인터페이스를 상속받아야 사용 가능하다. 하지만 4.2부터는 상속받지 않아도 된다. MyEvent라는 클래스를 만든다. 그리고 이 이벤트를 핸들러 할 MyEventHandelr를 만든다. 이 MyEventHandler는 빈에는 등록을 해줘야 한다. @Component로 빈에 등록해 주고, 이벤트 함수는 @EventListener을 선언해준다. 그리고 이걸 테스트하기 위해 AppRunner라는 클래스가 ApplicationRunner를 상속해서 @Autowired ApplicationEventPublisher publishEvent;를 선언한 후, publi..
[Spring] 인프런 3차 강의 @Autowired로 의존성 주입을 했지만, 주입할 수 있는 대상이 여러개가 있을 때? 가정 Service와 Repository가 있다고 가정하자. Repository에 빈 등록을 하지 않고, Service에서 Autowired를 통해 bookRepository에 의존성 주입을 시도했다고 하자. 위와 같은 상황은 에러가 발생한다. @Autowired를 사용하지 않았다면 오류가 없었겠지만, 의존성 주입을 하려는데 빈에 등록이 되어있지 않으니 오류가 발생하는 것이다. 만약 위와 같은 상황을 조금 변경하고 싶다면, @Autowired(required = false)를 한다면 의존성을 옵셔널로 설정해 꼭 필요하지 않다는 것을 설정한다. 구현체가 두개가 있고, BookRepository bookRepository..
[Spring] 인프런 2차 강의 스프링 IoC는 Bean설정 파일이 있어야 한다. Bean파일을 읽어 IoC에서 객체들을 관리했었기 때문이다. 맨 처음 Spring에서는 이러한 Bean을 만들어서 일일이 등록했어야 했다. (하지만 이렇게 해서라도 IoC/DI를 사용하는 것이 굉장히 효율적이 였던 것 같다.) xml을 자바 파일로 만들었었다. -> 의존성 주입을 직접하지 않고, @Autowired로 했다. -> 자바에 등록된 빈도 없앴다.(ComponentScan~을 활용해 빈 등록도 알아서 해준다.) 현재는 스프링 2.5부터 가능한 scan을 활용한다. bean에 context:component-scan~ 을 선언해주면 어노테이션들을 스캐닝해서 등록해준다. 그런데 이 방법 말고 Bean설정 파일을 xml말고 자바로 만들 수 없을까 해서..
IoC 컨테이너란? IoC (Inversion of Control, 제어의 역전)는 무엇일까? 이름에서 알려주는 뉘양스를 최대한 사용하여 표현해보겠다. IoC 제어의 역전이란, 개발자가 갖고 있던 제어권을 놓는다는 의미와 비슷하다. 우리는 Servlet과 같은 방식을 활용하여 코드를 짠다. 그 속에서는 객체를 생성하고 활용하는 등의 행위가 포함되어 있다. 코드를 짤 때는 그런 행위의 제어권이 개발자에게 있지만, 그 코드를 실행하거나 배포를 한 이후의 상황에서는 개발자에게 제어권한이 없다. 이러한 상황에서 제어권을 컨테이너가 갖게 된다. 컨테이너는 객체의 생성, 관리 등을 하게 되며 IoC가 발생하게 되는 것이다. IoC/DI란? 위의 설명을 잘 이해했다면, IoC와 DI가 같이 쓰이는 이유도 대충 감이 올 것이다. 컨테이너..
의존성 2 in Spring 스프링에서의 의존성 주입 지난 글에서 보았듯이 Spring에서는 Bean을 활용하여 의존성을 주입했다. 예를 다시 한번 되짚어 보자. xml에서 bean태그에 KoreaTire, AmericaTire클래스 이름과 id로 명시를 하였었다. 그 후 public class Driver{ ApplicationContext context = new FileSystemXmlApplicationContext("xml경로"); Car car = new Car(); Tire tire = (Tire) context.getBean("tire"); car.setTire(tire); } 이런 식으로 의존성을 주입했었다. 여기서 xml의 id = Car에 property를 설정하여 코드로 기본 tire의 값을 초기화 해줄 수 있..