본문 바로가기
728x90

분류 전체보기101

캐시란? 캐시에 대하여 캐시는 일정 기간동안 임시로 데이터 하위집합을 저장하기 위한 fast data storage layer입니다. 캐시는 어디에나 존재합니다. 하드웨어 캐시(ex. L1, L2), 페이지 캐시, 데이터베이스 캐시, API캐시, DNS캐시, 브라우저 캐시 등등.. Cache 는 ubiquitous 합니다. 캐시가 필요한 이유는 무엇일까요? 캐시는 origin data source보다 빠르므로 데이터 검색 속도를 높입니다. 또한 캐시는 복잡하거나 resource intensive한 작업을 미리 수행하여 데이터 조회를 효율적으로 만들 수 있습니다. 보통 우리는 생성 비용이 높거나, 잘 변하지 않는 데이터를 TTL을 두고 캐시해 두곤 합니다. 결과적으로 서버 혹은 데이터베이스로의 로드를 줄일 수 있고, end-us.. 2024. 1. 5.
연습#31 안녕하세요. 오늘은 문자열 rotate문제를 풀었습니다. 저는 그냥 열심히 반복문 돌려서 풀었는데요. 어떤 분은 엄청난 아이디어를 가져왔습니다. public boolean rotateString(String A, String B) { return A.length() == B.length() && (A + A).contains(B); } 미쳤다.. 어차피 rotate를 하게 되면 같은 문자열이 한번 더 붙는 형태가 되는데요, (ex. abcde를 rotate하면 abcdeabcde) 여기서 B가 포함되면 true인 것입니다. 혹시 당신은 천재..? 2024. 1. 5.
샤딩, 분산 데이터 스토리지에 대하여 데이터가 많아져 애플리케이션 속도에 영향을 끼치기 시작하면 샤딩을 고민합니다. 또는 데이터가 없더라도 분산 데이터 스토리지를 선택하곤 합니다. 하지만 수십억 개의 데이터가 있는 테이블이 있고, 이 테이블을 사용하는 유즈케이스가 단일 머신에 적합하다면 샤딩해야할 필요가 없습니다. 왜냐하면 샤딩은 무한한 확장이라는 장점이 있긴 하지만 운영 복잡성이 올라가고, 애플리케이션의 책임이 늘어나는 등 꽤 비싼 비용이 들기 때문입니다. 샤딩을 선택하기 전에 다음과 같은 해결책을 고민해봐야 합니다. 1. Scale Up 수직적 확장이라고 표현하는 스케일업은 머신의 리소스 자체를 업그레이드 하는 것입니다. 언젠가 하드웨어의 업그레이드 또한 한계에 도달할 수 있으나 그때까지는 애플리케이션과 데이터베이스의 아키텍처를 재설계 .. 2024. 1. 5.
연습#30 하나 더 풀었습니다. 알고보니 과거에 풀었던 문제더라구요? 그래서 다른 방식으로 접근했습니다. class Solution { public int subtractProductAndSum(int n) { int sum = 0; int product = 1; while(n != 0) { sum += n%10; product *= n%10; n = n/10; } return product-sum; } } 2024. 1. 4.
연습#29 매우 EZ한 문제를 풀었습니다. 얏호!!! 쉬운 문제가 나와서 아주 좋네요~~~ 2024. 1. 4.
SpringBoot의 Configuration(proxyBeanMethods) 스프링부트 @Configuration어노테이션에 proxyBeanMethods를 true/false로 on/off 할 수 있습니다. default는 true로 proxy객체를 생성합니다. false로 설정하고 Bean생성 팩토리 메소드를 호출했을 때 proxy객체 생성이 되지 않고 자바 팩토리 메소드를 사용하는 방식처럼 그대로 다른 객체가 만들어집니다. (즉 매번 같은 객체가 반환되는 것이 아니라, 새로운 객체가 만들어집니다) 이 부분은 좀 시간을 내서 살펴봐야 할 것 같습니다. 2024. 1. 4.
Nested Class 종류와 Nested Static Class 사용에 대한 고찰 안녕하세요. Java에서는 Class안에 있는 Class를 Nested Class(중첩클래스)라고 부릅니다. 그리고 이 중첩 클래스는 두 개로 나뉘어 집니다. static class inner class 두 개로 나뉘어지는 이 클래스들은 매우 다른 의미를 가지게 됩니다. 이 중에서 static class에 대해 저의 생각을 한 번 작성해보려고 합니다. 먼저 두 클래스의 차이를 간략하게 알아보겠습니다. nested static class는 outer class 안에 있긴 하지만, 독립적인 존재입니다. nested static class의 경우 그냥 클래스를 파일로 빼도 상관 없습니다. 그러므로 하나의 클래스 안에 있을 뿐이지 outer class의 프로퍼티를 nested static class에서 직접적으.. 2024. 1. 4.
Side Cache / Transparent Cache 캐시에 대해 공부하다가 Side Cache, Transparent Cache 키워드를 보았습니다. 이 두가지 키워드를 알아보겠습니다. Side Cache 전통적인 external cache의 형태를 뜻합니다. 캐시는 데이터베이스와 독립적으로 구성되어 있고, 애플리케이션 개발자가 캐시와 데이터베이스간 처리를 핸들링해야 합니다. (ex. 캐시의 일관성을 유지한다든지, write시에 캐시와 데이터베이스 모두에 쓴다든지..) 읽기는 캐시에서 수행되며 데이터가 miss되면 별도의 읽기를 데이터베이스에 전달해야 합니다. Transparent Cache 위에 설명한 Side Cache의 단점인 애플리케이션 개발자의 부담을 어느정도 해소한 모델입니다. 단일 데이터베이스 쿼리만 실행하면 됩니다. 애플리케이션에서 핸들링이.. 2024. 1. 4.
연습#28 하.. 트리.. 어렵다.. 난 바보인가.... 핀선생님 도움으로 풀었지만... ㅠ 고생했습니다. 2024. 1. 3.
Dense/Sparse feature(data) 데이터 시스템을 공부하다가 Dense/Sparse feature(data)라는 키워드를 보았습니다. 조금 찾아보니 데이터시스템에서 사용되며 특히 머신러닝에서 많이 사용되는 것 같습니다. 머신러닝 개발자가 아니므로 가볍게 키워드만 알아보려고 합니다. 머신러닝에서 feature는 특정 가능하고 수량화 가능한 속성이나 사물, 사람 또는 현상의 "특성"을 나타내는 말입니다. 이 feature는 크게 dense와 sparse로 분류할 수 있습니다. Dense는 말 그대로 밀집된 데이터이며 Sparse는 희소한 데이터입니다. 분포의 정도에 따라 machine learning 알고리즘에 영향을 미칩니다. 알고리즘은 dense/sparse 특징에 따라 다르게 수행될 수 있기 때문입니다. 1. Dense 데이터 세트에서.. 2024. 1. 3.
연습#27 안녕하세요! 오늘도 한문제를 풀었습니다. greedy하게 풀면 그냥 끝나는 쉬운 문제였습니다. 다만 아쉬운건 저는 이상하게 포문을 두개 엮었네요 -_-; Arrays.sort(g); Arrays.sort(s); int i = 0; for(int j=0;i 2024. 1. 3.
NoSQL에서 다대일 관계, Join에 대한 지원이 약한 이유 중복된 데이터를 정규화하려면 다대일(many-to-one)관계가 필요합니다. 관계형 데이터베이스에서는 조인이 쉽기 때문에 ID로 다른 테이블의 로우를 참조하는 방식은 일반적이지만, 보통 문서 데이터베이스에서는 조인에 대한 지원이 약합니다. 그러므로 다대일 관계는 안타깝게도 문서 모델에 적합하지 않습니다. NoSQL에서 Join에 대한 지원이 약한 이유는 다음과 같습니다. 1. Schema Flexibility NoSQL 데이터베이스에서는 각 레코드(MongoDB의 경우 문서)가 레코드마다 다를 수 있는 자체 구조를 가질 수 있습니다. 이러한 유연성으로 인해 서로 다른 스키마를 가진 여러 테이블의 데이터를 결합해야 하는 기존 SQL 스타일 조인을 수행하기가 어렵습니다. 2. Distributed Archi.. 2024. 1. 3.
728x90