Reflection API란? reflection은 힙 영역에 로드된 class 타입의 객체를 통해 원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고 인스턴스의 필드와 메소드를 접근 제어자와 상관없이 사용할 수 있도록 해준다. 실제로 reflection을 이용하여 Spring이나 Java 직렬화(jackson) 또는 JPA 같은 기술에서 많이 사용되고있는 기술이다. 제공해주는 method를 통해서 알아보자 public class Test { public static void main(String[] args) { Class collection = Class.forName("java.util.Collections"); System.out.println(collection); Class double = ..
Thread 가시성이란 ? Thread 가시성이란 Thread의 시야 범위를 뜻한다. 공유하는 변수에 연산이 일어날 때 CPU를 점유하고 동작하는데 이 때 main memory에만 존재하는 것이 아니라 CPU cache에도 공유하는 자원에 대한 데이터가 들어있다. 이 때 CPU cache를 읽어오는데 언제 main memory에 옮겨갈 지 모르기 때문에 여러 thread가 동시에 읽음 연산과 쓰기 연산을 한다면 main memory에서 cache로 데이터를 옮기는 과정에서 다른 thread가 연산을 진행하여 결국 데이터 불일치 문제가 생기는 것이다. 이런 불일치 문제를 Thread 가시성 이슈라고 하며 자바에서는 volatile 키워드를 통해 해결할 수 있다. volatile은 캐시가 아닌 main me..
최근 회사에서 작업을 하면서 문제가 생긴 이력이 있다. 발생한 이슈는 50000개 이상의 데이터를 고객에게 전달해줘야하는 배치 프로그램에서 약 400 ~ 500개의 데이터가 손실된 것이었다. 재빨리 문제를 파악하기 시작하였고 원인은 다음과 같았다. 현재 ArrayList는 heap 영역에 올라가 있어 Thread간에 자원을 공유하고 있는 상황이다. 자원을 공유하기 때문에 함수를 실행하는 과정에서 race condition이 발생하였고 데이터가 덮어씌워졌다. 이 문제를 해결하기위해 우리는 발생의 근원이 되는 Concurrency(동시성)과 Parallel(병렬성)에 대해 알아보고 문제를 해결하기 위한 전략까지 살펴볼 것이다. Concurrency 동시성은 한마디로 설명하면 동시에 실행되는 것 처럼 보여지는..
컴퓨터는 하나의 프로그램을 실행하여 사용자들로 하여금 서비스를 이용할 수 있게 하는데 이를 Process 라고 한다. 이 프로세스는 안에 작업을 하는 주체가 따로 존재하는데 우리는 이를 Thread라고 부른다. Thread를 알기 위해서는 프로세스에 대해 알아야할 필요가 있다. 프로세스를 시작으로 멀티스레드 동시성 까지 천천히 알아가보도록 하자 Process Process는 CPU 자원을 할당 받아 프로그램을 실행시킨다. Process안에는 프로그램을 실행시키기 위한 여러 주체가 존재하는데 안을 간단하게 살펴보자. 1. PCB 프로세스 제어 블록이라 불리는 PCB는 프로세스 고유 식별자(PID)와 레지스터 프로세스 상태등을 저장하고 있다. 프로세스가 생성과 동시에 고유한 PCB가 생성되고 OS는 PCB를..
자세한 내용은 Github를 참고해주시기 바랍니다. 오늘은 레포지토리에 대해 얘기를 해보겠다. 레포지토리는 일단 설계부터 추상화를 이용해 구체화에 의존하지 않는 것이 핵심이라고 생각한다. 구체화에 의존하는게 왜? 객체지향을 공부했더라면 알 것이다. 구체화에 의존하는 것은 유지보수성을 떨어트린다. 우리가 알아야하는건 저장소이지 구체적으로 어떤 저장소인진 알아야할 이유가 전혀 없다. 오히려 그렇게 된다면 저장소가 바뀔 때마다 우리는 그에 맞춰 서비스도 바꿔주어야한다. 예를들어 우리는 QueryDSL을 이용하다가 갑자기 JOOQ로 넘어가야하는 상황을 가정해보자 그럴려면 우리는 JOOQ에 관련된 레포지토리를 만들고 그걸 서비스에 주입시켜줘야한다. 거기서 만약에 MyBatis까지 넣어준다면 MyBatis에 관련된..
자세한 내용은 Github를 참고해주시기 바랍니다. 자 이제 엔티티를 개발할 차례다. 사전에 먼저 용어 부터 정리하도록 하자. 도메인 모델패턴 DDD에서 정의한 도메인 모델을 먼저 간략하게 보면 다음과 같습니다. 전 글인 서비스 로직 구현에서 도메인 계층에 도메인 정보와 비즈니스 규칙을 정의한다고 했는데 그렇다 이렇게 정의 된 모델을 도메인 모델이라고 한다. 그리고 이러한 개발 패턴을 도메인 모델 패턴이라고 하는데 이러한 패턴은 객체 지향 언어를 이용해 개념 모델에 가깝게 구현할 수 있고 도메인 개념을 모델을 통해 한눈에 이해할 수 있게 할 수 있다는 장점이 있다. JPA 값 타입 JPA에서는 내장 타입을 이용해 식별관계 테이블을 정의할 수 있습니다. 이것을 이용해서 읽기 전용인 VO객체를 만들어 도메인..
이제 서비스를 구현해볼 차례다. 먼저 서비스는 애플리케이션 레이어에 해당하는데 보통 비즈니스를 구현하는 구현부라고 생각하면 된다. 물론 이미 여러분들은 틀이 완성 되어있을 것이다. 컨트롤러를 먼저 만들었기 때문에 없는 클래스들은 alt + enter(mac. option + enter)를 이용하면 쉽게 틀을 만들 수 있다. 또한 ReadService와 Service가 따로 구현이 되어있는데 Transactional을 공통으로 사용할 수 있어 간결하게 코딩이 가능하며 나중에 Read와 Write 도메인이 분리되더라도 영향도를 줄일 수 있고 분리된 서비스를 기반으로 빠르게 리팩토링이 가능할 수 있습니다. @Service @Slf4j @RequiredArgsConstructor @Transactional pu..
Index란? 인덱스는 말 그대로 책의 맨 처음 또는 맨 마지막에 있는 색인이라고 할 수 있다. DBMS는 DB 테이블의 모든 데이터를 검색해서 원하는 결과를 갖고 오려면 오래 걸리는데, 이를 빠르게 처리하기 위해 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어 두어 값을 빠르게 탐색한다. 하지만 새로운 값을 추가하거나 삭제, 수정 시 쿼리문 실행 속도가 느려지는데 저장 성능을 희생하고 데이터의 읽기 속도를 높이는데 포커스를 맞춘 것이다. 삽입 삭제 수정 시 정렬이 된 상태로 저장이 되어야하는데 원래 있던 데이터에서 여러가지 변경해야할 비용이 발생하여 이때에는 인덱스는 효율적이지 않다. Index 자료구조 B+ Tree 인덱스 알고리즘 일반적으로 사용되는 인덱스 알고리즘은 B+..
Global Setting관련해서는 GitHub를 확인해주세요. (JWT와 Security는 매우매우 중요해서 추후 블로그 올립니다.) 우린 컨트롤러부터 서비스 엔티티 순으로 내려가며 개발할 예정입니다. 그렇다면 여기서 의문이 생길겁니다. 왜 컨트롤러부터 개발하나요 ? 먼저 제 생각을 말씀드리면 개발 속도와 깔끔한 아키텍처를 위해서 입니다. 저희는 개발하면서 Entity를 먼저 개발해왔지만 그런식의 개발은 Entity에 의존적인 개발을 할 수 없게 만들고 Entity에 의존적인 개발을 한다는 것은 결국 데이터 중심의 애플리케이션 개발이기 때문에 객체 중심의 개발이 이루어지는 요즘과는 맞지 않습니다. 그렇기 때문에 이벤트 기반으로 먼저 개발을 진행한 후 이벤트에 필요한 속성들을 모아 Entity를 개발하는..
블로그 프로젝트 시작이유 현대 백엔드 기술 중 가장 많이 쓰이는 기술들을 골라보라고 하면 대표적으로 Redis, Spring Boot, JPA 그리고 MySQL 등이 있습니다. 블로그 프로젝트는 이 기술들을 적절하게 사용하는 법을 제시할 예정입니다. 또한 FE와 협업하기위한 최적의 솔루션을 제시할 예정입니다. (본인피셜이니 거를 사람들은 걸러도 됩니다.) 혹시나 본인이 간단한 게시판 프로젝트를 통해서 실력을 높이고자 한다면 제 블로그를 보며 하는 것도 추천 드립니다. 그러면 우선 설계 부터 해봅시다. 블로그에서 일어날 수 있는 이벤트 들을 정리해보면 다음과 같습니다. 게시판 스터디 회원님 분들과 같이 작성한 이벤트 들입니다. 도메인 별로 이벤트를 나눴습니다. 그렇다면 이제 여기서 백엔드 영역의 기능들로 ..
- Total
- Today
- Yesterday
- java
- swarm
- 코딩
- 인터뷰
- 면접
- 동시성
- 면접 준비
- 백엔드
- JPA
- Kotlin
- thread
- Redis
- DB
- 개발
- IT
- 개발자
- 취준
- CS
- 면접준비
- 게시판
- 취업
- docker
- 프로그래밍
- 프로젝트
- 코드
- MySQL
- Spring
- 취업준비
- 자바
- DevOps
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |