본문 바로가기

분류 전체보기138

[Spring] 필터와 인터셉터 로그인해야 게시판에 접근할 수 있다는 요구 사항이 있을 때, 로그인 여부를 확인하는 로직은 여러 컨트롤러에서 공통적으로 필요하다.위와 같이 애플리케이션의 여러 로직에서 공통으로 관심이 있는 사항을 공통 관심사라고 한다.스프링은 공통 관심사를 처리하여 중복 코드를 제거할 수 있도록 다음과 같은 기능을 제공한다.필터인터셉터AOP이번 시간에는 이 3가지 중에서 필터와 인터셉터에 대해서 알아보려고 한다.필터와 인터셉터는 HttpServletRequest를 제공함으로써 웹과 관련된 공통 관심사를 처리할 때 유용하다.서블릿 필터필터는 서블릿이 지원하는 기능으로 Dispatcher Servlet에 요청이 전달되기 전 또는 처리한 후에 추가 작업을 수행할 수 있도록 한다. 즉 스프링 컨테이너가 아닌 서블릿 컨테이너에 .. 2024. 12. 27.
[Spring] Bean Validation 개발을 진행하다 보면 사용자의 요청이 요구에 맞게 들어왔는지 검사할 필요성이 있다.예를 들면 회원 가입 시 필수 입력 사항이 모두 들어왔는지 여부, 나이가 음수로 입력되는 경우 등 입력에 따라 다양한 검증이 필요하게 된다.컨트롤러는 HTTP 요청이 정상적인지 검증할 필요가 있는데 이를 직접 구현하면 컨트롤러의 코드 대부분은 검증로직이 될 것이다.따라서 검증 로직을 표준화하여 애노테이션으로 편하게 적용할 수 있도록 Bean Validation 기능을 지원한다.implementation 'org.springframework.boot:spring-boot-starter-validation' 위와 같이 라이브러리를 추가하면 스프링 부트는 자동으로 글로벌 Validator를 등록한다. 그리고 해당 검증기가 애노테.. 2024. 12. 27.
[Spring] 메시지, 국제화 메시지, 국제화 기능메시지 기능이란 화면이나 사용자에게 전달되는 텍스트 정보를 한 곳(messages.properties)에서 관리할 수 있는 기능을 의미한다. 그리고 이런 메시지 파일을 나라별로 만들어서 서비스의 다국어 처리를 하는 것을 국제화라고 한다.MessageSource위 기능을 사용하려면 MessageSource를 스프링 빈으로 등록해야 한다. (스프링 부트의 경우 자동 등록)스프링에서 국제화, 로컬화를 지원하기 위한 인터페이스로 구현체는 ResourceBundleMessageSource가 있다./resources 하위에 messages.properties 파일을 생성하면 이를 기본으로 사용하며, 국제화 기능을 사용하려면 messages 뒤에 언어 정보를 입력하면 된다. (messages_en.. 2024. 12. 27.
[Spring] Spring MVC MVC 패턴하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것모델(Model) : 뷰에 출력할 데이터를 담아두는 영역으로 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근없이, 화면을 렌더링 하는 일에 집중 가능뷰(View) : 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중하는 역할컨트롤러(Controller) : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행하는 역할을 수행하며 뷰에 전달할 결과 데이터를 조회해서 모델에 담음비즈니스 로직은 주로 서비스 계층에 있다. 즉 컨트롤러는 서비스를 호출하는 역할Spring MVC 구조동작 순서HTTP 요청이 오면 서블릿 .. 2024. 12. 27.
[Spring] 서블릿과 컨트롤러 서블릿(Servlet)자바 EE (Enterprise Edition)에서 웹 애플리케이션을 개발하기 위한 서버 측 컴포넌트로클라이언트의 요청을 동적으로 처리하고, 그에 대한 응답을 생성하여 웹 브라우저에 전달하는 역할을 한다.서블릿은 자바 스레드를 이용하여 동작하고 HTTP 프로토콜 서비스를 지원하는 HttpServlet를 상속받아 service 메서드를 구현하여 사용 가능하다.@WebServlet(name = "testServlet", urlPatterns = "/test")public class TestServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse.. 2024. 12. 27.
[Spring] @Qualifier, @Primary @Autowired로 의존 관계를 자동 주입할 때 해당 애노테이션은 타입으로 빈 조회 후 주입한다.이 때 조회 대상의 빈이 2개 이상이면 자동 주입 시 문제가 발생할 수 있다.이 문제를 해결하기 위한 방법은 크게 3가지로 나눌 수 있다. 예를 들어 다음과 같은 서비스가 있다고 하자.public interface PaymentService { void pay();}@Servicepublic class NaverPayService implements PaymentService { @Override public void pay() { System.out.println("네이버 페이 결제"); }}@Servicepublic class KakaoPayService implemen.. 2024. 12. 27.
[Spring] 스프링 컨테이너, 빈 스프링 컨테이너의 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);ApplicationContext는 스프링 컨테이너로 인터페이스이다. 해당 인터페이스의 구현체로 XML 기반, 애노테이션 기반의 자바 설정 클래스 등으로 스프링 컨테이너를 생성할 수 있다.AnnotationConfigApplicationContext → 애노테이션 기반 자바 설정 클래스로 스프링 컨테이너 생셩참고로 컨테이너란 객체들의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하는 객체를 담는 공간을 의미한다. 스프링 컨테이너의 종류에는 대표적으로 2가지가 있다BeanFactory : 자바 객체(b.. 2024. 12. 27.
[Spring] 스프링의 이해, 스프링 부트 스프링이란?자바 애플리케이션 개발을 더 편리하게 해줄 수 있도록 하는 오픈소스 프레임워크좀 더 자세히 말하면 스프링 프레임워크의 핵심 모듈들을 모아서 만든 프레임워크로 스프링 등장 이전에는 EJB 라는 기술이 주로 사용되었다. 하지만 이는 불필요한 코드가 많아 복잡했고 이를 해결하기 위해 탄생한 것이 스프링 프레임워크이다. 각각의 객체 생명주기 개발자가 관리하는 것이 아니라 프레임워크가 관리하고, 객체 간의 의존성을 외부에서 주입해주어 결합도를 낮춘다는 특징, AOP 기능을 지원한다는 등의 장점을 지니고 있습니다.스프링의 특징POJO 프로그래밍 지향→ 특정 라이브러리나 기술에 종속되지 않으므로 새로운 환경에 유연하게 대처가 가능POJO(Plain Old Java Object)순수 자바만 사용해서 만든 객.. 2024. 12. 27.
Log Level 로그 레벨(Log Level)애플리케이션에서 로그 메세지의 중요도를 나타낸 것으로 개발자는 어떤 정보가 중요한지 필터링하고 관리할 수 있도록 한다.로그 레벨 계층TRACE > DEBUG > INFO > WARN > ERROR > FATAL 순으로 이루어져 있다.TRACE : 가장 낮은 로그 레벨로, 애플리케이션의 흐름을 상세히 추적하기 위한 메시지를 기록한다.주로 디버깅 목적으로 사용.DEBUG : 개발 및 디버깅을 위한 정보 메시지를 기록한다.애플리케이션의 상태나 중요한 변수의 값을 출력하여 문제를 추적하는 용도로 사용.INFO : 애플리케이션의 정상적인 동작을 나타내는 일반적인 정보 메시지를 기록한다.시스템의 상태나 중요한 이벤트를 기록하는 용도로 사용.WARN : 잠재적인 문제나 경고를 나타내는 메.. 2024. 12. 27.