본문 바로가기

분류 전체보기

[백엔드TIL] Spring 스케쥴러 (80일차) batch도 있고 quartz도 있는데 왜 scheduler? 서버에서 일괄처리를 하기 위해서 spring에서 3가지 방법을 제공하는데 batch, queart, scheduler가 있다. 이들의 차이점은 1)batch : 여러 job을 순차적으로 처리 2)quartz scheduler : 특정 job을 특정 시간에 처리 하기 위해서 사용된다고 한다. 나는 특정 시간에 특정 job(API에서 데이터를 가져오는)만 처리하면 되기 때문에 batch는 해당사항이 없고, quartz랑 scheduler중에 뭘 사용할지 고민했다. 찾아보니 quartz는 scheduler보다 구현하기 복잡했고, 스케쥴링의 세밀한 제어가 필요하거나 클러스터링이 필요할때 사용하면 좋을거 같았다. 나는 단순한 scheduling이 필요.. 더보기
[백엔드TIL] Array, LinkedList에 대해 설명(79일차) Array (배열) 정의: 배열은 고정된 크기의 연속적인 메모리 공간에 원소들을 저장하는 자료구조입니다. 특징: 고정된 크기: 배열은 생성 시에 크기가 정해지며, 이후 크기를 동적으로 변경하기는 어렵습니다. 인덱싱: 배열의 원소에는 인덱스를 사용해 접근할 수 있으며, O(1) 시간에 해당 원소를 찾을 수 있습니다. 메모리 사용: 연속적인 메모리 공간을 사용하므로 메모리 관리에 용이합니다. 주요 작업의 시간 복잡도: 원소 조회 (인덱싱): O(1) 원소 추가/삭제 (끝에서): O(1) 원소 추가/삭제 (중간): O(n) LinkedList (연결 리스트) 정의: 연결 리스트는 노드(Node)들의 집합으로, 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성됩니다. 특징: 동적 크기: 연결 리스트는 동적.. 더보기
[백엔드TIL] Spring security 로그인 실패 시 예외처리 방식(78일차) 스프링 시큐리티로 로그인기능을 구현하다가 어떤 이유에서든지 로그인에 실패하면 로그에 아무것도 안뜨길래 뭔가 설정을 잘못한 줄 알았다. 분명 에러 로그가 떠야하는데 안뜬다. 로그 범위를 디버그로 하면 겨우 보이는데 다른로그들이 엄청나게 튀어나온다. 딱 한줄 보여준다... 세션에서 확인해봤다. 친절하게도 BadCredentialsException : 자격증명에 실패했다고 알려준다. 없는 아이디를 입력했으므로 UsernameNotFoundException을 기대했지만 BadCredentialsException이 떴다 로그를 찍어보면 분명 'org.springframework.security.core.userdetails.UsernameNotFoundException'이 발생했다. BadCredentialsEx.. 더보기
[백엔드WIL] DB캐싱 (16주차) Cache Cache는 데이터나 값을 저장하는 임시 저장소로, 데이터를 더 빠르고 효율적으로 액세스할 수 있게 해준다. 원본 데이터 접근보다 빠르다. 같은 데이터를 반복적으로 접근하는 상황에서 사용하기에 알맞다. 인증 세션 값과 같은 잘 변하지 않는 데이터일수록 더 효율적이다. CPU Cache 레이어별로 캐시를 보면 용량은 위로 갈수록 커지고 속도로 밑으로 내려갈수록 빨라진다. 보통 우리가 사용하는 Redis는 Memory층에 존재한다고 보면 된다. Disk가 제일 느리고 L3 < L2 < L1 순으로 속도가 빠르다. Disk 접근 속도가 SSD를 쓰고있지만 Memory와 비하면 속도가 굉장히 차이난다. 그렇기 때문에 Memory에 올려놓고 쓰는 게 Disk에서 읽어오는 것보다 훨씬 빠르다. 그 대신 .. 더보기
[백엔드TIL] DB로직을 최소하려면 어떻게해야할까? (77일차) DB 로직 최소화를 하려면 어떻게 해야 할까요 DB 로직을 최소화하는 것은 성능을 향상시키고 유지 보수를 간소화하는 데 도움이 됩니다. 예를 들어, 이러한 방법으로 DB 로직을 최소화할 수 있다. EX. 일관된 데이터 모델링: 데이터베이스 테이블과 엔테테를 일관성 있게 설계하고 중복 데이터를 줄이고 일관성을 유지하여 데이터 중복을 최소화화고 무결성을 유지한다. 비즈니스 로직 최적화: 데이터베이스에서 비즈니스 로직을 수행하기보다는 비즈니스 로직을 애플리케이션 레벨에서 처리한다. 데이터베이스는 데이터 저장과 관리에 중점을 두는 것이 좋다. 캐싱: 반복적으로 동일한 데이터를 검색해야 하는 경우, 검색 결과를 캐시하여 데이터베이스 요청을 최소화할 수 있다. 배치 작업: 대량의 데이터를 처리해야 할 때는 배치 작.. 더보기
[백엔드TIL] Mockito를 활용한 단위테스트 (76일차) [ Mockito란? ] Mockito는 개발자가 동작을 직접 제어할 수 있는 가짜 객체를 지원하는 테스트 프레임워크이다. 일반적으로 Spring으로 웹 애플리케이션을 개발하면, 여러 객체들 간의 의존성이 생긴다. 이러한 의존성은 단위 테스트를 작성을 어렵게 하는데, 이를 해결하기 위해 가짜 객체를 주입시켜주는 Mockito 라이브러리를 활용할 수 있다. Mockito를 활용하면 가짜 객체에 원하는 결과를 Stub하여 단위 테스트를 진행할 수 있다. 물론 프레임워크 도구가 필요없다면 사용하지 않는 것이 가장 좋다. [ Mockito 사용법 ] 1. Mock 객체 의존성 주입 Mockito에서 가짜 객체의 의존성 주입을 위해서는 크게 3가지 어노테이션이 사용된다. @Mock: 가짜 객체를 만들어 반환해주는.. 더보기
[백엔드TIL] Spring 구조와 DDD 개발(75일차) Request 데이터를 받을 Dto API 요청을 받을 Controller 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service 여기서 많이 오해하고 있는 부분이 Service에서 비즈니스 로직을 처리해야 한다는 것이다. 하지만 전혀 그렇지 않다. Service는 트랜잭션, 도메인 간 순서 보장의 역할만 한다. 그럼 비즈니스 로직은 누가 처리할까? 바로, 도메인 Domain이다. Spring 웹 계층 구조 Web 계층 흔히 사용하는 컨트롤러(@Controller)와 JSP/ Freemarker 등의 뷰 템플릿 영역이다. 이외에도 필터(@Fiilter), 인터셉터, 컨트롤러 어드바이스(@Controller Advice)등 외부 요청과 응답에 대한 전반적인 영역을 나타낸다. Service 계층 @Ser.. 더보기
[백엔드TIL] Docker 설정하면서 트러블슈팅(74일차) [문제상황] ec2에 docker-compose로 스프링을 띄우고, ec2 로컬에 실행한 redis와 연결이 안되고 있다. [원인] application.yml에 작성한 redis의 호스트인 localhost(127.0.0.1)의 주소와 docker의 로컬 호스트 주소가 다르기 때문이다. redis: host: localhost port: 6379 [실행] host에 localhost 대신에 host.docker.internal로 수정한다. =>실패 docker redis network를 구축한뒤 실행된 도커 컨테이너와 연결해준다 =>실패 [해결] docker-compose.yml에 아래 extra_hosts를 추가해준뒤 extra_hosts: - "host.docker.internal:host-gate.. 더보기
[백엔드TIL] Docker 에 대한 이해(73일차) 도커(Docker)는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트 입니다. 도커는 일반적으로 도커 엔진(Docker Engine) 혹은 도커에 관련된 모든 프로젝트를 말합니다. 도커 엔진(Docker Engine)은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트입니다. 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에 도커의 핵심은 도커 엔진이라고 할 수 있습니다. Virtual Machine(가상머신) vs Docker Container(도커 컨테이너) 기존에도 가상화 기술은 존재해왔습니.. 더보기
[백엔드TIL] EC2에 cloudwatch를 사용하여 성능체크(72일차) 개요 https://dev.classmethod.jp/articles/try-installing-cloudwatch-agent-on-ec2-instances/ 해당 글을 보고 재정리했습니다. 필자는 Ubuntu 운영체제를 사용하는데, 해당 글은 yum 명령어를 사용합니다. 이후에 더 원활하게 세팅하기 위해 해당 글을 다시 정리해서 작성했습니다. AWS는 기본 설정에서 메모리를 모니터링할 수 없습니다. 프리티어를 사용한다면 메모리가 부족한 만큼 메모리에서 문제가 발생할 확률이 높습니다. 따라서 메모리를 모니터링하는 방법을 아래 정리해두었습니다. EC2, Ubuntu 22.04 환경에서 작업했습니다. 순서 IAM Role 생성 필자의 생각에 Role은 여러 권한을 가지고 있는 무언가라는 의미로 자주 쓰여지는.. 더보기