본문 바로가기

Spring/Spring-detail47

@Bean 과 @Component 비교 스프링 MVC 에서 사용하는 @Controller , @Service , @Repository 등 빈으로 등록하는 방법을 계속 써왔으나, 스프링시큐리티를 공부하면서 @Configuration 과 @Bean , @Component를 사용하면서 어떤 상황에 구분해 사용해야 하나 궁금했다. 미리 알아보면 아래와 같다. Bean Component 메소드에 적용 클래스에 적용 개발자가 컨트롤이 불가능한 외부 라이브러리 사용시 개발자가 직접 컨트롤이 가능한 내부 클래스에 사용 클래스 자체를 빈으로 등록하고 싶을 때 @Configuration 안에서 @Bean으로 등록한 메서드만 유연하게 등록하고 싶을 때 스프링은 개발의 제어권이 스프링 컨테이너(Ioc 컨테이너)에 있다. 제어권이 개발자가 아닌 스프링에 있는것을 I.. 2022. 10. 24.
빈을 등록하기 위한 방법 @Configuraion, @Bean, @Component Spring IOC 컨테이너가 관리하는 자바 객체를 빈(Bean) 이라고 부른다. 일반적인 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 제어하고,객체를 직접 생성하고 조작을 했다. Class 를 생성하고 new 를 입력해서 원하는 객체를 직접 생성 후 사용했다. 즉 , 모든 작업자가 제어하는 구조로 흘러갔다. IOC(제어의역전) 가 적용될 경우, 객체의 생성을 특별한 주체에 맡긴다. 이러한 경우, 사용자는 객체를 직접 생성하지 않으며, 사용자가 제어권을 다른 주체에 넘긴다. new 를 이용하여 생성된 객체가 아니라, Spring에서 관리되는 자바 객체를 사용한다. Spring 에 의해 생성되고 관리되는 자바 객체를 Bean 이라고 한다. Bean 은 싱글톤으로 관리된다 @Configuration +.. 2022. 10. 14.
DispatchServlet(디스패처 서블릿) 에 대해 알아보자. DispatchServlet 의미 (Dispatch = 파견, 보내다) http 에서 들어온 모든 요청을 가장 앞단에서 받아 적합한 컨트롤러에 위임하는 프론트 컨트롤러이다. * 프론트 컨트롤러 : 서블릿 컨테이너의 제일 앞단에서 서버에 들어오는 클라이언트의 모든 요청을 받아 처리하는 컨트롤러 요청을 받아 어떤 controller 에게 위임을 할지 handlerMapping 을 통해 확인 후 HandlerAdapter를 통해 위임을 진행한다. Spring MVC 는 디스패처 서블릿이 등장함에 따라, web.xml 에서 각각 url 매핑을 등록하던 작업을 스킵하고 모든 요청을 핸들링하고 공통작업을 처리하면서 편리하게 이용이 가능해졌다. 모든 요청을 디스패처 서블릿이 받아 편리해진 것은 사실이다. 하지만, 이.. 2022. 10. 14.
@Controller 와 @RestController 의 원리 @Controller 해당 어노테이션의 목적은 Model 객체를 만들어 데이터를 담고 view를 반환하기 위함이다. 아래와 같은 과정으로 요청과 응답이 진행된다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller 클라이언트에서 uri 형식을 통해 요청을 보낸다. DisPathcherServlet 에서 해당 요청을 받아 HandlerMapping 을 통해 위임할 Controller를 찾는다. Controller 에서는 비즈니스 로직을 진행하여 데이터를 받는다. HandlerAdapter는 View Name을 받아 DispatcherServlet 에게 전달.. 2022. 10. 13.
@valid 를 사용해보자 (유효성 검사) https://josteady.tistory.com/683 유효성 검사(Validation) 유효성 검사 / 데이터 검증 (Validation) - 서비스의 비즈니스 로직이 옳바르게 동작하기 위해 사용되는 데이터에 대한 사점 검증하는 작업 - 데이터의 검증은 여러 계층에서 발생 - 데이터에 대 josteady.tistory.com 해당 포스팅에 이어 게시판관련 프로젝트를 만들면서 알게된점과 사용한 코드에 관해 정리하려고 한다. 아직 유효성검증 관련해서 궁금하고 미흡한 부분이 많아, 게시판(post) 관련해서 간단하게 작성했다. @Getter @Setter @NoArgsConstructor public class CreatePostDto { @NotBlank(message = "제목은 필수 값입니다.") .. 2022. 10. 13.
Swagger 적용하기 - REST API 명세를 문서화 하는 방법 Swagger - 서버로 요청되는 API 리스트를 HTML 화면으로 문서화 - 서버가 가동되면서 @RestController 를 읽어 API를 분석하여 HTML 문서를 작성한다. API 를 개발하면 명세를 관리해야 한다. 명세 란 , 아래의 내용을 정리한 자료이다. 1. 해당 API가 어떤 로직을 수행하는지 설명 2. 이 로직을 수행하기 위해 어떤 값을 요청하는지 3. 이에 따른 응답값으로는 무엇을 받을 수 있는지 먼저 의존성을 주입해준다. implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' implementation group: 'io.springfox', name: 'springfox-swagger2'.. 2022. 10. 8.
Integer 와 int 차이 게시판(회원) 관련 코드를 작성하고 테스트 과정 중에 궁금증이 생겨 정리하게 되었다. 먼저 정리한 표이다. 타입 종류 초기화 사이즈 변환 int Primitive 자료형 0으로 초기화 4 byte int -> Integer (Boxing) Integer Wrapper 클래스 null 로 초기화 20 byte Integer -> int (UnBoxing) Member.class ... @Column(nullable = false, length = 30) private int age; //나이 ... TestCode 에서 분명 런타임에러가 나야하는데.. 왜 정상작동이 되지 라는 의문이 들었다. 그래서 log를 찍어보았다. //회원저장시 나이가 없으면 오류 @Test void 오류_회원저장시_나이_없음() {.. 2022. 10. 5.
@Builder 빌더패턴 @Builder (빌더패턴) 을 왜 사용하는지, 어떻게 사용하는지 알아보려고 한다. 아주 간단하게 정리했으니, 좀 더 깊이 알고싶으면 다른 블로그를 참고하면 좋을 것 같다. @Builder 는 Lombok 라이브러리를 설치해야만 사용 할 수 있다. 그냥 생성자를 사용하면 될것 같은데 굳이 왜 @Builder를 사용할까?? 예를 들어 어느 개발자가 매개변수의 순서를 바꿀 수 있다. 아래 예를보자 생성자의 매개변수 순서는 title, content 이다. 생성자를 사용하는 순서도 title:"제목입니다" , content:"내용입니다" 로 알맞게 들어갔다. 만약 생성자 매개변수의 순서를 바꾸면 어떻게될까?? 생성자 매개변수 title 과 content 의 순서를 바꾸었다. 생성자를 사용하는 곳에서는 그대로 .. 2022. 10. 1.
HTTP 메서드 종류 HTTP 는 요청 메서드를 정의하여, 주어진 리소스에 수행하기를 원하는 행동을 나타낸다. 종류 기능 GET 특정 리소스의 표시를 요청. 오직 데이터를 조회(받기)만 한다. POST 특정 리소스에 엔티티를 제출할 때 사용(등록) PUT 목적 리소스 모든 현재 표시를 변경한다. PATCH 리소스의 부분만 수정한다. DELETE 특정 리소스를 삭제 HEAD GET 메서드와 동일한 응답을 요구하지만, 응답 본문을 포함하지 않는다 OPTIONS 해당 메서드를 통해 시스템에서 지원되는 메서드 종류를 확인할 수 있다. CONNECT 웹 서버에 프락시 기능을 요청할 때 사용 TRACE 목적 리소스의 경로를 따라 메시지 테스트를 한다.(루프백) 멱등성 : 한번 요청하든 여러번 요청하든 그 결과가 같다. PUT으로 예를 .. 2022. 10. 1.