1. Java 구현 import java.util.Scanner; public class Main { private static final int PERIOD = 1500000; private static final int DIVIDE = 1000000; public static void main(String[] args) { System.out.println(fibonacci(new Scanner(System.in).nextLong(), PERIOD, DIVIDE)); } public static int fibonacci(long number, int period, int divide) { if(number
티스토리 에디터가 바뀌었다. 그런데 아직 적응이 되지 않는다. 특히 글을 작성할 때 간격이 150%이상 되어야 가독성이 좋은데, 현재 에디터에서는 글 간격을 변경할 수 없었다.특히, 이전에 내가 템플릿으로 미리 작성한 서식들을 불러오지를 못한다. 그래서 이전 에디터로 이용할 수 있는 방법을 찾았다.방법은 간단하다. 아래 경로로 입력하면 된다. https://lkhlkh23.tistory.com/admin/entry/post/?type=post&returnURL=/manage/posts/ 자신의 티스토리 주소로 변경하면 사용할 수 있다. 오늘은 간단한 포스팅이다! 사요나라!
1. Java 구현 package Q1038; import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { System.out.println(solve(new Scanner(System.in).nextInt())); } public static String solve(int n) { if(n < 10) return String.valueOf(n); Queue decreases = new LinkedList(); for (int i = 0; i < 10; i++) decreases.add(String.valueOf(i)); int result = 9; whi..
프록시프록시 서버는 클라이언트가 프록시를 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 지원해주는 응용 프로그램을 의미한다.서버와 클라이언트의 중계자 역할을 수행하며, 프록시 서버 내부에는 캐시가 존재한다. 클라이언트의 요청에 대한 처리 결과를 캐시에 보관하고, 동일한 요청에 대해 원격 서버에접근하지 않고, 캐시를 통해 결과를 전달할 수 있기 때문에 빠른 응답을 보낼 수 있다. 또한 원격 서버에 대한 트래픽을 감소시킬 수 있기 때문에 병목현상 방지 가능하다. - 병목현상 : 대역폭이 높은 곳에서 대역폭이 낮은 곳으로 이동할 때, 트래픽이 증가하는 현상 프록시 서버는 위치에 따라 포워드 프록시, 리버스 프록시로 나눌 수 있다. 포워드 프록시는 내부망에서 클라이언트와 연결된 프록시로, 클라이언트의..
성능 클라이언트를 제외한 서버군 전체가 상호작용 하며, 클라이언트의 요청을 처리하는 능력을 의미한다.클라이언트 측면에서는, 단위 시간 당 요청 처리량을 의미하며, 서버 측면에서는 클라이언트의 수용량을 의미한다. 지연과 대역폭 지연은 송신지에서 수신지로 메세지를 보내는데 도착하는 시간을 의미한다. (지연 = 전파시간 + 전송시간 + 큐시간) - 전파시간 : 한 노드에서 다른 노드로 데이터가 전달될 때 통신 링크 상에서 걸리는 시간 (발사 이후, 도착지까지 도착하는 시간) - 전송시간 : 노드에서 노드로 데이터를 전송할 때의 시간 (발사 준비 시간) - 큐지연 : 데이터가 전송되기 위해 라우터의 출력포트에서 기다리는 시간 (발사 대기 시간) 대역폭은 한번에 많은 패킷을 보낼 수 있는지를 의미한다. 예를들어 ..
JDBC 자바에서 데이터베이스에 접속할 수 있도록 지원해주는 API 이다. JDBC는 데이터베이스에서 자료를 쿼리하는 방법을 제공한다.JDBC가 개발되기 전에는, 각각의 데이터베이스마다(Mysql, Mssql, Oracle ..) 각각의 쿼리문을 사용하였고, 개발의 불편함이 존재했다. 데이터베이스를 변경하면 쿼리를 모두 수정해야하는 문제도 발견했다. 그래서 JDBC가 개발되었으며, JDBC 드라이버가 자바의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터 역할을 수행한다.대체로 관계형 데이터베이스 서버로의 연결을 제공하며, 각 DBMS에 맞는 JDBC 드라이버가 필요하다. Java Application에서 사용하는 JDBC Driver Manager와 DBMS에 의존하는 JDBC Drive..
대용량 테이블이나 인덱스를 동일한 논리적 속성을 가진 작은 단위로 분할하는 것을 파티셔닝이라고 한다. 물리적으로 분할은 했지만, 애플리케이션은 파티셔닝을 인지하지못한다. 큰 테이블을 분할하여 작은 테이블로 나누었기 때문에 관리 측면에서의 편의성 제공한다. 파티셔닝을 사용하면 아래와 같은 효과를 기대할 수 있다. - 데이터 풀스캔 시, 엑세스의 범위를 줄여 성능 향상 - 각 파티션별로 백업 및 복구 작업 가능 - 물리적으로 여러 영역으로 파티셔닝했기 때문에 전체 데이터가 훼손되는 가능성 감소 - 파티션 단위로 디스크 I/O를 분산해 부하 감소 가능 하지만, 장점만 있지는 않다. 단점도 존재한다. - 테이블간의 JOIN 많이 발생하여 비용 증가 - 테이블과 인덱스를 별도로 파티셔닝이 불가 (테이블과 인덱스는..
데이터베이스 격리수준을 알아보려고 한다. 격리수준은 트랜잭션에서 일관된 데이터를 허용하는 수준을 의미한다. 격리수준을 높이면 데이터베이스에 대한 요청에 대해 병렬적 처리가 아닌, 순차적으로 처리하게 되기 때문에 일관된 데이터를 보장할 수 있겠지만, 클라이언트 요청에 대한 응답이 늦어질 수 있는 단점이 있다. 그렇다고 격리수준을 낮추면 병렬적으로 처리가 가능하기 때문에 속도는 향상될 수 있겠지만, 일관된 데이터를 보장할 수 없다.개인적으로 데이터베이스를 사용할 때, 일관된 데이터 제공이 최우선, 그다음이 성능이라고 생각한다. 그렇다고 성능을 완전 무시할 수 는 없을 것이다. Isolation Level (1) Read UnCommitted (LV 0) 트랜잭션에서 커밋되지 않는 데이터를 다른 트랜잭션에서 ..
이전에도 REST API 에 대해 정리를 했는데, REST API 장, 단점 중심으로 작성을 해보려고 한다. 먼제 REST 는 웹에 존재하는 자원에 대해 고유한 URI 값을 부여하는 방법론이다. 각각의 자원에 대한 고유한 URI와 자원에 대한 처리 방식인 METHOD를 가지고 있다.흔히, 'REST 하다'는 것은 아래에서 제시하는 REST의 특징을 얼마나 잘 반영하느냐에 결정된다. (이전 포스팅 : https://lkhlkh23.tistory.com/78) (1) Unirom Interface자원에 대해 통일된 방식을 통해 처리하기 때문에 HTTP 표준만 준수하면 IOS, JAVA 등 다양한 언어에 종속받지 않고, 모든 환경에서 사용이 가능하다. (Loose Coupling) - Self Descript..
스프링을 구성하는 디자인 패턴 - 프록시 패턴 (예 : AOP) target을 직접 호출하는 것이 아닌, 대행 객체를 통해 target에 접근하는 방식 - 프록시 객체에는 target을 참조하는 참조값을 가지고, 실제 결과값에 대한 조작은 target의 메소드를 호출하여 결과값 반환. - 프록시 객체는 흐름제어만 할뿐 결과값을 변형시키지 않음 - 프록시 객체는 실제 target 객체에 대한 참조변수를 보유 - 프록시 객체는 target 객체 호출 전후에도 별도 로직 처리 가능 가상 프록시Target 객체의 특정 행위를 수행하는 비용이 많이 발생했을 경우 / 무거운 객체를 생성할 때 사용 가능 - 프록시 객체는 target 객체와 동일한 구조를 가지고 있기 때문에 target 객체와 동일한 사용법 - 프록..