Backend/Spring
![[Spring] Bean 순환 참조](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkORvN%2FbtsG0FzE3jj%2FqBNCjpJEhO2vgybFnIjoRK%2Fimg.png)
[Spring] Bean 순환 참조
먼저 순환 참조의 정의에 대해 알아보자. 위키 백과에서의 순환 참조 정의는 다음과 같다.- 참조하는 대상이 서로 물려 있어서 참조할 수 없게 되는 현상 위에서 설명한 순환 참조라는 것이 스프링에서도 일어날 수 있을까?: 물론이다. 두 개 이상의 자바 클래스가 서로의 Bean을 주입 받을 때 순환 참조 문제가 발생할 수 있다. 클래스 A -> 클래스 B, 클래스 B -> 클래스 C, 클래스 C -> 클래스 A 순으로 참조할 경우,클래스 A에 대한 Bean을 만들 때, 클래스 A는 클래스 B를 참조하므로, 클래스 B의 Bean을 먼저 생성하고,클래스 B는 클래스 C를 참조하기에, 클래스 C의 Bean을 먼저 생성하고, 클래스 C의 Bean을 생성하기 전에,클래스 C는 클래스 A를 생성하므로 먼저 클래스..
스프링에서 로그 찍는 법
스프링에서 로그 찍는 법은 총 두 가지가 있다. Log4j or Logback 와 같은 로깅 프레임워크를 이용하거나 System.out.println() 을 이용하여 로그를 찍을 수 있다. 1. 로깅 프레임워크 이용하기(Log4j) 이클립스에서 스프링 레거시 프로젝트를 생성할 경우, 자동으로 src/main/resources 경로에 log4j.xml 파일이 생성된다. log4j.xml 파일 내용은 아래와 같다. : XML 버전 및 인코딩 정보 : log4j.dtd 파일 위치 지정 : log4j 설정 정보가 포함된 XML 파일 : appender - 로그를 출력할 대상 및 출력 방식 ㄴ ConsoleAppender - 콘솔에다가 로그 출력 : 출력 대상 지정. value가 System.out이므로 콘솔 출..
데이터 전송 어노테이션 - @PathVariable, @ResponseBody, @RequestParam
@PathVariable - 한번에 하나의 요청만 가능 - value : 파라미터 값 - 템플릿 변수를 이용하여 값을 받을 수 있음 ex) "/admin/700"으로 주소를 보냈을 경우, 컨트롤러에서 매핑이 "/admin/{size}"이고 (@PathVariable(value="size") int size) 라고 지정하면 size라는 매개변수는 700이라는 값을 가지게 된다. @RequestParam - defaultValue : 기본값 지정(전달받은 값이 없을때 사용) - name : 파라미터 이름 - value : 파라미터 값 - required : true일 경우, 필수값(값이 안 넘어올 경우, 에러 발생) : false일 경우(기본 설정), 필수값 아님 @RequestBody - @RequestB..
스프링 XML 정리 - 컨테이너(applicationContext)
태그 - 객체 생성 태그 ex) - id : 객체 이름, 식별자 - class : 객체를 생성할 클래스 태그 - 생성자 의존 주입 ex) 태그 - 메소드 의존 주입 ex) - 이미 등록된 빈에만 어노테이션 활성화 - @Autowired, @Qualifier만 해결 가능 - xml에 bean을 반드시 선언 - 빈의 등록 여부와 관계 없음. - 스프링이 빈 스캔을 하여 어노테이션 활성화 - 모든 클래스를 스캔하고 빈 작성 (@Autowired, @Qualifier 뿐만 아니라 @Component, @Controller, @Service, @Repository) - base-package를 통해 스프링이 스캔할 패키지 위치를 지정 필요 둘의 공통점 - 의존성 주입(DI) - 스프링 IoC의 중요한 개념 - 의..
스프링 어노테이션 정리 - AOP 구현, 시점 기반
AOP 구현 어노테이션 @Aspect - AOP구현(Aspect Oriented Programming) - 관점 지향 프로그래밍 - 공통으로 적용할 기능을 구현 - XML 설정에서 인식할 수 있도록 태그 필요 시점 기반 어노테이션 @Before - Test 메소드가 실행되기전 항상 실행 @AfterReturning - 메소드가 에러 없이 성공적으로 실행된 이후의 시점 @AfterThrowing - 메소드가 에러 발생해 예외를 던지는 시점 @After - Test 메소드가 실행된 후 항상 실행 (try catch문에 finally 구문과 흡사) @Around - 메소드의 시작부터 끝까지 전반적인 시점 @PostConstruct - 생성자 호출 후 바로 다음에 호출 - 의존성 주입 후 초기화를 수행하는 메서..
스프링 어노테이션 정리 - 환경설정, 값 주입
환경설정 어노테이션 @Configuration - 설정파일을 만들기 위한 애노테이션 - Bean을 등록하기 위한 애노테이션 @PropertySource - @Configuration이 붙은 클래스에만 사용 가능 - 어노테이션에 프로퍼티 파일의 위치를 넣으면, 객체에 프로퍼티 값이 자동 주입 @PropertySource("classpath:com/config/user3/main.properties") // 프로퍼티 파일 읽기 값 주입 어노테이션 @Value - 설정파일(.properties, .yml)에 설정한 내용을 주입 - 생성자 파라미터에 문자열 또는 기본 자료형 값 설정 - main.properties 파일에 join.name, join.tel, join.age에 값을 정의했다면, 아래의 예시와 같..
스프링 핵심 개념 - IoC, DI, Model
IoC(Inversion of Control) - 제어의 역전 - 제어의 흐름을 변경 - 메소드나 객체의 호출작업을 외부에서 결정되는 것을 의미 - IoC의 효과 : 객체 간의 결합도 줄이고 유연한 코드 작성 가능, 가독성 및 코드 중복 방지, 편리한 유지보수 DI(Dependency Injection) - 의존성 주입 - 스프링만의 차별화된 의존 관계 주입 기능 - 객체를 외부에서 생성후 주입시켜 주는 방식 - DI의 효과 : 모듈간의 결합도 ↓ , 유연성 ↑ Model 객체 - Controller에서 생성된 데이터를 담아 View로 전달할 때 사용하는 객체 - Servlet의 request.setAttribute()와 비슷한 역할 - addAttribute("key", "value") 메서드를 이용하..