32건의 항목

  • 2025년 2월 14일

    Multipart의 정의 Http요청에서 파일 업로드를 할 때 주로 사용되며, 요청 데이터에 있는 파일이 Multipart 형태로 들어오게 됩니다. Multipart의 종류 Content-Type설명multipart/form-data파일 업로드 시 사용 (HTML 폼에서 <input type=“file”>을 사용할 때)multipart/mixed서로 다른 데이터 타입을 포함할 때 사용multipart/alternative동일한 내용을 여러 형식(예: HTML, Plain Text)으로 보낼 때 사용multipart/related본문과 연관된 데이터를 함께 보낼 때 (예: HTML 본문과 이미지 첨부) multipart/form-data 예시 POST /upload HTTP/1.1 Host: example.com Content-Type: multipart/form-data; boundary=----WebKitFormBoundary ------WebKitFormBoundary Content-Disposition: form-data; name="username" john_doe ------WebKitFormBoundary Content-Disposition: form-data; name="file"; filename="image.jpg" Content-Type: image/jpeg (binary data) ------WebKitFormBoundary-- Spring에서 Multipart관련 설정 1.

  • 2025년 2월 13일

    Formatter의 정의 실제 개발 환경에서는 문자열을 다른 타입으로 변환하거나, 다른 타입을 문자열로 변환하는 상황이 빈번할 것입니다. 이 때문에 객체를 특정한 포맷에 맞추어 문자로 출력하거나 또는 그 반대의 역할을 하는 것에 특화된 기능을 가진 Formatter가 생겼습니다.

  • 2025년 2월 13일

    Converter의 정의 Spring에서 변환해야 할 타입에 대한 정의를 미리 구현해놓은 것 이를 호출하여 자주 변환하는 타입에 대해 간편하게 타입 변환을 할 수 있습니다. Converter 생성 예시로 ip와 port 정보를 입력받으면 127.0.0.1:8080과 같은 형태로 타입을 변환하거나 그 반대로 변환하는 Converter를 만들어보겠습니다.

  • 2024년 9월 18일

    Spring에선 기본적으로 에러가 발생했을 때 가로채서 내가 원하는대로 처리해줄 수 있도록 하는 ExceptionResolver를 지원합니다. Spring이 기본적으로 지원하는 ExceptionResolver는 3종류가 있으며, 그 중 ResponseStatusExceptionResolver는 아래 두가지의 경우를 자동으로 처리할 수 있습니다.

  • 2024년 9월 16일

    예외 발생 방법 우선 예외를 발생시키는 방법에 대해 알아야 예외 처리를 할 수 있습니다. Exception 클래스 선언 throw new RuntimeException("예외 발생!"); Exception 클래스들을 새로 선언하여 에러를 발생시킬 수 있습니다.

  • 2024년 9월 14일

    Interceptor의 정의 Interceptor란 Spring MVC가 제공하는 기술입니다. Filter와 역할은 같지만 적용되는 순서와 범위, 사용방법이 다릅니다. Filter와의 차이점 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링이 실행되는 흐름을 보면 필터는 서블릿 전에, 인터셉터는 서블릿 후에 호출됩니다.

  • 2024년 9월 14일

    Filter의 정의 Servlet이 지원하는 기능으로, 공통적인 관심사를 가지고 있는 기능들이 실행되기 전 공통적으로 수행할 작업을 진행할 수 있음. Filter의 인터페이스 형태 public interface Filter { public default void init(FilterConfig filterConfig) throws ServletException {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; public default void destroy() {} } init(): 필터 초기화 메서드, 서블릿 컨테이너가 생성될 때 호출됩니다.

  • 2024년 8월 29일

    @SessionAttribute의 정의 Spring에서 Session의 데이터를 더 간편하게 가져올 수 있도록 하는 기능입니다. 이 기능을 사용하면 세션을 따로 생성하진 않고 값을 가져오기만 합니다. 사용 예시 public String home( @SessionAttribute(name = "loginMember", required = false) Member loginMember, ...) { ..

  • 2024년 8월 29일

    세션이란? 로그인을 예시로 들면 사용자의 ID값 자체를 쿠키에 저장해버리면 보안이 취약해집니다. 이를 보완하기 위해 브라우저쪽에서 저장되어있는 쿠키 저장소와는 비슷하지만 다르게 서버쪽에서 저장되는 Key-Value타입의 저장공간을 세션(Session) 이라고 부릅니다. 사용자의 ID값은 세션 저장소의 value로 저장이 되고, 이에 대해 랜덤하게 생성된 Session ID값을 쿠키 저장소에서 저장되게 함으로써 쿠키 저장소에는 사용자에 대한 직접적인 정보를 저장하지 않도록 하였습니다.

  • 2024년 8월 21일

    정의 서블릿은 웹 컴포넌트 중 하나로, 웹 서버 또는 애플리케이션 서버에서 클라이언트의 요청을 처리하고 그 결과를 클라이언트에게 다시 전송하는 역할을 합니다. 서블릿 생성 예시 HttpServlet 클래스를 extends하여 service()함수를 구현해 사용할 수 있습니다.

  • 2024년 8월 21일

    Spring의 Model-View-Controller(MVC) 전체 구조 동작 순서 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다.

  • 2024년 8월 21일

    Spring의 Message관리 정의 Spring 프로젝트에서 여러 곳에 사용되는 다양한 문구를 한 곳에서 관리할 수 있도록 하는 기능국가별로 설정할 수도 있어서 국제화 기능을 제공합니다. 초기 설정 Spring에선 ResourceBundleMessageSource를 Bean으로 등록해주면 됩니다.

  • 2024년 8월 21일

    HttpServletResponse의 정의 Servlet에서 HTTP 서버가 클라이언트에게 응답을 보내는 데 사용되는 객체 HTTP 응답 상태 코드를 설정하고, 응답 헤더를 추가하거나 수정하며, 클라이언트로 보낼 데이터를 쓸 수 있습니다. HTTP 응답 설정 1. 상태 코드 설정 response.setStatus(HttpServletResponse.SC_OK); // 정상 상태코드(200)을 설정 2.

  • 2024년 8월 21일

    HttpServletRequest의 정의 Servlet은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱하고, 그 결과를 HttpServletRequest 객체에 담아서 제공합니다. HTTP 요청 메시지 조회 http://localhost:8080/hello?username=hello에 접속한 상황 1.

  • 2024년 8월 21일

    BindingResult의 정의 사용자 입력의 데이터 바인딩 과정에서 발생하는 오류를 관리하고 추적하는 인터페이스 이를 통해 입력 데이터의 유효성 검사 결과를 저장하고, 필요할 때 오류를 쉽게 처리할 수 있도록 도와줍니다. 주의사항 Controller의 함수의 매개변수로 들어가는 BindingResult는 @ModelAttribute이 붙은 매개변수 바로 뒤에 와야 합니다.

  • 2024년 8월 21일

    Bean Validation의 정의 Bean Validation 2.0(JSR-380)이라는 기술 표준으로 검증 애노테이션과 여러 인터페이스의 모음입니다. 사전 작업 의존관계 추가 Bean Validation을 사용하기 위해선 우선 build.gradle에서 의존관계를 추가해줘야합니다.

  • 2024년 8월 21일

    Bean의 정의 Spring IoC(Inversion of Control) 컨테이너가 관리하는 객체입니다.의존성 주입(DI)을 통해 외부에서 관리 및 주입이 가능합니다. 선언 방법 1. XML을 통한 선언 <beans> <bean id="myBean" class="com.example.MyClass"/> </beans> 2.

  • 2024년 8월 21일

    ApplicationContext의 정의 Spring Bean을 관리하고 조회하는 Spring Container의 최상위 인터페이스인 BeanFactory라는 인터페이스의 기능을 모두 상속받아서 제공하는 역할을 합니다.거기다가 추가적으로 편리한 부가기능을 더 제공합니다 ...

  • 2024년 8월 21일

    검증 기능의 정의 클라이언트로부터 받은 데이터가 비즈니스 규칙을 만족하는지 확인하거나, 데이터가 일관성 있고 안정적인 상태를 유지할 수 있도록 보장해주는 기능 오류 관리와 추적 1. BindingResult ThymeLeaf에서 검증 오류 표현 ThymeLeaf의 검증 관련 기능 참고 (관련 글 준비 중) Message 기능 응용 Message 기능을 사용하여 오류 메시지를 효과적으로 관리할 수 있습니다.

  • 2024년 8월 20일

    @ResponseBody의 정의 Controller의 메서드가 return하는 데이터 자체가 클라이언트에게 전달되도록 하는 Annotation 단순 텍스트 응답 @ResponseBody @GetMapping("/response-body-string") public String responseBody() ...

  • 2024년 8월 20일

    @Validated의 정의 검증기를 실행하라는 AnnotationWebDataBinder 에 등록한 검증기를 찾아서 실행합니다. 검증기 선정 방법 여러 검증기 중 어떤 검증기를 적용하게 될 지는 supports()에서 지정한 클래스를 통해 정해집니다. 사용 예시 검증기(변동 없음) @Component public class ItemValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return Item.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { ..

  • 2024년 8월 20일

    @RequestParam의 정의 클라이언트가 보낸 요청 중 파라미터의 값을 불러오고 싶을 때 사용하는 Annotation 기본 사용법 http://localhost:8080/request-param?username=hello&age=20 경로로 요청했을 때 @ResponseBody @RequestMapping("/request-param") ...

  • 2024년 8월 20일

    @RequestMapping의 정의 Spring에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 핸들러 매핑과 어댑터 사용 예시 @Controller public class Controller { @RequestMapping("/hello/form", method = RequestMethod.GET) ...

  • 2024년 8월 20일

    @RequestBody의 정의 HTTP 요청의 Body를 자바 객체로 변환하여 그 메소드의 파라미터로 전달하도록 합니다.즉, 클라이언트로부터 받은 요청 본문을 자동으로 원하는 타입의 객체로 매핑해주는 역할 JSON과 같은 형태의 객체 생성 @Data public class HelloData { private String username; ...

  • 2024년 8월 20일

    @Qualifier의 정의 조회하고 싶은 Bean과 타입이 동일한 다른 Bean 이 한 개 이상 있다면 오류가 납니다.이럴 때 원하는 빈에게 조회할 때 사용할 별명을 @Qualifier로 지정해줄 수 있습니다. 사용 예시 빈 등록 @Component @Qualifier("mainDiscountPolicy") // public class RateDiscountPolicy implements DiscountPolicy { } 의존성 주입 @Autowired public OrderServiceImpl( MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy ) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } 코드 설명 빈 등록할 때 해당 빈에 @Qualifier를 통해 별명을 지어주고, 의존성을 주입할 때 @Qualifier를 이용하여 지어놓은 별명을 넣어 의존성 주입을 합니다.

  • 2024년 8월 20일

    @Primary의 정의 조회하고 싶은 Bean과 타입이 동일한 다른 Bean 이 한 개 이상 있다면 오류가 납니다.이럴 때 우선적으로 조회할 빈을 @Primary를 통해 지정해줄 수 있습니다. 사용 예시 빈 등록 @Component @Primary public class RateDiscountPolicy implements DiscountPolicy { } 의존성 주입 @Autowired public OrderServiceImpl( MemberRepository memberRepository, DiscountPolicy discountPolicy ) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } 코드 설명 빈 등록할 때 우선적으로 선언할 빈에게 @Primary 어노테이션을 추가해주면 별 다른 작업 없이 해당 타입의 빈을 의존성 주입하면 @Primary를 적용한 RateDiscoutPolicy타입의 빈이 주입됩니다.

  • 2024년 8월 20일

    @ModelAttribute의 정의 @RequestParam으로 프로퍼티 값을 하나 하나 받아오기 쉽지 않은 상황이 많습니다.이럴 때 파라미터들의 값을 프로퍼티 접근법(setXXX)으로 알아서 입력하여 객체로 값들을 받을 수 있게 해줍니다. 데이터가 들어갈 객체 생성 @Data public class HelloData { private String username; private int age; } 기본 사용법 @ResponseBody @RequestMapping("/model-attribute-v1") public String modelAttributeV1(@ModelAttribute HelloData helloData) { log.info("username={}, age={}", helloData.getUsername(), helloData.getAge()); return "ok"; }.

  • 2024년 8월 20일

    @ComponentScan의 정의 직접 xml이나 java코드로 설정파일을 작성할 필요 없이 @Component 어노테이션이 붙은 클래스들을 스프링 빈으로 등록해주는 Annotation @Autowired를 이용하여 설정했던 의존관계도 그대로 적용된 채로 Bean에 등록됩니다 ...

  • 2024년 8월 20일

    @Configuration의 정의 따로 빈 정의용 클래스를 하나 생성해서 빈을 정의하고 의존성을 설정하는 방식 이 어노테이션이 붙은 클래스 내에서 @Bean 어노테이션이 붙은 메서드를 통해 Bean을 정의하고, 컨테이너에 등록할 수 있습니다. 사용 예시 @Configuration public class AppConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } } 코드 설명 memberRepository, discoutPolicy, memberService, orderService 총 4개의 Bean이 생성됩니다.

  • 2024년 8월 20일

    @Autowired의 정의 Annotation을 통해 Bean으로 지정된 클래스들의 의존성 주입(DI)을 위해 사용하는 Annotation 사용 예시 1. 생성자 주입 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } } 코드 설명 OrderServiceImpl생성자에 @Autowired를 추가하여 OrderServiceImpl이 생성되면서 동시에 memberRepository와 discountPolicy의 의존성을 주입받음 2.