자바는 동시성 문제를 위해 4가지 해결책을 갖고 있다. Syncronized 키워드 Concurrency 라이브러리 Atomic volatile 우리는 그 해결책인 4가지 키워드를 잡고 학습해볼 것이다. Synchronized 자바는 mult-thread 를 지원하는 언어이기 때문에 여러 thread가 자원을 공유하는 경우 RaceCondition이 발생하고 데이터 일관성을 지킬 수 없게되는 위험 요소가 존재합니다. 그렇기 때문에 항상 동기화를 통해 임계영역에서 안전하게 작업하는 동안 Lock을 걸어 문제를 줄여야 하는데 이 때 사용하는 키워드가 Synchronized이다. synchronized 키워드는 공유 자원에 대한 동시접근을 막아준다. 코드는 다음과 같이 사용하면 된다. 블록에 거는 방법 pub..
정확히 말하자면 자바는 Synchronous / blocking 방식을 지원하는 언어다. 그렇다면 Synchronous / blocking이란 무엇일까? 그리고 반대 되는 Asynchronous / non-blocking에 대해서도 알아보자 Synchronous / Blocking 먼저 각자의 뜻을 알아보면 Synchronize는 간단하게 두 개의 주체가 서로 동시에 수행하거나, 동시에 끝나거나 끝나는 동시에 시작하는 것을 말한다. 이를 쉽게 예로 들자면 이런 것이다. 한명의 직원이 있고 상사가 있다고 가정해보자 동기적으로 동기적인 직원은 상사에게 서류를 제출하고 상사가 일을 처리할 때 까지 계속 물어볼 것이다. 그리고 상사가 일처리를 끝내고 결과를 줘야만 직원은 다시 가서 하던 일을 할 수 있다. bl..
자바는 멀티 스레드 프로그래밍을 지원하는 언어이다. 그렇다 보니 아무 스레드가 와서 마음껏 자원을 읽고 쓰고가 가능하다면 클라이언트가 원하는 정보를 얻기 힘들 것이다. 그렇기 때문에 자바에서는 Lock을 걸어 공유 자원이 Thread-safe 하게 해준다. 그렇다면 자바에서는 어떻게 Lock을 걸 수 있을까? Monitor(모니터) 모니터는 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태이다. 세마포의 소유와 획득 과정을 모니터 자체 내에서 처리하기 때문에 코딩하기에 조금 더 편리하며 잘못된 코딩으로 인한 문제 발생이 세마포보다 덜 하다. 또한 모니터는 세마포의 block/wakeup과 유사한 wait/signal을 제공한다. 세마포는 리스트 형태로 사용하지만 모..
Enum 열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 사계절, 태양계의 항성 등이 좋은 예이다. 자세한 문법에 대한 사용 등은 설명을 생략할 것이다. 궁금하신 분들은 다음 블로그를 참고하시기 바란다. https://blog.naver.com/ilgolc/222474673407 Java_11일차(기선님) 열거체(Enumeration type) C언어와 C++에서는 열거체를 사용할 수 있지만, JDK 1.5 이전의 자바에서... blog.naver.com 자 그러면 열거 타입을 올바르게 사용할 수 있도록 다 같이 공부해보자 int 상수 대신 열거 타입을 사용하라 먼저 정수 열거 타입 패턴에 대해 알아볼 필요가 있다. 코드를 보자 public class Intege..
객체지향 생활 체조 원칙에는 9가지의 원칙이 존재한다. 그 중에 규칙 8을 인용해보면 다음과 같은 규칙이 존재한다. 규칙8. 일급 컬렉션을 사용하라 이 규칙의 적용은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 컬렉션은 매우 유용한 원시타입이다. 많은 동작이 있지만 후임 프로그래머나 유지보수 담당자에 의미적 의도나 단초는 거의 없다. 간단하게 먼저 일급 컬렉션을 보여드리자면 다음과 같다. List list = new ArrayList(); list.add(3); list.add(4); list.add(6); list.add(1); 위 코드를 객체로 한번 감싸 주는 것이다. public class PeopleQueue { private List peoples; public P..
1. MySQL 엔지 아키텍처 MySQL 전체구조 MySQL은 일반 상용 RDBMS와 같이 대부분의 프로그래밍 언어로부터 접근 방법을 모두 지원한다. MySQL 고유의 C API부터 시작해 JDBC나 ODBC 등응 모든 언어로 MySQL 서버에서 쿼리를 사용할 수 있게 지원한다. MySQL서버는 크게 엔진과 스토리지 엔진으로 구분할 수 있다. 그러면 한 번 살펴보자. MySQL 엔진 MySQL 엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 sQL 파서 및 전처리기, 퀴리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다. 또한 MySQL은 표준 SQL(ANSI SQL) 문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행될 수 있다. 스토리지 엔진 ..
- Total
- Today
- Yesterday
- 백엔드
- DevOps
- Spring
- 취업
- JPA
- thread
- 면접 준비
- DB
- 취업준비
- 프로젝트
- 자바
- 동시성
- 프로그래밍
- 개발자
- java
- 취준
- 면접
- 인터뷰
- 코드
- MySQL
- CS
- 면접준비
- Kotlin
- IT
- swarm
- Redis
- 코딩
- 게시판
- docker
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |