Application
Java Thead
프로세스와 스레드 프로세스란 운영체제에서 실행 중인 하나의 애플리케이션을 의미한다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 독립적인 메모리를 할당받아 애플리케이션의 코드를 실행한다. 스레드는 하나의 실행 흐름으로 프로세스 내의 여러 스레드를 가질 수 있다. 멀티 프로세스 vs 멀티 스레드 멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 할 수 있다. 멀티 프로세스들은 운영체제에서 할당받은 자신의 독립적인 메모리를 가지고 있어서, 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않는다. 반면에 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 해당 프로세스 자체가 종료..
로컬에서 임베디드 S3 사용하기
파일 업로드와 S3 파일 업로드 기능을 구현할 때, 주로 확장성이 좋은 AWS에서 제공하는 S3 서비스를 이용해서 많이 구현할 것입니다. Spring Cloud AWS S3 연동 및 파일 업로드 스프링에서 프로필 사진 업로드 등 파일을 업로드하는 경우 Spring Cloud를 통해 쉽게 개발하실 수 있습니다. 참고로 지난번 AWS S3에 파일 업로드 하는 방법에 비해 좀 더 개선된 방법으로 글 올려보 willseungh0.tistory.com 문제 사항 로컬 혹은 테스트 환경에서 AWS S3을 사용해서 파일 업로드 기능을 테스트가 필요한 상황이 있습니다. 이때마다 실제 S3 버킷에 파일을 업로드하는 것은 비효율적이다. 이를 개선하기 위해서 테스트 환경에서는 런타임 시점에 Stub 객체를 주입하는 방식으로..
JVM이란? JVM의 구조 간단 정리
JVM이란? JVM은 Java Virtual Machine으로, Java와 OS 사이에서 중간자 역할을 수행합니다. JVM은 자바 컴파일러(javac)에 의해 소스코드 (.java)로 부터 변환된 자바 바이트코드(. class)를 해당 OS에 맞게 해석해주는 역할을 수행합니다. 효과 이때, 자바 컴파일러에 의해 생성되는 자바 바이트 코드는 기계어가 아니라 OS에서 바로 해석할 수 없습니다. 기존의 C와 같은 언어는 소스를 컴파일하면 OS에서 바로 실행될 수 있는 실행파일 즉 기계어로 컴파일되는 반면, 왜 자바와 같은 JVM언어는 바로 기계어로 컴파일하지 않고, 중간에 바이트 코드로 변환하여 JVM이 바이트 코드를 실행하는 방식을 사용할까? 기존의 C와 같은 언어 방식은, 운영체제가 바뀔때 마다 그에 맞는..
스프링 인터셉터와 어노테이션으로 인증 및 권한 관리하기
사이드 프로젝트를 진행하면서 좀 더 효율적으로 인증 및 권한 관리를 할 수 없을까 고민하면서 해 본 방법을 정리한 글입니다. 기존의 상황 먼저 사이드 프로젝트의 요구사항을 보면, 비회원 유저와 회원 유저(Member)로 구분되며, (인증 체크 필요) 여러 유저가 속해 있을 수 있는 그룹(Organization)이라는 개념이 존재하며, 그룹 내에 관리자(ADMIN)와 일반(USER) 멤버 두 가지 형태로 존재하며 각기 다른 권한 범위를 가지고 있습니다. (권한 체크 필요) 요약하면 현재 저희 프로젝트에서 현재까지 필요한 인증 및 권한 작업은 로그인하지 않아도 되는 API (인증이 필요 없는 API) 로그인이 필요한 API (인증이 필요한 API) 특정 그룹에 속해 있어야 하는 API (관리자 or 일반 멤..
[JPA] 1차 캐시 vs 2차 캐시
JPA에 대해서 헷갈렸던 개념들을 위주로 정리하는 글입니다. 1차 캐시와 2차 캐시 네트워크를 통해 데이터베이스에 접근하는 시간 비용은 애플리케이션 서버 내부 메모리에 접근하는 시간보다 훨씬 비싸다. 따라서 조회한 데이터를 메모리에 캐싱해 두면 데이터베이스 접근 횟수를 줄여 성능을 개선할 수 있다. 1차 캐시 영속성 컨텍스트 내부에는 엔티티를 보관하는 저장소가 있는데 이를 1차 캐시라고 한다. 일반적으로 트랜잭션을 시작하고 종료할 때까지만 1차 캐시가 유효하다. OSIV를 사용하더라도 사용자의 요청이 들어올 때부터 끝날 때까지만 1차 캐시가 유효하다. 특징 같은 엔티티가 있으면 객체 동일성을 보장한다. (==) 2차 캐시 애플리케이션 범위의 캐시로, 공유 캐시라고도 한다. 따라서 애플리케이션을 종료할 때..