반응형

Web/스프링부트(SpringBoot Framework) 11

(1) @Autowired와 @Bean 차이점

@Autowired 와 @Bean 어노테이션의 구분@Autowired와 @Bean의 역할은 다르지만, 함께 작동하여 의존성 주입과 객체 생성을 처리합니다. 하지만 두 어노테이션의 차이를 명확히 알아야 합니다 @Autowired의 역할:@Autowired는 의존성 주입을 위한 것이며, 직접적으로 객체를 생성하지 않습니다.이 어노테이션은 Spring 컨테이너에게 해당 타입의 빈을 찾아 주입하라고 지시합니다.객체 생성 과정:객체 생성은 주로 Spring 컨테이너에 의해 이루어집니다.@Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스들은 자동으로 빈으로 등록되고 생성됩니다.@Bean의 역할:@Bean은 메서드 레벨에서 사용되며, 해당 메서드가 반환하..

(2) Kafka, Spring Boot, 리액트를 사용하여 쇼핑몰 사용자의 결제정보 실시간 처리 구현하기

도커를 사용하여 Kafka 를 설치하는 방법앞 장에서 로컬인 윈도우에 Kafka를 설치하였습니다. 로컬에 설치된 Kafka를 사용할 경우 이 과정은 생략하여도 됩니다.추가로 도커를 사용하여 Kafka를 설치하는 방법을 설명하겠습니다.docker-compose.yml 파일을 다음과 같이 작성합니다.version: "3.8"services: kafka-0: image: bitnami/kafka:latest container_name: kafka-0 user: root ports: - "10000:9094" environment: - KAFKA_CFG_NODE_ID=0 - KAFKA_KRAFT_CLUSTER_ID=M2fxHJLvSO2xWi1DpTnikg ..

(1) Kafka, Spring Boot, 리액트를 사용하여 쇼핑몰 사용자의 결제정보 실시간 처리 구현하기

1. 로컬 환경에 Kafka 설치 및 구성하기실제 Kafka를 서비스에 이용하는 회사의 경우 별도의 서버에 Kafka를 설치하겠지만, 스프링부트에서 Kafka 서비스를 이용하는 것을 목적으로 하기 때문에 여기선 간단하게 내 윈도우 로컬 환경에 Kafka를 설치해 실습을 진행해 보도록 하겠습니다.설치 환경: Windows 11다운로드:  kafka.apache.org Apache KafkaApache Kafka: A Distributed Streaming Platform.kafka.apache.org1) 다운로드Kafka 공식 홈페이지 오른쪽 상단의 'DOWNLOAD KAFKA' 버튼을 클릭합니다.가장 최신 버전은 안정화가 안 되어 있을 수 있으므로 3.6.2 버전을 받았습니다.  2) 로컬PC의 윈도우에..

(3) @RequestParam과 @PathVariable 차이점

Spring 프레임워크에서 @RequestParam과 @PathVariable 어노테이션은 모두 컨트롤러 메서드에서 요청 파라미터를 처리하는 데 사용되지만, 그 목적과 사용 방식이 다릅니다. 각각의 차이점을 자세히 설명하겠습니다.  @RequestParam용도: HTTP 요청 파라미터를 메서드 매개변수에 바인딩할 때 사용합니다. 주로 쿼리 스트링 또는 폼 데이터에서 파라미터를 추출할 때 사용됩니다.사용 예: URL에 포함된 쿼리 파라미터나 폼 데이터에서 값을 추출할 때.기본값: 제공하지 않으면 기본값을 설정할 수 있습니다. 파라미터가 필수가 아닐 경우 required = false로 설정할 수 있습니다.예시코드:@GetMapping("/api/users")public String getUserByRequ..

(2) @Autowired와 @AllArgsConstructor 차이점

@Autowired와 @AllArgsConstructor는 둘 다 스프링 프레임워크에서 의존성 주입을 지원하는 방식이지만, 사용하는 방식과 상황에 따라 적절히 선택해야 합니다. @Autowired@Autowired는 스프링에서 의존성 주입을 위한 애노테이션으로, 필드, 생성자, 또는 메서드에 사용할 수 있습니다. 이를 통해 스프링 컨테이너가 적절한 빈을 자동으로 주입하도록 합니다. 1. 필드 주입(Field Injection):가장 단순한 방법으로, 필드에 직접 주입합니다.@Componentpublic class MyService { @Autowired private MyRepository myRepository; // ...}단점:테스트하기 어려움순환 의존성 문제 발생 가능의존성..

(1) @AllArgsConstructor과 @NoArgsConstructor 차이점

@AllArgsConstructor와 @NoArgsConstructor는 둘 다 롬복(Lombok) 라이브러리의 애노테이션으로, 각각 클래스에 대해 모든 필드를 매개변수로 받는 생성자와 기본 생성자(매개변수가 없는 생성자)를 자동으로 생성해줍니다.두 애노테이션의 주요 차이점은 생성하는 생성자의 종류와 용도입니다. @AllArgsConstructor기능: 클래스의 모든 필드를 매개변수로 받는 생성자를 생성합니다.사용 목적: 주로 의존성 주입이나 객체 생성 시 모든 필드를 초기화해야 할 때 사용됩니다. 예시 코드:import lombok.AllArgsConstructor;@AllArgsConstructorpublic class MyClass { private String name; private ..

(2) 스프링부트, JPA로 구현한 로그인을 시도한 사용자의 접속 시간 저장

Formatter를 이용한 LocalDateTime 처리 웹에서 전달되는 데이터는 JSON 형식의 데이터일 수도 있고 첨부파일 등이 포함되는 경우에는 form-data 혹은 일반적인 웹에서 사용하는 x-www-form-urlencoded 일 수도 있습니다. 이러한 처리 과정에서 날짜/시간은 항상 주의해야 합니다. 날짜/시간은 브라우저에서 문자열로 전송되지만, 서버에서는 LocalDate 혹은 LocalDateTime 으로 처리됩니다. 그렇기 때문에 이를 변환해 주는 Formatter를 추가해서 이 과정을 자동으로 처리 할 수 있도록 설정합니다.   addFormatters 메서드는 스프링의 WebMvcConfigurer 인터페이스에 정의된 메서드 중 하나로, 애플리케이션에서 사용하는 데이터 형식을 일관되..

(1) 스프링부트, JPA로 구현한 로그인을 시도한 사용자의 IP 저장

추후 Redis로 이 기능을 변경하기 전 단계로 관계형 DB인 MariaDB에 로그인을 시도한 사용자의 IP를 저장하는 기능을 스프링부트, JPA로 구현하여 보자. 사이트를 유지보수 하다보면 로그인을 시도한 사용자의 ip정보나 로그를 수집할 필요가 있기도 합니다.사용자가 웹브라우저를 통해 접속을 하거나 혹은 다른 HTTP 클라이언트를 통해 웹서버에 요청을 할 경우, Spring MVC에서 HttpServletRequest 객체에는 다양한 정보가 포함됩니다. 이 정보는 클라이언트의 HTTP 요청과 관련된 다양한 속성 및 헤더를 포함합니다.몇 가지 주요한 정보는 다음과 같습니다.요청 URL 및 메소드 정보:request.getRequestURL(): 요청 URL을 가져옵니다.request.getMethod(..

React와 Spring Boot를 함께 사용하는 환경에서 서버 사이드 렌더링(SSR) 구현하기...(작성중)

스프링부터와 리액트로 프로젝트를 진행하면서 기존과는 다른 경험을 하게 되어 리액트같은 SPA 언어의 동작과정에 대해서 다시 생각하는 계기가 되었습니다. 기존의 스프링부트로 웹사이트 구축 작업을 할때, 백엔드는 스프링부트,  프론트는 Thymeleaf 라는 자바 템플릿 엔진을 사용하여 작성된 HTML파일이나 JQuery, JavaScript 등의 스크립트 프로그래밍 언어로 작성된 JSP파일로 구현을 하게 됩니다. 스프링부트에서 JSP 형식의 프론트 페이지를 구현하려면 스프링부트에서 JSP 뷰 파일을 반환하는 다음과 같은 코드를 작성한 후 주소창에 http://localhost:포트번호/member/hello 를 입력하면 이 뷰 파일이 보이게 됩니다.  보통 스프링부트의 컨트롤러에서 작성된 URL 아래의 메..

AuthenticationFailureHandler, AuthenticationEntryPoint 차이점

최근에 스프링 시큐리티를 이용하여 기본 로그인을 구현한 후 에러 메시지를 더 자세히 분기처리하여 화면단으로 리턴하는 코드를 작성한 후 코드리뷰를 받게 되었습니다.  이 코드에 대해서 코드 리뷰 시 아래와 같은 수정 사항이 나왔습니다. 1. 에러 코드와 에러 메시지는 enum이나 yml, xml, json 파일로 따로 빼서 관리  2. if~else if 문은 가독성이 좋지 않기 때문에 사용이 권장되지 않으니 제거 요구됨3. 스프링 시큐리티의 Filter단에서 발생하는 에러도 Servlet단에서 처리하여 에러를 중앙집중식으로 관리되도록 해야 함  1. 에러 코드와 에러 메시지는 enum이나 yml, xml, json 파일로 따로 빼서 관리domain 패키지 밑에 enum 타입의 ErrorCode를 만들어 ..

반응형