spring boot 13

Springboot 동작 방식 및 분석하는 방법

개요 Spring Initialzr가 제공해 주는 프로젝트 템플릿 덕분에 개발자들은 손쉽게 스프링 부트 프로젝트 개발을 시작할 수 있습니다. 버튼 몇 번 클릭만 하면 개발을 바로 진행할 수 있기 때문에 편리하다는 장점이 있지만, 이로 인해 저를 포함해서 많은 개발자들이 스프링 부트의 내부 동작 과정 및 AutoConfiguration에 의해 추가된 빈들을 배우지 않는 단점이 있습니다. 따라서, 이번 게시글에서는 스프링 부트가 내부적으로 구성 정보를 어떻게 추가하는지 살펴보고 추가된 bean들에 대해 확인하는 방법을 간략하게 소개하겠습니다. 글을 읽기에 앞서 아래 게시글들을 참고하시면 이해가 더 잘 될 것 같습니다. https://jaimemin.tistory.com/2259 [Spring Boot] Au..

Spring 2023.03.15

[Spring Boot] AutoConfiguration

개요 스프링 부트의 Bean 구성 정보는 Component Scan에 의해서 등록되는 Bean과 AutoConfiguration에 의해 자동으로 등록되는 빈으로 구분됩니다. 이번 게시글에서는 일반적으로 자동으로 등록되는 빈과 함께 AutoConfiguration의 동작 메커니즘에 대해 작성해 보겠습니다. Bean의 역할과 구분 AutoConfiguration 동작 메커니즘에 대해 알아보기 전에 앞서 Bean의 정의와 함께 역할과 구분에 대해 알아야 합니다. Bean이란 스프링 컨테이너에서 생성되고 관리되는 자바 객체이며 모두 싱글톤으로 관리됩니다. Bean은 크게 3가지로 구분할 수 있는데 아래와 같습니다. Application Logic Bean Application Infrastructure Bean..

Spring 2023.03.06

[Spring Boot] 메타 애노테이션과 합성 애노테이션

개요 스프링 부트에는 annotation 관련 기능을 많이 제공하고 있는데 저 포함 많은 개발자가 동작 방식을 자세히 모르는 상태로 개발을 하고 있는 것 같습니다. 스프링에서 기본으로 제공하는 애노테이션 같은 경우 동작 원리를 모르는 상태로 사용해도 개발하는데 문제없지만 커스텀하게 애노테이션을 선언해야 할 경우 문제가 발생할 확률이 큽니다. 따라서 이번 게시글에서는 간략하게 스프링에서 제공하는 메타 애노테이션과 더불어 합성 애노테이션에 대해 알아보겠습니다. 메타 애노테이션(Meta-annotation) 메타 애노테이션은 애노테이션에 적용한 애노테이션을 의미합니다. 예를 들자면, @Controller 애노테이션이 부여된 클래스는 @Controller의 메타 애노테이션인 @Component가 직접 사용된 것..

Spring 2023.03.06

Spring 지원 없이 Servlet을 통해 Front Controller 구현

개요 앞서 작성한 Spring Boot 개요 게시글에서 스프링 부트는 스프링 애플리케이션 개발에 요구되는 Servlet Container의 설치, WAR 폴더 구조, web.xml, WAR 빌드, 컨테이너로 배치, 포트 바인딩, 클래스로더, 로깅 등과 같은 필요하지만 애플리케이션 개발의 핵심이 아닌 단순 반복 작업을 제거해 주는 개발 도구와 아키텍처를 지원한다고 언급했습니다. https://jaimemin.tistory.com/2254

Spring 2023.03.02

[Spring Boot] 메시지, 국제화 간단 정리

개요 HTML에 문구를 하드 코딩해버리면 기존 문구를 일괄적으로 변경해야 할 때 혹은 한글을 모르는 외국인들에게도 서비스를 제공하고 싶을 때 일일이 변경해야 하기 때문에 상당히 곤란한 상황에 직면하게 됩니다. 따라서, HTML에 하드코딩하는 대신 다양한 메시지를 한 곳에서 관리하는 메시지 기능을 익혀놓으면 실무에서 유용하게 사용할 수 있습니다. 메시지 기능 설정 메시지 기능을 사용하기 위해서는 MessageSource라는 스프링 빈을 등록해주면 되고 이는 인터페이스이기 때문에 구현체인 ResourceBundleMessageSource 빈을 등록해주면 됩니다. (스프링 부트에서는 자동으로 등록) @Bean public MessageSource messageSource() { ResourceBundleMes..

Spring 2021.07.10

PRG 패턴 (Post/Redirect/Get)

개요 PRG 패턴의 경우 실제 현업에서 자주 사용하므로 개념을 숙지할 필요성이 있습니다. 상황 설명 아래의 그림과 같이 회원 등록 폼 페이지를 호출하는 컨트롤러 URL과 회원 등록하는 컨트롤러 URL이 동일하다고 가정 (HTTP Method로 구분) 회원을 폼에 등록하면 해당 폼은 회원 등록하는 컨트롤러를 호출하고 해당 컨트롤러는 회원 개인정보 View를 호출하는 구조 이때, 회원 개인정보 페이지의 URL은 여전히 회원 등록하는 컨트롤러 URL이므로 새로고침을 할 때마다 회원을 신규 등록하는 문제점이 발생 (회원을 구분 짓는 Primary Key가 BigInteger 타입이고 AutoIncrement라는 가정) 문제 해결방법 앞선 상황에서 문제점은 회원 등록하는 URL에서 변하지 않은 상태에서 새로고침 ..

면접 준비 2021.06.14

HttpMessageConverter 간단 정리

1. HttpMessageConverter 용도 HTTP API처럼 JSON 데이터를 HTTP 메시지 바디 내 직접 읽거나 쓰는 경우 사용 @ResponseBody 어노테이션을 사용할 때 HTTP Body 내 문자 내용을 직접 반환하므로 HttpMessageConverter가 동작 String 문자 처리에는 StringHttpMessageConverter, 객체 처리에는 MappingJackson2HttpMessageConverter 사용 이외에도 다양한 HttpMessageConverter가 존재 * 응답의 경우 클라이언트의 HTTP Accept 헤더와 서버 컨트롤러의 반환 타입을 조합해 MessageConverter가 선택됨 (하단에 추가 설명) 2. 스프링 MVC의 HttpMessageConvert..

Spring 2021.06.11

클라이언트에서 서버로 HTTP 요청 메시지 보내는 방법

주로 사용하는 방법 3가지 쿼리 파라미터 - GET 방식 HTML Form - POST 방식 HTTP Message Body - POST 방식 * 데이터 형식은 주로 JSON 사용 (레거시 코드는 간혹 XML을 사용하지만 최근에는 대부분 JSON) 1. 쿼리 파라미터 - GET 방식 메시지 바디 없이 URL에 쿼리 파라미터를 추가해서 데이터를 전달하는 방식 (URL에 그대로 노출되므로 주로 검색, 필터, 페이징 등에 사용) URL에 ?을 시작으로 보내고 &를 통해 추가 파라미터를 구분 ex) http://localhost:8080/example?id=jaimemin&blog=tistory 쿼리 파라미터로 전달된 내용 -> id = jaimemin, blog = tistory 1.1 Servlet에서 조회..

Spring 2021.06.02

빈 스코프 (Bean Scope)

빈 스코프 정의 스프링 빈이 존재할 수 있는 범위 즉, 생성 및 소멸하는 구간 스프링에서 지원하는 빈 스코프 싱글턴 (Singleton): Default 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 (Prototype): 스프링 컨테이너가 프로토타입 빈의 생성과 의존관계 주입 그리고 초기화까지만 관여, 그 이상 관리하지 않는 짧은 범위의 스코프 웹 관련 스코프 request: 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application: 웹의 ServletContext와 같은 범위로 유지되는 스코프 websocket: 웹 소켓과 동일한 생명주기를 가지는 스코프 * 싱글턴의 경우 클래스의 ..

Spring 2021.05.26

스프링 빈 생명주기 (Spring Bean Life Cycle)

스프링 빈 라이프 사이클 요약 객체 생성 -> 의존관계 주입 (생성자 주입 제외) 생성자 주입의 경우 객체 생성과 함께 의존관계 주입 스프링 빈 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 메서드 호출 -> 애플리케이션에서 빈 사용 -> 소멸 전 콜백 메서드 호출 -> 스프링 종료 스프링은 의존관계 주입이 완료될 경우 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려줌 또한, 스프링 컨테이너가 종료되기 직전에 소멸 전 콜백 메서드를 통해 소멸 시점을 알려줌 보다 자세한 내용은 https://knpcode.com/spring/spring-bean-lifecycle-callback-methods/ 참고! * 스프링 빈 라이프 사이클을 압축시키기 ..

Spring 2021.05.25