전체 글

"오늘의 내가 내일의 나를 만든다!"
· Spring
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
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를 사용하기 때..
· Spring
Apache Poi를 활용하여 엑셀 다운로드를 개선해보자 ❕   1. 문제지난 프로젝트에서 엑셀 관련 개발을 진행한 적이 있었다. 대부분의 엑셀 파일 용량은 50KB 이하였기 때문에, 파일 크기만 제한시켜두는 방식으로 진행했었다. 근데 최근 스터디에서 대용량 엑셀 파일을 다뤄본 적이 있냐는 질문을 받았고, 이 부분은 개발 당시에 고려하지 못했던 부분이라 이번 기회에 대용량 엑셀 파일을 처리하면서 개선해 보려고 한다.  먼저, 5만개 row를 가지는 1.6MB 크기의 파일을 생성했다.  해당 파일을 업로드 했더니 다음과 같은 에러가 발생했다.스프링은 기본적으로 1MB 까지의 파일을 업로드할 수 있도록 제한되어 있기 때문이다.  spring.servlet.multipart.max-file-size=2MB..
· Spring
로깅에서 사용되는 log4j, logback, log4j2에 대해 알아보자 ❕  이 세가지는 Java기반 애플리케이션에서 로그를 생성하고 관리하기 위한 대표적인 로깅 프레임워크이다. 이번 시간에는 로그의 필요성과 Log4j, Logback, Log4j2에 대해 정리하고, Spring에서 Logback을 사용하는 방법까지 정리해보려고 한다.   1. Log(로그)로그는 애플리케이션이나 시스템에서 발생하는 이벤트, 상태, 오류, 결과 등을 기록한 데이터를 말한다. 주로 텍스트 형식으로 기록되며, 개발자가 시스템 동작을 이해하고 문제를 진단하는데 사용된다. 따라서 로그를 통해 서비스의 품질과 운영 효율을 높일 수 있다.  try { ...} catch (Exception e) { log.error(..
· Spring
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 드..
· DB
Redis에 대해 알아보자 ❕  1. Redis (Remote Dictionary Server)Redis는 NoSQL 중 하나로, 인메모리 데이터 저장소이다. key-value 데이터 구조에 기반한 다양한 형태의 자료구조를 제공하며, pub/sub같은 다양한 기능도 제공하여 다양한 목적으로 사용된다.  Redis에서 Remote는 Redis가 각각의 서버 안에 로컬하게 존재하지 않고, 다수의 서버에서 공통적으로 사용할 수 있도록 원격에 존재한다는 의미이며, Dictionary는 해시맵과 같이 key-value 형태로 상수의 시간 복잡도로 사용이 가능하다는 의미이다. → 즉, 다수의 서버를 사용하는 분산 환경의 서버가 공통으로 사용할 수 있는 해시 테이블로 생각하면 된다.  1-1. Redis 특징인메모리..
· AWS
Github + Jenkins + AWS EC2를 활용해 CI/CD를 구축해보자 ❕   1. AWS EC2 (Elastic Compute Cloud) 1-1. EC2란EC2는 클라우드 컴퓨팅 서비스로, 아마존이 전세계적으로 구축한 데이터 센터의 서버 컴퓨터들의 자원을 원격으로 사용할 수 있도록 한다. 여기서 Elastic은 가상 서버를 사용한 만큼 탄력적으로 비용과 용량을 자유롭게 조절할 수 있다는 의미이다.  1-2. EC2 특징유연성서버를 런칭하고 종료하는 것이 간단하고 빠르다.수평 및 수직 Scailing을 통해 사용량에 따라 인스턴스 조절이 가능하다. 안정성네트워킹 및 보안 기능을 제공하여 안정적인 서비스를 제공한다. 비용 및 위치사용한만큼 비용을 지불한다.전 세계 다양한 지역에서 인스턴스를 시작..
· Spring
재고관리 시스템에서 발생할 수 있는 동시성 이슈와 해결 방법에 대해 공부해보자 ❕  참고 강의 재고시스템으로 알아보는 동시성이슈 해결방법 강의 | 최상용 - 인프런최상용 | 동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., 동시성 이슈 처리도 자신있게! 간단한 재고 시스템으로 차근차근 배워보세요. 백엔드 개발자라면 꼭 알아야 할 동www.inflearn.com   1. 문제 상황총 100개의 재고 수량을 하나씩 감소시켜 최종 수량이 0이 되기를 기대하는 코드이다. 그러나 멀티 스레드를 실행해 재고 수량을 감소시켰을 때, 다음과 같이 기대값과 다른 값이 나오게 된다.그 이유는 *Race Condition이 일어났기 때문이다.스레드1이 데이터를 가져가 갱신하기 전에, 스레드2가 조회하면서 갱신..
· 기타
티스토리 hELLO 스킨에서 코드블럭 스타일 변경 방법을 변경해보자  여럿 블로그 따라해봐도 적용이 안됐는데, 드디어 방법을 찾았다~   1. 패키지 다운로드https://highlightjs.org/download Download a Custom Build - highlight.js highlightjs.org 해당 사이트에 접속해 사용하려는 언어 체크하고 다운로드 및 압축해제(나는 Common을 모두 체크해 다운로드했다)     2. 테마 선택https://highlightjs.org/demo Demo - highlight.js...highlightjs.org 사용하려는 스타일 테마를 고른다.   3. 테마 스타일 수정방금 다운받았던 highlight > styles > 사용하려는 테마.min.css..
· Python
SQLAlchemy를 사용했을 때, 트랜잭션을 설계하는 방법을 알아보자 ❕  이전 프로젝트에서 Flask를 사용했는데, Flask는 내장 ORM이 없는 프레임워크이다. 따라서 대부분 SQLAlchemy이라는 라이브러리를 사용하는데, 해당 라이브러리에서 트랜잭션 관리는 어떻게 이루어지는지, 나는 어떻게 트랜잭션을 설계했는지 정리해보려고 한다.  SQLAlchemy 개념 및 설정 방법 SQLAlchemy 개념 및 설정 방법SQLAlchemy 개념 및 사용법에 대해 정리해 보자 ❕ Flask로 개발한 적이 있었는데, Flask는 ORM이 내장되어 있지 않아 ORM 라이브러리인 SQLAlchemy를 이용해야 했다. 처음 사용해 본 기술이라 다시 한번 정chchaego.tistory.com   1. SQLAlch..