[JAVA] ThreadLocal
·
JAVA
동시성 문제 여러 쓰레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제 여러 쓰레드가 같은 인스턴스의 필드에 접근해야 하기 때문에 트래픽 적은 상황에서는 확률상 잘 발생하지 않아서 해당 문제를 찾기가 힘듬 동시성 문제가 발생하는 곳은 주로 같은 인스턴스의 필드(주로 싱글톤인 인스턴스)나 static 같은 공용 필드에서 접근시 발생하며 이러한 문제를 해결해 주는것이 ThreadLocal임 ThreadLocal 해당 쓰레드만 접근할 수 있는 특별한 저장소를 지칭함 각 쓰레드마다 별도의 내부 저장소를 제공하여 데이터를 안전하게 보관하여 동시성 문제를 해결해줌 JAVA는 ThreadLocal을 지원하기 위해 java.lang.ThreadLocal 클래스를 제공함 ThreadLocal 사용법 Thr..
[JAVA] 템플릿 메소드 패턴
·
JAVA
정의 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체 일을 수행하는 구조를 바꾸지 않으면서 특정 단계를 수행하는 내역을 바꾸는 패턴 GoF 디자인 패턴의 분류에 행위 패턴에 포함 abstract, final 키워드를 사용해서 구현하며, final 메소드와 abstract 메소드로 로직의 흐름만을 정의하고 구체적인 구현은 하위클래스에 위임함 구현별로 달라질수 있는 메소드들은 구현 클래스에서 선언 후 호출하는 방식으로 함 변하는 것과 변하지 않는 부분을 분리해주는 것을 해결하는 디자인패턴 (EX. 비즈니스 로직 기능은 변함, 로깅 기능은 변하지 않는 부분이며 둘을 모듈화가 가능하게 해줌) 템플릿 메서드 패턴은 템플릿이라는 기준이 되는 틀에서 변하지 않는부분을 몰아두고, 일부 변하는 부분을 별도로..
[JAVA] 전략패턴
·
JAVA
정의 행위를 클래스로 캡슐화하여 동적으로 행위를 자유롭게 바꿀수 있게 해주는 패턴 객체들이 할 수 있는 행위를 각각 전략으로 만들어, 동적으로 전략을 바꿔 행위를 수정하는 패턴 기존코드의 변경없이 실제 로직 변경을 할 수있는 패턴 GoF 디자인 패턴의 분류 중 행위패턴에 해당함 사용하는 용도 클래스들의 동작이 다른 경우 로직 변경이 필요할 때 사용 예시 public interface Skill { void use(); } public class Sett { private Skill skill; public void useSkill() { skill.use(); } public void setSkill(Skill skill) { this.skill = skill; } } public class Haymak..
[NETWORK] TCP NAGLE
·
NETWORK
NAGLE 알고리즘 네트워크 패킷을 줄이기 위해 개발된 알고리즘 ACK를 받을 때까지 출력버퍼에 데이터를 저장하였다가 한번에 보내는 방식 TCP에는 Nagle 알고리즘을 기본으로 사용 NAGLE 알고리즘 장단점 서버를 개발할 때에는 이러한 장단점에 맞춰 NAGLE 알고리즘을 On/Off시킴 (예를 들어서 른 반응이 필요한 부분에서는 주로 Nagle알고리즘을 Off시킴) 장점 : 생산하는 패킷량이 줄어 네트워크 사용 효율 높아짐 단점 : ACK를 기다리기 때문에 전송이 지연되어 속도가 저하됨
[OTHER] TDD (테스트 주도 개발론)
·
OTHER
TDD (테스트 주도 개발론) 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현 TDD 절차 RED - 실패하는 테스트 추가 GREEN - 테스트를 통과하기 위한 구현 REFACTOR - 통과한 테스트의 구현 설계를 개선, 기존 테스트가 통과 RED (테스트 실패) 하나의 요구사항을 검증하는 테스트 코드를 작성 작성된 테스트가 실패하기 위하는지 확인 GREEN (테스트 성공 / 프로덕션 개발) 테스트가 성공하도록 코드를 구현 테스트 성공은 요구사항을 만족한다는 의미 (요구사항을 만족하기 위한 최소한의 뼈대만 세우자, 살 붙이는건 중요도가 낮음) REFACTOR (리팩토링) 코드베이스 정리 구현 설계 개선 중복 코드 제거 /..
[NETWORK] 웹사이트 접속과정
·
NETWORK
웹사이트 접속과정 브라우저에서 URL 주소 입력하여 주소 접근 도메인으로 접속하게 되면 내부적으로 DNS서버에 접근 DNS 서버에서 해당 도메인 네임에 해당하는 IP 주소를 찾아 사용자가 입력한 URL 정보와 함께 전달 URL 정보와 전달받은 IP 주소는 HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 생성하여 HTTP 요청 메시지, TCP 프로토콜을 사용하여 인터넷을 거쳐 해당 IP 주소의 컴퓨터로 전송 검색된 웹 페이지 데이터는 또 다시 HTTP 프로토콜을 사용하여 HTTP 응답 메시지를 생성 생성된 HTTP 응답 메시지는 TCP 프로토콜을 사용하여 인터넷을 거쳐 원래 컴퓨터로 전송 도착한 HTTP 응답 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 데이터로 변환 변환된 웹 페이지 데이터는 웹 ..
[OS] CPU 스케쥴링
·
OS
스케쥴링 프로세스가 생성되서 실행될 때 필요한 시스템의 여러자원을 해당 프로세스에게 할당하는 작업을 의미함 프로세스가 생성되서 완료될 때까지 여러 스케쥴링이 실행됨 스케쥴링 기법 종류 비선점 스케쥴링 : CPU에 할당되어 실행되고 있는 프로세스를 우선순위와 상관없이 강제로 뺏지 않고 (뺏을수 없음) 사용하는 기법 선점 스케쥴링 : 하나의 프로세스가 CPU에 할당되어 실행되고 있는데 우선순위가 높은 다른 프로세스가 할당된 CPU를 빼앗아서 사용하는 기법 비선점 스케쥴링 특징 프로세스가 CPU를 할당 받으면 해당 프로세스가 완료될 때 까지 CPU를 사용 프로세스 응답시간 예측하기가 용이하면서 일괄 처리방식에 적합 우선순위가 높은 작업이 우선순위가 낮은 작업보다 더 늦게 처리되는 경우가 발생할 수 있음 대표적..
[DB] CLUSTERING(클러스터링)
·
DATABASE
Clustering 여러 개의 DB를 수평적인 구조로 구축하여 DB들 간 데이터를 동기화처리 하는방식 Clustering 처리 방식 1개 DB에 쓰기 트랜잭션이 수행되고, COMMIT을 실행됨 실제 디스크에 내용을 쓰기 전에 다른 DB로 데이터의 복제를 요청 다른 DB에서 복제 요청을 수락했다는 신호(OK)를 보내고, 디스크에 쓰기를 시작 다른 DB로부터 신호(OK)를 받으면 실제 디스크에 데이터를 저장 Clustering 구현 방법 클러스터링 구현은 상황에 따라서 알맞은 구조를 선택하면됨 Active-Active : 클러스터를 항상 가동하여 가용 가능한 상태로 유지하는 방식 Active-Standby : 일부 클러스만 가동하고, 나머지 클러스터는 대기상태로 구성하는 방식 Clustering 특징 클러스..
[DB] REPLICATION(리플리케이션)
·
DATABASE
Replication 두 개 이상의 DBMS 시스템을 Master / Slave로 나눠서 동일한 데이터를 저장하는 방식 Replication 처리방식 (MySQL) Master에서 트랜잭션이 수행되면, Master는 데이터를 저장하고 Binary Log에 처리내용을 기록함 Slave에서 IO Thread를 통하여 Master의 로그파일(Binary Log)를 Replay Log로 복사함 Slave의 SQL Thread는 Replay Log파일을 읽어서 Slave에 데이터를 저장함 Replication 특징 DB요청이 거의 Select요청이기 때문에 Replication만으로 성능을 높일 수 있음 비동기 방식으로 지연시간이 없음 Master가 다운되면 복구 및 대처가 까다로움 Master / Slave 간..