티스토리 뷰

개발일기

20190227

Jinhyy 2019. 2. 27. 17:34

1. @Autowired, @Resource 차이

--> Resource("빈이름") 이렇게 빈의 이름 기반으로 검색하여 빈 주입한다.

자동으로 등록되는 빈의 이름은 클래스의 첫문자가 소문자로 바뀐 이름


2. @Component

컴포넌트 어노테이션이 선언된 클래스의 빈들은 자동 등록된다.

즉, 빈의 자동등록을 위하여 쓰는 어노테이션.


3. 빈들 끼리 의존성, 참조관계가 있을 때, 생성순서에 따른 문제

A라는 빈을 만들기 위하여, B라는 빈을 만들어야 한다.

하지만, 스프링 부트 특성상 위의 패키지부터 아래로 쭉 훑기 떄문에

B 빈은 A보다 나중에 만들어진다(알파벳순서)

그러므로, 그냥 컴파일 할시에는 B빈이 만들어 지지않았으므로 에러가난다.

이런 참조관계와 그에따른 생성순서문제를 해결하려면 A빈에 참조관계를 나타내는 

@DependsOn(vaue={"B빈의이름"})을 사용하여 생성순서 문제를 해결할 수 있지만


BUT


이렇게 일일이 참조관계를 나타내는 건 너무나도 코드상으로 더럽고 어지러워 지므로

@PostConstruct 어노테이션을 사용하여, 해당 빈의 모든 구성요소가

완벽히 들어온 후, 빈을 실행하게 하면 의존성을 일일이 부여하지 않고도

생성순서 문제를 해결할 수 있는 가장 완벽한 방법이다.



4. SOAP(Simple Object Access Protocol)

http를 통하여 XML 기반 메시지를 교환하는 프로토콜

장점]

1) http 기반으로 동작하여 프록시,방화벽 제한에 걸리지 않는다.

2) https, smtp 에서도 동작한다.

단점]

데이터가 xml 포맷형태라서 다른 기술보다 상대적으로 전송속도가 느리다.


5. Bean을 선언하는 방법이 Component, Repository, Service 등 여러개인 이유?

-> 각 빈마다 성격이 틀려서 발생시킬 수 있는 에러 핸들링 처리의 간편함과 가독성


6. @CrossOrigin

-> Cors보안 문제로 브라우저에서 현재 origin에서 다른 곳으로의 

ajax 리소스 요청을 방지하는 것이다.

ex) @CrossOrigin(origins = "http://jeong-pro.tistory.com", maxAge = 3600)

-> 기본 도메인이 http://jeong-pro.tistory.com 인 곳에서 온 ajax요청만 받아주겠다.


7. @ModelAttribute

view에서 전달해주는 파라미터를 클래스(VO/DTO)의 멤버 변수로 

binding 해주는 애노테이션

바인딩 기준은 <input name="id" /> 처럼 어떤 태그의 name값이 

해당 클래스의 멤버 변수명과 일치해야하고 set메서드명도 일치해야한다.


class Person{

String id;

public void setId(String id){ this.id = id;}


}


8. @Valid

- 유효성 검증이 필요한 객체임을 지정한다.


@InitBinder

- @Valid 애노테이션으로 유효성 검증이 필요하다고 한 객체를 

가져오기전에 수행해야할 메서드를 지정한다.


9. @RestController vs @Controller

@RestController :  응답을 json/xml 데이터 형식으로 리턴한다. view resolver를 무시한다.

@Controller : 직접 뷰를 리턴하거나, @ReponseBody로 데이터 형식으로 응답.

'개발일기' 카테고리의 다른 글

20190308  (0) 2019.03.08
20190306  (0) 2019.03.06
20190305  (0) 2019.03.05
20190304  (0) 2019.03.04
20190228  (0) 2019.02.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함