BeanFactory vs. ApplicationContextApplicationContext는 BeanFactory의 기능 (Bean 관리 기능)을 상속 받음ApplicationContext는 추가로 편리한 부가 기능을 제공BeanFactory나 ApplicationContext를 Spring Container라 함ApplicationContext 부가 기능메시지소스를 활용한 국제화 기능예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력환경변수로컬, 개발, 운영등을 구분해서 처리애플리케이션 이벤트이벤트를 발행하고 구독하는 모델을 편리하게 지원편리한 리소스 조회파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회다양한 설정 형식Annotation 기반 자바 코드 설정 사용// Sp..
Spring Container 생성Spring Container 생성new AnnotationConfigApplicationContext(AppConfig.class)로 Spring Container 생성구성 정보 지정 (AppConfig.class)Spring Bean 등록파라미터로 넘어온 설정 클래스 정보를 사용해서 Spring Bean을 등록Bean 이름은 메서드 이름을 사용Bean 이름을 직접 부여할 수 있음ex. @Bean(name="memberService")Bean 이름은 항상 다른 이름을 부여해야 함Spring Bean의 의존관계 설정Spring Container는 설정 정보를 참고해서 의존관계 주입(DI)Spring Bean 조회ApplicationContext applicationCon..
@Slf4j@RestControllerpublic class LogTestController { // @Slf4j을 쓰지 않을 경우 아래 코드 입력 // private final Logger log = LoggerFactory.getLogger(getClass()); @RequestMapping("/log-test") public String logTest() { String str = "log test"; log.trace("trace {}", str); // + 연산 사용하지 않기 (ex. log.trace("trace " + str)) log.debug("debug {}", str); log.info("info {}", str)..
자바는 JUnit 프레임워크로 테스트를 실행한다.src/test/java/group/name 하위 폴더에 테스트 클래스를 생성한다.import static org.assertj.core.api.Assertions.*;class TestName { // 보통 ...Test라는 이름으로 설정 @BeforeEach // 각 test가 시작하기 전 실행됨 public void beforeEach() { ... } @AfterEach // 각 test가 끝난 후 실행됨 public void afterEach() { ... } @Test // 테스트 코드 작성 @DisplayName("테스트 이름") // 테스트 이름 지정 public voi..
PRG 패턴이란 PRG(POST-Redirect-GET) 패턴은 웹 애플리케이션에서 사용자가 데이터를 제출한 후 중복 제출을 방지하기 위해 사용되는 디자인 패턴이다. 순서는 다음과 같다: POST: 사용자가 데이터를 제출하는 폼을 채우고 제출한다. 이때 POST 요청이 발생한다. Redirect: POST 요청을 받은 후, 서버에서 데이터를 처리하고 작업이 완료되었다는 메시지나 결과를 사용자에게 보여주어야 할 때, 서버는 클라이언트에게 새로운 URL로 Redirect를 보낸다. GET: 클라이언트(브라우저)는 서버에서 보낸 Redirect 명령을 받고, 새로운 URL에 대해 GET 요청을 보낸다. 이때 사용자에게 보여지는 페이지는 서버에서 보낸 Redirect 후의 새로운 URL에서 처리되는 페이지이다...
Request Mapping 매핑 종류 종류 @RequestMapping @GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping 기본 매핑 // @RequestMapping("/request-mapping") // @RequestMapping("/request-mapping", "/request-mapping2") // @RequestMapping(value = "/request-mapping", method = RequestMethod.GET)
전체 구조 스프링 MVC의 구조는 다음 그림과 같다. 그림에서 볼 수 있듯이 Front Controller 패턴 구조를 사용하고 있다. Front Controller 패턴에 대한 내용은 다음 글에 정리하였다. Front Controller 패턴 DispatcherServlet 위 그림의 front controller 역할을 DispatcherServlet 클래스가 맡고 있다. DispatcherServlet의 상속 관계는 다음과 같다. DispatcherServlet > FrameworkServlet > HttpServletBean > HttpServlet 이를 보면, DispatcherServlet은 결국 HttpServlet을 상속받으며, 서블릿으로 동작한다는 것을 알 수 있다. DispatcherS..
Front Controller Pattern 소개 Spring MVC는 Front Controller 패턴을 기반으로 확장된 형태이다. Front Controller 패턴을 이해한다면, Spring MVC 구조와 흐름을 이해할 수 있다. 전체적인 Front Controller 패턴의 구조는 다음과 같다. 여기서, front controller는 문지기 역할을 한다. 클라이언트가 HTTP 요청을 한다면 front controller가 각각의 handler(controller)을 호출하며, view를 렌더링하여 응답하는 역할을 한다. 이로 인해, handler에서는 servlet을 사용하지 않고 요청과 응답처리를 할 수 있다. 단계별로 각 구조를 하나씩 살펴보자. 1. 헨들러 매핑, 핸들러 어뎁터 초기화 서..
Controller @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); request.setAttribute("member", member); // model에 데이터 보관 String viewPath =..
기본 구성 @ServletComponentScan @SpringBootApplication public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } } @WebServlet(name = "testServlet", urlPatterns = "/test") public class TestServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletExce..
Spring Boot Starter스프링부트 프로젝트를 생성하기 위해 스프링 부트 스타터 페이지로 가서 프로젝트를 생성한다.스프링 부트 스타터로 이동하기프로젝트 정보세부 정보ProjectGradle - GroovyLanguageJavaSpring Boot3.x.xGroupgroupArtifactnameNamenamePackage namegroup.namePackagingWar (servlet, jsp를 사용할 경우) 또는 Jar (springboot, thymeleaf를 이용할 경우)Java17 또는 21DependenciesSpring Web, Lombok, ThymeleafGradle 설정Settings > Build, Execution, Deployment > Build Tools > GradleB..