분류 전체보기(73)
-
Ch04. 스트림 소개
스트림 소개거의 모든 자바 애플리케이션은 컬렉션을 만들고 처리하는 과정을 포함합니다. 대부분의 프로그래밍 작업에 사용되며, 컬렉션으로 데이터를 그룹화하고 처리할 수 있습니다. 비즈니스 로직상 컬렉션에 대해 특정 카테고리로 그룹화 하던가, 특정 키워드를 사용하여 원하는 결과를 찾는 연산을 요구하는 작업이 있을 수 있습니다. 대부분 데이터베이스에서는 선언형으로 이와 같은 연산을 표현할 수 있습니다. 예를 들어 ‘SELECT name FROM cars WHERE price 이처럼 자동차의 속성을 이용하여 어떻게 필터링 할 것인지는 구현할 필요가 없습니다. 어떻게 구현해야 할지 명시할 필요가 없고 구현은 자동으로 제공됩니다. 컬렉션으로도 이와 비슷한 기능을 만들 수 있지 않을까? 많은 요소를 포함하는 커다란 ..
2024.06.25 -
MSA환경에서 세션관리하기(Feat. Redis session clustering)
단일 서버에서 세션을 관리한다면 아무런 문제가 없겠지만, 보통 스케일 아웃 등을 통해 분산된 서버 환경에서 세션을 관리할 때 세션 불일치 문제가 발생할 수 있다.이러한 문제를 해결하기 위해 Session Clustering, Sticky Session, Redis Session Clustering 등이 존재한다.Sticky Session세션을 사용해 트래픽을 분산하는 기능으로, 특정 세션의 요청을 최초 처리한 서버로만 전송하는 것을 의미한다.예를 들어 회원 1이 서버A에서 세션을 생성한다면, 이후 회원1이 보내는 모든 요청은 서버A로만 전송하게 된다.이러한 Sticky Session은 아래와 같은 단점이 존재한다.동일한 세션은 동일한 서버로만 전송하기 때문에 특정 서버에 요청이 몰려 과부하가 발생할 수 ..
2024.06.19 -
Ch02. 람다식 표현
기본람다식을 사용하려면, 메소드를 하나(=추상메소드) 가진 인터페이스가 필요하다.A인터페이스를 구현한 클래스를 통해, A인터페이스 객체를 생성할 수 있다.A인터페이스를 구현한 클래스를 만들지 않고도, 익명내부클래스를 통해 A인터페이스 객체를 생성할 수 있다.람다표현식으로도 A인터페이스 객체를 생성할 수 있다.A a3 = () -> { System.out.println("난 람다식이네!"); }아래 코드는 모두 동일한 결과를 갖는다.a1.m();a2.m();a3.m();추상 메소드는 총 4가지의 종류를 갖는다. 즉, 람다식으로 사용할 수 있는 메소드의 형태는 총 4가지이다.람다식을 통해 위 4가지 인터페이스에 대한 객체를 모두 생성해보자.첫번째 경우(파라미터가 없고, 구현 부분이 한줄인 경우), 아래처럼 ..
2024.06.18 -
법인/통합계정/본인인증 로그인
참조자료https://yozm.wishket.com/magazine/detail/2488/https://faq.portone.io/3df572fb-7ab6-4933-a383-3741efb0aa4dhttps://zhfvkq.tistory.com/100CI (88Byte의 Hash처리된 값)온라인에서 개인식별을 위해 주민번호에 기반하여 생성된 온라인 주민번호로, 필요한 경우 서로 연계가 가능하다.공인인증서나 휴대폰 인증 등을 통해 최초 발급 후에는 해당 CI를 이용해 본인임을 증명하게 된다.주민번호를 단방향 암호화하여 생성된다.DI (66byte)사이트별 개인 고유 식별키주민번호와 각 웹사이트의 식별번호를 가지고 생성하는 방식특정 유저가 가입한 이력이 있는지 등을 확인하기 위한 정보중복 가입을 방지하기 위해..
2024.06.18 -
Ch01. 동적 파라미터화 코드 전달
배경소프트웨어 개발에서 요구사항은 항상 변한다.이러한 요구사항을 반영하면서도 엔지니어링적인 비용이 가장 최소화될 수 있으면 좋다.그뿐 아니라 새로 추가한 기능은 쉽게 구현할 수 있어야하며 장기적인 관점에서 유지보수가 쉬워야한다.변화하는 요구사항에 대응하기첫번째 시도 - 녹색사과만 필터링기존의 농장 재고목록 애플리케이션 리스트에서 녹색 사과만 필터링하는 기능을 추가한다고 가정하자.enum Color { RED, GREEN } public List filterGreenApples(List inventory) { final var result = new ArrayList(); for (final var apple : inventory) { if (GREEN.equals(apple.col..
2024.06.12 -
캐싱 (로컬캐싱, 글로벌 캐싱 trade-off)
Cache 캐시는 나중에 요청할 결과를 미리 저장해 둔 후 빠르게 서비스해주는 것을 의미한다. 즉, 결과를 미리 저장하고 나중에 요청이 오면, 이 요청에 대해서 DB를 참조하지 않고 캐시에 접근하여 요청을 처리하는 기법이다. 그렇다면 어떤 데이터를 캐싱해야할까? 자주 조회되면서 쓰기가 거의 일어나지 않는 데이터에 대해서 캐싱해야한다. 캐싱을 할때 로컬캐싱 vs 글로벌 캐싱 캐싱할 데이터를 선정했다면, 이 데이터를 "어디"에 저장할지 고민해야한다. 일반적으로 로컬메모리에 저장하거나, Redis와 같은 별도 서버에 저장할 수 있다. 로컬캐싱 애플리케이션 서버의 메모리에 캐싱할 데이터를 저장하는 방법이며 일반적으로 Guava cache나 Caffeine cache를 많이 사용한다. 장점 애플리케이션 로직을 수..
2024.03.07