본문 바로가기

전체 글

ThreadLocal 1. ThreadLocal 이란? Java.lang 패키지에서 제공하는 쓰레드 스코프 데이터 저장소 같은 쓰레드 scope 내에서 데이터 공유 사용방법은 간단하다. ThreadLocal를 객체를 선언하고 get(),set(),remove() 메소드를 이용하여 저장하면 된다. package com.ssafy; public class Test { static ThreadLocal threadLocal; public static void main(String[] args) throws Exception { threadLocal = new ThreadLocal(); Thread thread1 = new Thread(()-> { threadLocal.set("111"); System.out.println(thre.. 더보기
DB Isolation level 1. Isolation Isolation은 DBMS 특성인 ACID 중 하나로 "트랜잭션이 다른 트랜잭션에 영향을 줘서는 안 된다"는 뜻이다. DBMS에서는 각기 다른 Isolation level를 제공하여 이러한 특성을 만족시켜준다. Isolation은 Trade-off가 있다. 즉 Isolation Level이 높을수록 DBMS 성능이 떨어진다는 것이다. (고립을 시킬수록 동시에 Transaction을 수행하는 Connection 수가 줄어들기 떄문에 성능이 당연히 떨어질 것이다.) 그러므로 무조건 높은 Isolation을 사용하기보다는 자신의 서비스 특성에 맞는 Isolation level를 선택해야한다. 2. Isolation Level ANSI에서는 4가지 트랜잭션 레벨을 제공합니다. 각각에 대.. 더보기
Java 멀티쓰레드 동기화 - (3) AtomicClass https://wjdtn7823.tistory.com/65 https://wjdtn7823.tistory.com/67 Java 멀티쓰레드 동기화 - (1) Volatile Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 그중 Volatile 키워드에 대해서 설명하겠습니다. 1. volatile 키워드 JAVA에서 volatile 키워드는 변수를 read 하고 write 할때 CPU cach wjdtn7823.tistory.com Java 멀티쓰레드 동기화 - (2) Synchronized Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 이번에는 synchronized 키워드에 대해 얘기해보겠습니다. https://wjdtn7823.tistory.com/6.. 더보기
Java 멀티쓰레드 동기화 - (2) Synchronized Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 이번에는 synchronized 키워드에 대해 얘기해보겠습니다. https://wjdtn7823.tistory.com/65 Java 멀티쓰레드 동기화 - (1) Volatile Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 그중 Volatile 키워드에 대해서 설명하겠습니다. 1. volatile 키워드 JAVA에서 volatile 키워드는 변수를 read 하고 write 할때 CPU cach wjdtn7823.tistory.com 1. synchronized 키워드 synchronized는 여러개의 스레드가 객체에 접근하는 것을 제어하여 객체의 thread-safe를 가능케 하는 방식입니다. syncho.. 더보기
Java 멀티쓰레드 동기화 - (1) Volatile Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 그중 Volatile 키워드에 대해서 설명하겠습니다. 1. volatile 키워드 JAVA에서 volatile 키워드는 변수를 read 하고 write 할때 CPU cache가 아닌 메인 메모리에다가 한다고 명시적으로 선언하는 것이다. 보통의 메모리 구조는 아래와 같이 생겼다. CPU 내에는 성능 향상을 위해서 L1 cache가 내장 되어있습니다. 쓰레드에서 같은 변수를 참조하려고 해도 쓰레드마다 다른 캐시를 참조하기 떄문에 불일치 문제가 생깁니다. 이해하기 쉽게 한쪽 쓰레드에서는 flag 를 검사하는 쓰레드(쓰레드 1), 한쪽 쓰레드에서는 flag의 값을 바꾸는 (쓰레드2) 2개의 쓰레드를 만들었습니다. public class T.. 더보기
AOP 1. AOP란? 스프링에서 대표적인 개념 3가지가 있다. (IoC, AOP 그리고 PSA) 그중에서 AOP 에 대해서 말해보겠다. 코딩을 하다보면 서비스마다 비즈니스 로직들이 있을거고, 반면 공통되는 부가 기능이 있다.(로깅, 성능 측정, 데이터베이스 연결 등등) 여기서 우리가 핵심적으로 개발하고 싶은 부분은 당연히 비즈니스 로직이지만, 서비스마다 공통 되는 코드들이 퍼져있어 관리하는데 문제가 생긴다. 그림과 같이 A ,B ,C 서비스 가 있고 서비스마다 공통되는 X ,Y , Z 기능을 사용한다. 이상황에서 X -> X', Y -> Y', Z -> Z' 으로 바꾼다고 생각하면 일일히 다 바꿔줘야 될것이다. 그렇다고 X ,Y ,Z 를 함수로 묶은 후에 클래스에 넣는다고 하면 부가기능 함수와 기존 비즈니스 .. 더보기
MSA 하는데까지 만들어보기 - (1) 1. MSA 란? MicroService Architecture 로 하나의 거대한 Monolithic 한 앱을 작은 단위의 서비스로 쪼개서 개발하는 것이다. 기존의 서비스들은 대부분 Monolithic하게 개발되어 있고 작은 규모에서는 Monolithic 한 구조가 오히려 더 나을수도 있습니다. (서비스 구성이 간단하기 떄문이죠.) 하지만 서비스가 커지게 되면 Monolithic 한 아키텍처로는 다음과 같은 문제점이 발생합니다. 1) 빌드, 배포, 테스트 시간이 기하급수적으로 증가합니다. (당연히 코드가 커질테니) 2) 서비스를 부분적으로 Scale-up 하기 힘듭니다. (예를 들어 내 사이트의 A ,B ,C 기능 중 C를 사용하는 사용자가 많으면 C만 증가하기 싶어도 그렇게 할수 없다. 즉, Mutli.. 더보기
Nginx 서버 1. Nginx가 하는 일 1-1. 웹서버(HTTP Server) 우리 보통 아는 웹서버처럼 클라이언트(앱, 브라우저 등등)으로부터 요청이 들어올때 요청에 맞는 정적파일(html, css, javascript) 을 리턴해주는 역할을 합니다. 1-2. reverse proxy (소프트웨어 로드 밸런서) Nginx가 가짜 웹서버로 동작하며 클라이언트로부터 Nginx 로 요청이 들어오면 Nginx 가 직접 응답하는게 아니라 이 요청을 등록된 다른 서버로 전달하는 역할을 한다. Nginx 설정파일인 /etc/nginx/nginx.conf 파일에는 server라는 블록이 있다.(프록시 서버) 프록시 서버에 포트를 할당하고 location 블록을 이용하여 url 에 대한 리다이렉션 설정을 해주면 된다. 특히 Vue.. 더보기