본문 바로가기

개발기술

(59)
SQL과 NoSQL NoSQL관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화된 저장소스키마 없이 사용간ㅇ하거나 느슨한 스키마를 제공하는 저장소 전통적인 **관계형 데이터베이스 관리 시스템(RDBMS)**은 분산 데이터베이스와 같은 방식으로 데이터를 수평적으로 확장하는 것이 본질적으로 어렵습니다. RDBMS는 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 유지하며 데이터의 일관성과 무결성을 보장하는 데 최적화되어 있는데, 이 특성 때문에 데이터베이스를 여러 노드에 분산하는 데 있어 몇 가지 중요한 제약이 있습니다.RDBMS의 확장성 제약수직 확장(Vertical Scaling)에 의존:전통적으로 RDBMS는 하나의 강력한 서버에서 실행되도록 ..
인프라 확장 스케일업 : 단일 서버(하드웨어)의 성능을 증가시켜 더 많은 요청을 처리하는 방법 스케일아웃 : 동일한 사양의 새로운 서버(하드웨어)를 추가하는 방법일반적으로, 스케일업을 할때에는 서비스 중단이나 추가적인 하드웨어 비용이 발생한다. RDBMS는 스케일 업을 하기위해서는 새로운 서버에 기존 서버의 데이터를 옮기고 데이터를 정리하는데 번거로운 작업이 필요함.반면, NoSQL은 처음부터 스케일 아웃을 염두에 두고 설계되었기때문에 데이터의 증가나 요청량이 증가하더라도 비슷한 사양의 새로운 하드웨어를 추가하면 문제가없음.   Horizontal Scaling (Scale-Out)What It Is: Horizontal scaling involves adding more machines (or nodes) to t..
Redis (Redis작동법, Spring 연결) 레디스 DB의 디스크가 아닌 메모리에 저장하여 휘발성이 있지만 영속성 기능을 지원하기도 함. 안정성이 비교적 떨어지기 때문에주로 캐시서버로 사용됨.인덱스방식이 아니라 key-value방식으로 저장다양한 방식의 데이터타입 적용가능 (hash나 list같은 데이터 저장가능)tomcat과는 다르게 embedded방식이 아니라 OS내에 설치하여 별도의 서버로 동작한다.(micro service) 레디스 종류싱글인스턴스방식 센티넬, 클러스터방식 - 마스터 슬레이브 구조을 하여, 서버 한대가 죽더라도 다른 서버가 살아있으면 구동 가능하도록 구현 레디스 활용점1. 캐쉬서버로서 DB로의 직접접근을 최소화시킴2. 동기화 문제를 해결하기 위해서 DB의 Serializable을 대신해서 SpinLock을 구현 OS 내에 레..
프로젝트 설계 및 문서화 IT비즈니스 프로세스  비즈니스 프로세스는 구체화정도에 따라서 사업 - 기획- 개발의 순서로 이루어진다. 회사의 주요 의사결정자들이 사업을 결정한다. (의사결정이 존재하기때문에 이에 따른 위계질서가 존재함) 사업방향이 결정되면 기획자들과 사업자들이 해당 시장에 대한 데이터를 모으고 논의를 하면서 사업의 구체화가 이루어진다. 사업이 충분히 구체화되면 기획단계로 넘어가고, 서비스의 객체와 기능, 범위, 프로세스 등을 정의한다. 기획단계가 마무리되면 개발자단계로 넘어가고 사업기획의 기술적 관점에서 가능여부를 검토하여 기획의 세부내용을 수정한다. 개발명세서검토 (은행계좌생성 예제)1.  기술스택 결정  개발자는 내부 개발자원을 감안하여 개발언어, 기술스택, DB종류, DBdrive 등을 결정한다. 2. 각 기능..
Java 쓰레드 관리 쓰레드 개념정립 스레드는 어떻게 생성되는가?   자바에서는 모든 것과 마찬가지로 스레드도 객체로 다룬다. 자바는 실행 시점에 `main` 이라는 이름의 스레드를 만들고 프로그램의 시작점인 `main()` 메서드를 실행한다.  스레드를 생성하는 코드는 main 스레드는 main 메서드 내에서 정의된 것처럼, 새로운 스레드 객체를 생성한 후 , 스레드의 start() 메서드를 시작한다. 그러면, JVM이 OS system call을 통해 새로운 스레드를 위한 별도의 스택 공간을 할당한다. 새로운 스레드는 이어서 스레드 인스턴스 내에 정의되어 있는 `run()` 메서드를 실행하여 정의된 작업을 실행한다. 여기까지가 스레드의 start() 동작이다. main 스레드는 새로운 스레드의 start() 메소드를 동작..
디자인패턴 디자인패턴 싱글톤패턴하나의 인스턴스만 사용되는 경우. 하나의 인스턴스가 사용되지 않는 경우에는 인스턴스의 멤버변수에 저장/입력된 값들이 다른 인스턴스에 공유되지 않는다.  이로인해서 예상한 데이터를 찾을 수 없어서 문제가 발생하기도 함.빌더패턴장점1 : Setter대신 빌더패턴을 사용하면, 한번 생성된 instance의 값은 변경되지 못하게 하여 thread safe를 확보할 수 있음장점2 : 순차적으로 field를 하나씩 설정할 수 있어서 readbility가 증진됨. 필요한 데이터만 설정할 수 있어서 유연성이 증가됨장점3 : 필요한 데이터만 설정할 수 있어서 유연성이 증가됨스태틱팩토리패턴  프록시패턴프록시 패턴의 핵심은 바로 인터페이스의 동일성을 유지함으로써, 클라이언트가 실제로 대리 객체를 사용하고..
특정기능 특화알고리즘 트라이(Trie) : 자연어 처리/문자열 검색트라이는 특정 문자열 집합의 접두사를 공유하는 방식으로 문자열 데이터를 저장하고 검색하는데 최적화되어 있습니다. 이 구조는 자동 완성, 스펠 체크, IP 라우팅(가장 긴 접두사 일치를 찾는 데 사용)과 같은 여러 애플리케이션에서 유용하게 사용됩니다.* 대안으로 sql문의 like연산자를 사용가능 (select * from company where name like "keyword%") 노드 구성: 트라이의 각 노드는 자식 노드를 가리키는 포인터 배열을 가지고 있습니다. 배열의 인덱스는 특정 문자를 나타내고, 각 인덱스 위치의 값은 해당 문자로 시작하는 서브트리를 가리킵니다. 노드는 일반적으로 해당 노드가 문자열의 끝인지를 나타내는 플래그도 포함합니다. 장점:문..
데이터 베이스 최적화 고려요인 저장되는 데이터 타입을 고려문자열인지, 숫자인지, 숫자의 범위인지, 문자열의 길이는 어떻게 되는지문자열과 숫자: 데이터의 성격에 따라 적절한 타입을 선택합니다. 예를 들어, 숫자 타입은 정수(INTEGER), 부동 소수점(FLOAT, DOUBLE), 고정 소수점(DECIMAL) 등이 있으며, 각 타입은 저장할 수 있는 값의 범위와 정밀도가 다릅니다. 문자열의 경우, 고정 길이(CHAR)와 가변 길이(VARCHAR)를 구분하여 사용해야 하며, 길이 제한을 설정함으로써 메모리 사용을 최적화할 수 있습니다.데이터 타입 선정 기준: 데이터의 최대 크기, 사용 빈도, 쿼리의 종류에 따라 타입을 선정합니다. 예를 들어, ID 값이나 코드 값은 VACHAR보다는 CHAR로 고정하는 것이 검색 속도 향상에 도움이 될 ..