BACKEND

Service단에 @Transactional(readOnly = true)프로젝트를 진행하며 Transactional(readOnly = true)를 굳이 왜 붙이는 지 궁금해서 찾아 보았다.@Service@RequiredArgsConstructor@Transactional(readOnly = true)public class RoomService {일반적으로, 조회용 메서드에 대해서는 readOnly를 설정함으로써 성능상 이점을 얻을 수 있다.JPA - DirtyChecking와의 연관트랜잭션이 Commit 될 때, 초기 상태의 정보를 가지는 Snapshot 과 Entity의 상태를 비교하여 변경된 내용에 대해 update query를 생성해 쓰기 지연 저장소에 저장한다.그 후, 일괄적으로 쓰기 지연 저..
초기 데이터를 설정하기 위해 다음과 같이 코드를 구현한다.여기서 defer-datasource-initialization: true 를 사용해서 초기 데이터를 추가하고 구현한다.spring: config: import: - privacy.yml sql: init: mode: always datasource: url: jdbc:mysql://${test.db.host}:${test.db.port}/${test.db.database}?serverTimeZone=Asia/Seoul&characterEncoding=UTF-8 driver-class-name: com.mysql.cj.jdbc.Driver username: ${test.db.username} ..
일반적으로 단일 스레드 상황의 성공 조회수는 다음과 같다. @Test @Transactional void 성공_조회수_추가() { //given CommentRequestDto commentRequestDto = CommentRequestDto.builder().content("test").build(); //when for (int i = 0; i  하지만 일반적으로 스프링은 스레드풀을 가지고 있어, 한번에 여러 요청이 동시에 이루어 질수 있다.예를 들어 여러명이 동시에 조회수를 추가하는 경우의 테스트를 진행해보자 20개의 스레드가 동시에 조회수를 늘린다면 어떻게 될까? @Test ..
AOP를 사용하는 이유? 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다.1. 핵심 기능 : 해당 객체가 제공하는 고유의 기능2. 부가 기능 : 핵심 기능을 보조하기 위해 제공되는 기능 (ex: 로깅, 트랜잭션, 보안) 보통 기존 프로젝트에 부가 기능을 추가 하게 되면 하나의 클래스가 아닌 여러 클래스에 부가 기능을 추가하게 된다.예를 들어 프로젝트의 모든 클래스에 로그 기능을 추가한다면 하나의 부가 기능(로그 추적)을 여러 곳에 동일하게 사용하게 됩니다.이러한 부가 기능을 바로 횡단 관심사(cross-cutting concerns)라고 합니다. 만약, 여기서 모든 서비스 메소드가 호출될 때 마다 로그를 남겨야 한다고 가정하자.하드코딩을 하면 그냥 모든 메소드에 로깅 코드를 삽입하면 되..
캐싱을 한 부분의 속도를 대시보드로 확인해보기k6로 테스트 한 데이터 (시계열 매트릭 데이터) 를 influxDB라는 시계열 데이터베이스에 저장한다.그 후 그 데이터를 Grafana 라는 시각화 웹 애플리케이션을 사용해서 그래프로 속도의 변화를 보여준다.,이에 대한 이점은 다음과 같다. 1. 시계열 데이터를 관리할 수 있다.2. 시각화를 통해 데이터를 효과적으로 한눈에 보여줄 수 있다.3. 실시간으로 데이터를 확인할 수 있다. 윈도우 환경에서 세팅choco 설치k6를 다운로드 하는데 먼저 chocolatey라는 패키지 매니저를 다운로드한다.윈도우에서 사용할 수 있는 커맨드 라인 패키지 매니저이다.k6 커맨드를 사용해야 하기 때문에 choco를 사용한다.공식 문서 : https://chocolatey.or..
redis 란?인메모리 데이터베이스 입니다. 데이터베이스, 캐시, 스트리밍 엔진, 메시지 브로커 등으로 사용 될 수 있습니다.즉, 모든 데이터를 메모리에 젖아하고 조회하기 때문에, 빠른 Read, Write 속도를 보장하고, 다양한 자료구조를 지원한다.key-value 구조의 데이터 관리 시스템이다. 즉, in-memory, NoSql 이다. redis 특징- 영속성을 지원하는 인메모리 데이터 저장소- 읽기 성능 증대를 위한 서버 측 복제를 지원- 쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원- 다양한 서비스에서 사용되며 검증된 기술- 메모리 저장소임에도 불구하고 많은 데이터형을 지원한다. Redis 영속성레디스는 지속성을 보장하기 위해 데이터를 DISK에 특정 시점에 저장합니다.데이터를 DISK에 저..
😁 쓰레드란?thread란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.쓰레드는 한줄씩 코드를 실행한다.쓰레드는 멀티 태스킹에서 쓰이는 워크플로우의 최소 단위이다. 왜 쓰레드가 존재하는 지 그리고 쓰레드를 하나만 있을 때 문제점을 보고, 어떻게 해결할 지 함께 아래 글을 보며 생각해보자! 쓰레드 하나일 때를 가정하고, 단일 요청이 들어왔을 때1. 아무런 요청이 없을 때 쓰레드는 휴식을 취하고 있다.2. 요청이 들어오면 휴식하고 있던 쓰레드가 있으니 할당해준다. 그 이후 쓰레드는 servlet을 호출하여 코드를 실행한다.3. 쓰레드를 할당 후 코드를 실행하고 클라이언트에 응답을 보내준다.4. http는 비연결성이다. 즉, 응답..
스프링을 사용하지 않고 Dynamic Web을 만들 때 의문이 발생했다.왜 Servlet을 여러개 나누지 않는걸까? 주소를 나누면 되는 것이 아닌가?@WebServlet("/main")public class MainServlet extends HttpServlet@WebServlet("/login")public class LoginServlet extends HttpServletServlet이 Spring의 Controller의 역할을 한다고 착각하고 있었다. Servlet은 Spring에서 FrontController 역할을 하고있다.Servlet이 여러개 있으면 발생하는 문제점.Servlet의 생명주기는 Web Container가 꺼질 때까지 반영구적이다.즉, Servlet 객체는 한번 생기면 서버가..
Access Token은 private value 에 Refresh Token은 HttpOnly 쿠키에 저장한다.Access Token, Refresh Token의 저장위치를 선택한 과정을 XSS, CSRF 와 연관하여 설명하려고 한다.Access Token 저장 위치프론트엔드의 private value에 저장한다.즉, 가장 안전한 곳에 저장을 하는 것이다.새로고침을 할때마다 초기화 되는 문제가 있고, 만료시간이 짧다는 단점이 있다.그래서 사용하는 것이 RefreshToken이다.Refresh Token 저장 위치브라우저의 HttpOnly쿠키에 저장한다.쿠키는 HttpOnly를 사용하여 XSS 공격을 미리 방지한다.왜 HttpOnly쿠키에 Refresh Token을 저장할까?HttpOnly쿠키 먼저 쿠키..
Spring Boot 프로젝트 만들기스프링 프로젝트를 만들기 위해 Spring Boot initializr 사이트로 이동한다.https://start.spring.io/Spring initializrDependencies 에서 Spring Web 을 추가한다.intellij 에서 만들어진 demo 프로젝트를 실행해보기 DemoApplication.java위와 같이 SpringBoot가 terminal에서 뜨면 성공!github에 프로젝트 올리기github에서 repo를 하나 만든다.프로젝트에서 terminal을 열어서 github로 spring boot를 올린다,intellij - demo project 폴더 안 terminal 에서 명령어를 친다.demo > git initdemo > git remot..
ckm7907
'BACKEND' 카테고리의 글 목록