Backend
[Spring] 다양한 의존관계 주입 방법
의존관계 주입 4가지 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 동작함 생성자 주입 생성자를 통해서 의존관계를 주입하는 방법 생성자 호출시점에 딱 1번만 호출되는 것이 보장됨 불변, 필수 의존관계에 사용 생성자가 1개만 존재할 경우, @Autowired를 생략해도 자동 주입됨 (스프링 빈에만 해당) @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // 생략..
[Spring] 스프링 컨테이너와 스프링 빈
스프링 컨테이너 ApplicationContext를 스프링 컨테이너라 함 ApplicationContext는 인터페이스 -> 스프링 컨테이너는 XML 기반으로 만들 수 있고 어노테이션 기반의 자바 설정 클래스로 만들 수 있음 AppConfig가 어노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것 @Configuration 어노테이션이 붙은 클래스를 설정 정보로 사용함 이때 @Bean 어노테이션을 적용한 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록함 스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용 위의 예제에서 MemberService 빈을 찾을 때 메서드 명 memberService를 통해서 찾음 메서드 명으로 빈 이름을 사용하지만 @Bean(name=..
[Spring] HTTP 요청 파라미터 사용 - @RequestParam과 @ModelAttribue
로그 레벨 설정 application.properties # 전체 로그 레벨 설정(기본 info) logging.level.root=info #hello.springmvc 패키지와 그 하위 로그 레벨 설정 logging.level.hello.springmvc=debug @RequestParam @RequestParam: 파라미터 이름으로 바인딩 @RequestParam의 name(value) 속성이 파라미터 이름으로 사용 @RequestParam("username") String memberName String memberName = request.getParameter("username") 파라미터 이름이 변수 이름과 같으면 name 속성 생략 가능 String, int, Integer 등의 단순 타입..
[Spring] MVC 패턴
MVC 패턴의 등장 역할 하나의 서블릿이나 JSP만으로 비즈니스 로직 + 뷰 렌더링까지 처리 -> 너무 많은 역할을 담당함 -> 유지보수가 어려워짐 변경의 라이프 사이클 UI 수정과 비즈니스 로직의 변경의 라이프 사이클이 다름 기능 특화 JSP와 같은 뷰 템플릿은 화면을 렌더링하는데 최적화 -> 해당 부분의 업무만 담당하는 것이 효과적 Model View Controller 하나의 서블릿이나 JSP로 처리 -> 컨트롤러(Controller) + 뷰(View)의 영역으로 서로 역할을 나눔 컨트롤러: HTTP 요청을 받아서 파라미터 검증, 비즈니스 로직 실행, 뷰에 전달할 결과 데이터 조회 후 모델에 세팅 모델: 뷰에 출력할 데이터를 담아둠 뷰: 모델에 담겨있는 데이터를 사용해 화면을 그림 SpringMVC..
[Spring] MVC 패턴의 등장
MVC 패턴의 등장을 알아보기 위해 먼저 서블릿과 JSP로 회원 관리 웹 애플리케이션을 구현해보자. 회원관리 웹 애플리케이션 회원정보 이름: username 나이: age 기능 요구사항 회원 저장 회원 목록 조회 회원 도메인 모델 package hello.servlet.domain.member; import lombok.Getter; import lombok.Setter; @Getter @Setter public class Member { private Long id; private String username; private int age; public Member() { } public Member(String username, int age) { this.username = username; thi..
[Spring] HttpServletRequest와 HttpServletResponse 다루기
HttpServletRequest 서블릿이 HTTP 요청 메시지를 파싱해 HttpServletRequest 객체에 담아 제공 HTTP 요청 메시지 POST /save HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded username=kim&age=20 START LINE HTTP 메소드, URL, 쿼리 스트링, 스키마, 프로토콜 헤더 헤더 정보 조회 바디 form 파라미터 형식 조회 message body 데이터 직접 조회 임시 저장소 HTTP 요청의 시작 - 끝 동안 유지되는 임시 저장소 저장 : request.setAttribute(name, value) 조회 : request.getAttribute(name) ..
[Spring] Spring Boot에서 Servlet 사용하기
스프링 부트 환경에서 서블릿을 등록하고 사용해보자 스프링 부트는 톰캣 서버를 내장하고 있음 -> 별도의 톰캣 서버 설치 없이 서블릿 코드 실행이 가능함 환경 구성 Gradle Project Spring Boot 2.6.2 build.gradle plugins { id 'org.springframework.boot' version '2.6.2' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotatio..