본문 바로가기

분류 전체보기

(48)
BigInteger.valueOf와 정적 팩토리 메서드 코드에 BigInteger 객체를 이용하게 되었다. 오랜만에 사용하는 클래스는 한번씩 내부 코드를 보는 습관이 있는데 다양한 생성자들이 있었고 BigInteger bi1 = new BigInteger("12345678901234567890"); BigInteger bi4 = BigInteger.valueOf(123456789L); BigInteger bi8 = new BigInteger(128, new Random()); byte[] byteArray = {1, 2, 3, 4, 5}; BigInteger bi5 = new BigInteger(byteArray); 그러다 'BigInteger.valueOf' 메서드가 눈에 띄었다. import java.math.BigInteger; public class ..
JS Date 객체 + 백준 1340번 2023년을 얼마 안남긴 11월 즈음, 올해 마지막 목표로 백준 골드티어 찍어보기를 도전하였다. 그래서 자투리 시간이 있을 때마다 백준 문제를 풀곤 했다. (2024년 새해 목표로 넘겨야겠다) 이번 문제는 '이번 해가 몇%지났는지 출력하는 프로그램을 작성하시오' 가 주 목표인 문제였다. ( https://www.acmicpc.net/problem/1340 ) 1340번: 연도 진행바 평년일 때, 각 달은 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31일이 있다. 윤년에는 2월이 29일이다. 윤년은 그 해가 400으로 나누어 떨어지는 해 이거나, 4로 나누어 떨어지면서, 100으로 나누어 떨어지지 www.acmicpc.net 쉬운 난이도의 문제였고, 내 코드는 다음과 같..
람다 표현식 - 2. 자바 함수형 인터페이스 자바 함수형 인터페이스란 단 하나의 추상 메서드를 가지고 있는 인터페이스이다. 자바 표준 라이브러리에는 여러 유용한 함수형 인터페이스들이 포함되어 있다. 그 중 가장 기본적인 함수형 인터페이스는 java.util.function 패키지에 위치하고 있다. 몇가지 주요 함수형 인터페이스를 살펴보면 다음과 같다 // 매개변수 없이 값을 제공하는 역할을 하는 함수형 인터페이스 @FunctionalInterface public interface Supplier { T get(); } // 값을 소비하는 역할을 하는 함수형 인터페이스 @FunctionalInterface public interface Consumer { void accept(T t); } // 주어진 조건에 따라 참 또는 거짓을 반환하는 함수형 인..
람다 표현식 - 1. 람다 표현식 기본 개념 서론 편의성 때문에 자주 사용하는 문법 중 하나가 람다식이다. 어느날 신입 개발자가 람다식에 대해서 물어보았다. 사용 방법과 덫붙여, 작성한 코드를 람다식으로 바꿔보면서 설명해 주었다. 그리고 어디에 어떻게 람다식을 사용할 수 있는지도 첨언하였다. 마지막으로 함수형 인터페이스와함수 디스크립터에 대해서 설명하려고 했는데 나 스스로도 명확히 알고 있지 못하고 있다는 것을 깨달아버렸다. 남에게 설명할 수 있어야 확실이 알게 된 것이라는 말이 있듯이 이번기회에 자바 람다식과 스트림, 함수형 인터페이스, 성능 비교 등 관련된 개념들을 하나씩 정리해보는 시간을 갖아보려고 한다. 'ChatGPT' 와 도서 '모던 자바 인 액션' 을 주로 참고하여 정리할 예정이다. 람다 표현식이란? 람다 표현식은 자바 8에서 도입된 ..
테이블 비정규화를 통한 가독성 향상과 성능 향상 일반적으로 테이블을 생성할 때는 정규화를 한다. 중복된 데이터를 제거하여 저장 공간을 최소화 하고 데이터의 일관성을 유지하기 위해서이다. 또한 데이터 업데이트시에도 하나의 테이블에서만 하면 되므로 작업효율적이기 때문이다. 하지만 실무를 진행하다 보면 많은 테이블들이 생성되어 많은 테이블들과의 조인이 일어나 성능이 저하되는 경우도 있고 쿼리 작성 및 가독성이 떨어지는 경우도 생긴다. 이럴경우 뷰 테이블 생성을 고려하기도 한다. 많은 조인이 걸려있는 경우 뷰 테이블을 이용하여 쿼리의 가독성을 향상시킬 수 있기 때문이다. 하지만 조회성능 향상에 대해서는 상황에 따라 다를 수 있다고 알고 있다. 그래서 성능 향상 및 가독성을 위해 비정규화를 고려하는 경우가 생긴다. 최근 고객사에서 조회 속도에 대한 개선요청건이..
확장 가능한 시스템 설계 예시 단일서버 형태의 시스템은 실제 서비스를 운영하는데에는 무리가 있다. 하나의 웹 서버만으로 구성되어 있기 때문에 장애가 발생하거나 트래픽 증가로 서버 자원의 한계가 올 때 정상적으로 서비스를 제공할 수 없는 상황이 발생하기 때문이다. 이러한 문제를 해결하기 위해 웹 서버를 추가하여 성능을 개선하는 '스케일 아웃'의 규모 확장 전략을 사용한다. 그리고 추가된 여러대의 서버에 트래픽을 고르게 분산하기 위하여 로드벨런서를 사용한다. 데이터베이스 또한 비슷하게 데이터베이스 다중화 전략이 사용된다. 다중화 전략이란 데이터를 여러곳에 복사하여 보관하는 방법으로 성능 향상 및 장애 복구 등에 효율적이다. 클라우드 서비스를 이용하여 서버에 탄력성과, 장애나 재해 등에 대한 고가용성을 보장받기도 한다. 그러므로 실제 서비..
단일 서버와 사용자 요청 처리 몇년 전 웹 개발을 처음 시작했을 당시에는 단일 서버 형태로 단순한 시스템을 설계하였다. 처음 만든 웹 어플리케이션이었기 때문에 제대로 동작하는지 확인하는게 중요했고, 서버 설계에 대한 지식도 없었으므로 단순히 책과 수업에서 배운 내용 그대로를 따라한 구조였다. 아래는 그당시 설계된 서버 구조를 대략적으로 그려본 것이다. 사용자 요청 처리는 다음과 같이 이루어진다. 사용자는 PC웹 브라우저나 모바일 기기를 통하여 웹 사이트에 접속하고자 한다. 그러기 위해 사용자의 요청이 어떻게 처리되어 보여지는지 간략하게 정리해 보았다. 1. 사용자가 도메인 주소를 입력하면, 클라이언트(웹,앱 브라우저 등)는 입력한 도메인 주소를 해석하기 위해 DNS(Domain Name System) 서버에 조회 요청을 보낸다. 2...
서버 개발 고민 일반적으로는 클라이언트에서 요청이 오면 DB 쿼리를 이용하여 상호작용하는 일을 떠올릴 것 이다. 내가 경험해본 업무 중 7, 8할 이상도 이러한 작업이 주가 된 적이 대부분이었고, 이러한 작업은 거의 반복 적인 작업이었다. 그런데 최근 회의 중 이런 이야기가 오고 갔다. 요약해보면 다음과 같다. A : " xx 기능이 추가되면서 서버가 더 많은 요청을 처리 하게 되었습니다. 기존 서버로는 원활한 처리가 어려울 것 같으므로 xx기능 처리를 위한 서버를 증설할 필요가 있습니다." B : "그건 이해하지만, 서버 증설은 비용 문제도 고려해야 합니다. 새로운 서버를 추가하려면 추가 비용이 발생하고 유지 관리에도 비용이 듭니다." C : "기존 서버 만으로는 추가된 요청을 처리하는 것은 무리일 것 같습니다. 현재..