Spring에서 응답값을 반환하는 방식을 개선해보자 ❕ 보통 개인 프로젝트에서 컨트롤러 응답값을 반환할 때, 다음과 같이 작성해줬다.@GetMapping("/summary")public ResponseEntity searchSummaryByDate(, ScheduleSearchReqDto reqDto) { Message message = Message.builder() .status(HttpStatus.OK) .data(scheduleBusinessService.searchSummaryByDate(reqDto.getStartDate(), reqDto.getEndDate())) .message("success") .bui..
Spring WebFlux에 대해 알아보고, CRUD API를 구현해보자 ❕ 먼저 Spring WebFlux는 Spring Framework 5.0에 도입된 비동기 및 반응형 웹 프레임워크이다. 기존 Spring MVC는 Servlet 스택 기반의 동기적 처리 모델을 사용했지만, 높은 트래픽과 서버 자원을 효율적으로 처리해야 하는 요구가 증가함에 따라, 비동기 논블로킹 및 반응형 프로그래밍 모델을 지원하는 Spring WebFlux가 등장하였다. 1. Spring WebfluxSpring 프레임워크에서 제공하는 비동기 논블로킹(non-blocking) 프로그래밍 모델을 기반으로한 모듈이며, 기존의 Spring MVC가 블로킹 I/O 기반이었던 것과 달리 WebFlux는 논블로킹 I/O를 사용하기 때..
Apache Poi를 활용하여 엑셀 다운로드를 개선해보자 ❕ 1. 문제지난 프로젝트에서 엑셀 관련 개발을 진행한 적이 있었다. 대부분의 엑셀 파일 용량은 50KB 이하였기 때문에, 파일 크기만 제한시켜두는 방식으로 진행했었다. 근데 최근 스터디에서 대용량 엑셀 파일을 다뤄본 적이 있냐는 질문을 받았고, 이 부분은 개발 당시에 고려하지 못했던 부분이라 이번 기회에 대용량 엑셀 파일을 처리하면서 개선해 보려고 한다. 먼저, 5만개 row를 가지는 1.6MB 크기의 파일을 생성했다. 해당 파일을 업로드 했더니 다음과 같은 에러가 발생했다.스프링은 기본적으로 1MB 까지의 파일을 업로드할 수 있도록 제한되어 있기 때문이다. spring.servlet.multipart.max-file-size=2MB..
로깅에서 사용되는 log4j, logback, log4j2에 대해 알아보자 ❕ 이 세가지는 Java기반 애플리케이션에서 로그를 생성하고 관리하기 위한 대표적인 로깅 프레임워크이다. 이번 시간에는 로그의 필요성과 Log4j, Logback, Log4j2에 대해 정리하고, Spring에서 Logback을 사용하는 방법까지 정리해보려고 한다. 1. Log(로그)로그는 애플리케이션이나 시스템에서 발생하는 이벤트, 상태, 오류, 결과 등을 기록한 데이터를 말한다. 주로 텍스트 형식으로 기록되며, 개발자가 시스템 동작을 이해하고 문제를 진단하는데 사용된다. 따라서 로그를 통해 서비스의 품질과 운영 효율을 높일 수 있다. try { ...} catch (Exception e) { log.error(..
SpringBoot에서 Redis를 사용해보자 ❕ 1. Redis 적용 목적Redis는 데이터를 메모리에 저장하기 때문에 빠른 조회가 가능하며, 반복적으로 요청되는 데이터를 캐싱해 매번 데이터베이스와 통신하는 비용을 아낄 수 있다. 이번 학습에서는 Spring에 Redis를 적용하는 방법을 정리한 뒤, 다량의 데이터를 지속적으로 조회하여 Redis 적용 전/후의 성능 차이를 비교해보려고 한다. 2. 설정spring boot 버전 : `3.3.5` 2-1. 의존성 추가 및 환경변수 설정build.gradleimplementation 'org.springframework.boot:spring-boot-starter-data-redis'해당 의존성을 통해, Spring Boot에서 여러 Redis 드..
재고관리 시스템에서 발생할 수 있는 동시성 이슈와 해결 방법에 대해 공부해보자 ❕ 참고 강의 재고시스템으로 알아보는 동시성이슈 해결방법 강의 | 최상용 - 인프런최상용 | 동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., 동시성 이슈 처리도 자신있게! 간단한 재고 시스템으로 차근차근 배워보세요. 백엔드 개발자라면 꼭 알아야 할 동www.inflearn.com 1. 문제 상황총 100개의 재고 수량을 하나씩 감소시켜 최종 수량이 0이 되기를 기대하는 코드이다. 그러나 멀티 스레드를 실행해 재고 수량을 감소시켰을 때, 다음과 같이 기대값과 다른 값이 나오게 된다.그 이유는 *Race Condition이 일어났기 때문이다.스레드1이 데이터를 가져가 갱신하기 전에, 스레드2가 조회하면서 갱신..
Java에서 엑셀 파일을 다루기 위해 사용하는 Apache POI 라이브러리에 대해 공부해보자 ❕ Apache POI(Poor Obfuscation Implementation)는 아파치 소프트웨어 재단에서 만든 라이브러리로 마이크로소프트 오피스 파일 포맷을 자바 언어로 읽고 쓰는 기능을 제공한다.전에 구현했던 프로젝트에서 엑셀 파일을 읽고 파일을 생성하는 기능이 필요해 해당 라이브러리를 사용했었는데, Apache POI 라이브러리를 사용하기 전에 알아야 할 개념과 사용법을 정리해보려고 한다. Apache POI 공식 사이트 Apache POI - the Java API for Microsoft Documents Project News 25 November 2023 - POI 5.2.5 avai..
OAuth 2.0으로 소셜로그인 구현하기 Version2 ❕ 지난 소셜로그인 구현 : V1. OAuth2.0으로 소셜로그인 구현하기 [Spring] V1. OAuth2.0으로 소셜로그인 구현하기소셜 로그인에서 사용되는 프로토콜인 OAuth에 대해 학습하고 Spring에서 구현해보자 ❕ 1. OAuth (Open Authorization) ?많은 사이트에서 소셜 계정을 기반으로 회원가입 & 로그인을 할 수 있는 기능이chchaego.tistory.com 소셜 로그인은 크게 1. 인가 요청 2. 토큰 요청 3. 사용자 정보 요청을 하는 과정이 필요하다. 지난번 구현했을 때는 인가 요청의 결과로 받은 인가 코드(Authorization code)를 사용자단에 넘긴 후, 그 값을 Client(내 서버)에게..
소셜 로그인에서 사용되는 프로토콜인 OAuth에 대해 학습하고 Spring에서 구현해보자 ❕ 1. OAuth (Open Authorization) ?많은 사이트에서 소셜 계정을 기반으로 회원가입 & 로그인을 할 수 있는 기능이 있다. 소셜 로그인을 이용하면 번거롭게 개인 정보를 입력하고 회원가입을 할 필요가 없기 때문에 간편하게 로그인할 수 있다. 게다가 연동되는 웹 어플리케이션에서 제공하는 기능을 사용할 수도 있다.이 때 사용되는 프로콜이 OAuth이다. OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 어플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임(Delegated Authorization)을 위한 표준 ..
사용자 인증 및 권한 처리를 쉽게 제공하는 Spring Security 프레임워크에 대해 공부해보자 ❕ 1. 스프링 시큐리티 (Spring Security) ?Spring Security는 인증, 권한 관리, 데이터 보호 기능을 포함하여 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 하위 프레임워크이다. 대부분의 시스템들은 회원을 관리하기 위해 *인증(Authentication)과 *인가(Authorization)에 대한 처리를 진행하는데, Spring에서는 SpringSecurity라는 프레임워크에서 관련된 기능을 제공해 보다 쉽게 관리할 수 있도록 한다. *인증, 인가?인증(Authentication) : 유저가 누구인지 확인하는 것인가(Authorizati..