분류 전체보기

필자는 docker로 mysql-container를 열어서 사용했다.아래의 순서대로 mysql-container에 접속한 후, 사용자 목록을 확인하고, spring boot에서 연결할 sql의 유저를 추가한다. 먼저 mysql docker 환경에 접속한후, root로 접속한다.docker exec -it mysql-container /bin/bashmysql -u root -p 그 후 mysql을 사용하고, 어떤 유저가 존재하는 지 확인한다.use mysql;select user, host from user; 사용자를 만든다. (필자는 jamjam으로 만들었다.)create user 'jamjam'@localhost identified by '${password}'; 이 후 jamjam에게 모든 data..
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 HttpServlet Servlet이 Spring의 Controller의 역할을 한다고 착각하고 있었다. Servlet은 Spring에서 FrontController 역할을 하고있다. Servlet이 여러개 있으면 발생하는 문제점. Servlet의 생명주기는 Web Container가 꺼질 때까지 반영구적이다. 즉, Servlet 객체는 한..
개요 스프링의 동작하는 방식에 대해 고민을 할 때, 서블릿이 관련되어 있다. servlet이 무엇일까? 서블릿을 한 줄로 정리하면 다음과 같다. 클라이언트 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹프로그래밍 기술 Servlet 특징 - 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트 - html 을 사용하여 요청에 응답한다. - Java Thread를 이용하여 동작한다. - MVC 패턴에서 Controller로 이용된다. - HTTP 프로토콜 서비스를 지원하는 HttpServlet 클래스를 상속받는다. - UDP 보다 처리 속도가 느리다. - HTML 변경 시 Servlet을 재 컴파일해야 하는 단점이 있다. Servlet 동작 흐름 1. ..
ckm7907
'분류 전체보기' 카테고리의 글 목록