분류 전체보기 428

Java 큰 수의 피보나치 수열의 값은?

피보나치(Fibonacci) 수열이란? 1, 1, 2, 3, 5, 8, .. 와 같이 f(x) = f(x - 2) + f(x - 1); 을 만족하는 수열을 말한다. (첫 항: f(0) = 0 또는 f(1) = 1) 아주 큰 자연수 n에 대하여 피보나치 수열의 n 번째 값은 어떻게 구할 수 있을까? 첫 번째 시도 [Long] static 으로 선언한 List 안에 하나씩 값을 넣어준다. list = [1, 1, 2,3, 5, ...] 해당 리스트에 메모이제이션을 적용했다. static List list = new ArrayList(); private static void fiboFunc(int idx) { if (idx == 1 || idx == 2) { list.add(idx, 1L); return; }..

ubuntu 서버에서 gradle 버전 수정하기

ubuntu 서버에서 gradle를 다운 받으면 최신 버전이 아니라 기본으로 gradle 옛날 버전이 깔린다. 그런데 현재 진행 중인 프로젝트는 gradle 8.2.1 을 이용 중이라서 업그레이드 하려한다. 과정은 다음과 같다 로컬에 gradle 8.2.1 다운 scp 로 원격 서버에 gradle 압축 파일 전송 압축 해제 gradle 관련 환경 변수 설정 gradle -v 를 통해 버전이 바뀌었는지 확인 gradle 버전 확인 방법 현재 로컬에서 개발중인 프로젝트의 gradle 버전은 gradle-wrapper.properties 파일에서 확인 가능하다. 로컬에 gradle 8.2.1 다운 https://services.gradle.org/distributions/gradle-8.2.1-bin.zip ..

Spring 애플리케이션을 원격으로 전송하기

로컬에서  원격(ubuntu) 으로 파일 전송  - SCP 프로토콜개발하고 있는 spring 애플리케이션을 .jar 파일로 압축해서 ubuntu 서버에 전송하고 실행하려한다. gradle의 'bootJar'를 실행하고 나면build/lib 안에 프로젝트를 압축한 .jar 파일이 생성된다. SCP(secure copy): SSH 프로토콜 기반으로 파일을 안전하게 전송하는 수단이다. SCP는 SCP 프로토콜 또는 SCP 프로그램을 가리킨다. Spring 프로젝트가 실행중인 폴더에서 cmd 창을 열고 다음 명령어를 실행하면 원격으로 파일을 전송할 수 있다. scp   -i   "pem파일경로" 원본파일주소 사용자@IP주소:/저장폴더IP주소: 원격 서버 주소를 의미한다. 000.000.000.000:~/ 라고 ..

ubuntu 방화벽 설정 방법(ufw)과 MySQL 접속 및 주의사항

원격 서버에 띄운 MySQL 서버에 접속하기 전 주의사항mysql 구성 정보 파일에 bind-address: 127.0.0.1 부분을 주석 처리한다. 또는 0.0.0.0 으로 수정한다. mysql 서버에서 각 사용자에 대한 권한 설정방화벽 설정: 특정 IP 에 대해서 3306번 포트에 접근을 허용한다. 인바운드 규칙 설정가비아에 설정한대로 작동하지 않을 경우, ubuntu 서버에서 "sudo ufw " 명령어를 사용해서 직접 규칙을 설정할 수 있다. 참고 ) https://oranthy.tistory.com/585?category=1050152현재 우분투 서버의 방화벽 정보 확인 방법 가비아 관리 콘솔에서 방화벽 규칙을 설정해도 적용되지 않는 것 같아서 알아보니 ubuntu 서버에서 직접 방화벽에 대해 ..

Chapter 06. 데이터 타입(data type)

데이터 타입 자바스크립트의 모든 값은 데이터 타입을 갖는다. 원시 타입과 객체 타입으로 구분한다. 원시 타입 숫자(number) 문자열(string) 불리언(boolean) undefined: 선언되었으나 값이 할당되지 않았다. null: 변수에 값이 없다는 것을 의도적으로 명시하기 위해 사용한다. 변수가 이전에 참조하던 값을 더 이상 참조하지 않는다는 의미다. 심벌(symbol) 타입: 변경 불가능한 원시 타입의 값이다., ES6에서 추가된 타입이다. 객체 타입: 객체, 함수, 배열 등 숫자(number) 타입 C, Java의 경우에는 소수점 이하가 있는 숫자(실수), 소수점 이하가 없는 숫자(정수)를 구분해서 double, float 같은 숫자타입을 제공한다. 이와 다르게 JavaScript에서는 숫..

Chapter 04. 변수

메모리와 변수 메모리(memory)는 메모리 셀의 집합체다. 메모리 셀 하나는 1바이트(8비트)이며 컴퓨터는 메모리 셀의 크기, 즉 1바이트 단위로 데이터를 저장하거나 읽는다. 각 셀은 고유하게 메모리 주소(memory address)를 갖는다. ex) 4GB 는 0 ~ 4,294,967,295 (0x00000000 ~ 0xFFFFFFFF) 까지의 메모리 주소가 있다. 컴퓨터는 모든 데이터를 2진수로 처리한다. 따라서 데이터가 숫자, 텍스트, 이미지, 동영상인지에 상관없이 모두 2진수로 저장된다. 메모리에 저장되는 값은 모두 2진수로 저장된다. Ex) 10 + 20 이라는 식을 컴퓨터는 어떻게 처리할까? 사람은 계산, 기억을 두뇌에서 하지만 컴퓨터는 연산과 기억을 수행하는 부품이 나눠져있다. 피연산자인 ..

Chapter 03. 자바스크립트 개발 환경과 실행 방법

3.1 자바스크립트 실행 환경 모든 브라우저는 자바스크립트를 해석하고 실행할 수 있는 자바스크립트 엔진을 내장하고 있다. Node.js도 자바스크립트 엔진을 내장한다. 브라우저와 Node.js의 용도가 다르다. 브라우저는 HTML, CSS, 자바스크립트를 실행해서 화면에 렌더링하는 것이 목적이다. Node.js는 브라우저 외부에서 자바스크립트 실행 환경을 제공하는 게 목적이다. 웹 크롤링(Web Crawling) 서버에서 웹 사이트의 콘텐츠를 수집하기 위해서 HTML 문서를 가져와서 필요한 데이터만 추출하는 것을 말한다. 3.2 웹 브라우저 개발자 도구 개발자 도구는 웹 브라우저에 기본적으로 내장되어 있다. Elements: 로딩된 웹 페이지의 DOM, CSS 를 편집해서 렌더링된 뷰를 확인할 수 있다...

Chapter 01. 프로그래밍 Chapter 02.자바스크립트란?

1장 프로그래밍이란? 프로그래밍이란 0과 1 밖에 모르는 기계가 실행할 수 있도록 정확하고 상세하게 요구사항을 설명하는 작업이다. 그 작업의 결과물이 코드에 해당하다. 컴퓨터가 명령어를 수행하도록 하려면 컴퓨터가 이해할 수 있는 언어(기계어, machine code)로 컴퓨터에 명령어를 전달해야 한다. 개발자가 프로그래밍 언어를 사용해서 프로그램을 작성한 다음, 그걸 컴퓨터가 이해할 수 있는 기계어로 변환하는 번역기를 이용하는 방법이 있다. 이 번역기를 컴파일러(compiler) 또는 인터프리터(interpreter)라고 한다. 2장 자바스크립트란? 자바스크립트의 탄생 1995년 넷스케이프 커뮤니케이션즈가 웹 브라우저 시장을 90% 점유했다. 웹 브라우저에서 동작하는 경량 프로그래밍 언어 도입을 결정하다..

원격 서버(ubuntu)에 Java 설치, MySQL 서버 구축

가비아를 통해서 서버를 빌렸다. 지난 달쯤 가비아의 컨테이너 호스팅 서비스를 이용했는데 여기에는 MySQL, Java가 모두 깔려있는 상태였다. 이번에는 IaaS 특성을 제대로 활용하기 위해 클라우드 서버를 임대했다. 전에 사용해본 AWS EC2 와 비슷한데 관리 콘솔이 한글로 되어 있고, 실시간으로 요금을 확인하는 것도 훨씬 편리했다. 초보자에게 추천! 그리고 문의를 남기면 당일 날 답변을 받을 수 있어서 좋았다. 작년에도 EC2 서버에 DB를 구축해서 사용해본 경험이 있다. 이번에는 가비아를 통해 빌린 서버에 DB, Spring 애플리케이션을 모두 띄우려고 한다. 이번 포스팅에서는 ubuntu 연결 및 초기 세팅에 대해 다룬다. Java 설치 가비아에서 준 pem 파일을 이용해서 ppk파일을 만들고 ..

[09월 1주차] 캐시와 스프링 AOP, @Cacheable

캐시(cache) 캐시란? 반복적으로 요청되는 데이터를 임시로 메모리 저장했다가 다음 요청이 왔을 때, DB에 접근하지 않고 메모리에서 읽어오는 것을 말한다. 최초 요청 시에만 DB 에 접근하므로 시간적으로 효율적이고 성능도 좋아진다. Spring 캐시 사용 방법 - @CacheEvict, @Cacheable @Cacheable(cacheNames = "model", key = "#modelNm", unless = "#result == null") public ModelVo getModel(String modelNm) { // 모델 조회 return model; } @CacheEvict(cacheNames = "model", key = "#modelNm") public void removeModel(St..