목록백엔드/스프링 (25)
프로그래밍 끄적끄적
스프링 MVC에서는 /hello-basic 매핑에 있어서 /hello-basic url이든 /hello-basic/ url이든 같은 요청으로 매핑한다. @RequestMapping은 어느 HTTP 메서드든 호출됨 🍃 PathVariable (경로 변수) 1 2 3 4 5 6 @RequestMapping("/mapping/{userId}") public String mappingPath(@PathVariable("userId") String data) { log.info(" info userID={}", data); return "ok"; } Colored by Color Scripter cs line 1) {[경로변수명]} 형식으로 매핑 url을 작성 line 2) @PathVariable 애노테이션을 ..
org.slf4j의 Logger와 LoggerFactory 사용 1 private final Logger log = LoggerFactory.getLogger(getClass()); cs * lombok @Slf4j 으로 대체 가능 1. 로그 종류 1 2 3 4 5 log.trace("trace log={}", name); log.debug("debug log={}", name); log.info(" info log={}", name); log.warn(" warn log={}", name); log.error("error log={}", name); cs line 1) trace: 가장 낮은 단계의 로그 (로컬 PC에서 쓰는 용도..?) line 2) debug: 디버스 할 때 사용되는 정보 (개발 서..
1. 스프링 MVC가 View를 찾을 수 있도록 설정 resource > application.properties 파일에 하단의 설정 추가 spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp line 1) spring.mvc.view.prefix: spring mvc가 찾을 뷰 경로를 설정 line 2) spring.mvc.view.suffix: 뷰로 인식할 확장자를 설정 2. 스프링 MVC 적용하기 1) 폼 만들기 컨트롤러 1 2 3 4 5 6 7 8 @Controller public class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form"..
🌳 스프링 스코프 1. 싱글톤 ▪ 기본 스코프로, 스프링 컨테이너의 시작부터 종료까지 유지된다. ▪ 하나의 인스턴스만 생성되기 때문에, 언제든지 같은 인스턴스의 스프링 빈을 반환함을 보장한다. 2. 프로토타입 (@Scope("prototype")) ▪ 빈 생성과 의존관계 주입까지만 관리한다. ▪ 클라이언트가 요청하는 "시점에" 새로운 빈을 생성하고 초기화하여 반환한다. ▪ 따라서 요청할 때마다 새로 생성되기 때문에 서로 다른 인스턴스를 가진다. (getBean도 이에 해당함) ▪ 이는 각 클라이언트마다 필드값을 따로 관리할 수 있다는 말로 해석할 수 있음 ▪ 빈을 반환한 이후에는 프로토타입 빈을 관리하지 않는다. 따라서 종료 메서드도 호출되지 않으며, 클라이언트가 관리해야 한다. 3. 웹 관련 스코프 ▪..
🌳 빈 생명주기 스프링 빈을 생성할 때 객체 생성 -> 의존관계 주입 단계를 거친다. 이때, 객체만 생성되고 의존관계 주입이 완료되기 전까진 빈이 초기화 되었다고 말할 수 없다. (중요 정보는 누락된 상태이므로) 따라서 모든 의존관계 주입이 완료된 이후에 데이터를 사용해야 한다. 그런데, 의존관계 주입이 모두 완료되었다는 것을 어떻게 알까? 스프링은 의존관계 주입이 완료됐을 때와 스프링 컨테이너가 종료되기 직전에 콜백을 준다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료 🌳 생명주기 콜백 지원 방법 1. InitializingBean, DisposableBean 인터페이스 ▪ 해당 빈 객체에 InitializingBean..
🌳 종류 1. @ToString ▪ exclude="[필드명]" 을 사용하면 결과에서 제외시킬 수 있다. (양방향 관계시 무한 참조를 막음) 2. @Getter ▪ 클래스 앞에 사용하면 전체 필드들에 대해 getter를 만들어줌 ▪ 필드 앞에 사용하면 해당 필드에 대한 getter를 만들어줌 3. @Setter ▪ 변경 가능성이 열려있기 때문에 객체의 안정성이 보장받기 힘드므로 가급적 사용하지 말자! 4. @EqualsAndHashCode ▪ 클래스에 대한 equals 함수와 hashCode 함수를 자동으로 생성해준다. 5. @RequiredArgsConstructor ▪ final 키워드가 붙은 필드들로 구성된 생성자를 만들어 준다. * 요즘에는 생성자를 하나만 둬서 @Autowired를 사용하지 않고..
🌳 자동주입 누락 옵션 1. @Autowired(required=false): 자동 주입할 대상이 없으면 메서드가 호출되지 않는다. 2. org.springframework.lang.@Nullable: 자동 주입할 대상이 없으면 null이 입력된다. 3. Optional: 자동 주입할 대상이 없으면 Optional.empty 가 입력된다. 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 public class AutowiredTest { @Test void AutowiredOption() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.cla..
🌳 의존관계 주입 방법 ▪ 생성자 주입 ▪ 수정자 주입 (Setter 주입) ▪ 필드 주입 ▪ 일반 메서드 주입 🌳 생성자 주입 생성자를 통해 의존관계를 주입한다. (해당 객체가 빈에 등록될 때 생성자를 호출하며, 이 때 필요한 객체들이 주입된다.) 🍃 특징 ▪ 생성자 호출시점에 딱 한 번만 호출되는 것이 보장된다. (반대로, setter 주입을 사용하면 실수로 데이터를 변경할 수 있기 때문에 위험하다. 가급적 데이터는 열린 환경을 제공하지 않아야 한다.) ▪ 불변, 필수 의존관계에 사용한다. ▪ 생성자가 하나만 있다면 @Autowired 어노테이션을 사용하지 않아도 자동으로 주입한다. 🍃 생성자 주입을 선택해야 하는 이유 1) 불변하다. 대부분의 의존관계 주입은 종료시점까지 의존관계를 변경할 일이 없다..