
Database 생성✅ oracle 유저로 접속해서 DBCA (Database Configuration Assistant)를 실행합니다.dbcaCreate a database 을 체크하고 Next 버튼을 클릭합니다.Advanced configureation을 선택하고 Next 버튼을 클릭합니다.✅ Database type을 Oracle Real Application Clusters (RAC) database(기본값)를 선택 합니다.✅ Configuration type은 Admin Managed (기본값)를 선택합니다.✅ General Purpose or Transaction Processing을 선택하고 Next 버튼을 클릭합니다.전체 노드에서 데이터베이스를 생성해야 하므로 모든 노드를 선택하고 Next..

이전까지 모든 작업이 끝났고 이젠 DB를 설치할 꺼다. Database 소프트웨어 설치 사전 작업설치 파일 압축 해제설치 경로 생성 및 설치 파일 압축 해제 설치 경로에 설치파일을 다운받아 넣어둔다. [racdb1:/home/oracle]> mkdir -p $DB_HOME[racdb1:/home/oracle]> cd $DB_HOME[racdb1:/u01/app/oracle/product/19c/db_1]> ls -alrtdrwxr-xr-x 3 root root 18 Dec 18 23:50 ..drwxr-xr-x 2 root root 6 Dec 18 23:50 .[racdb1:/u01/app/oracle/product/19c/db_1]> chown oracle:oinstall /u01/app/oracle..

ASM 디스크 그룹 추가ASM 디스크 그룹을 추가로 생성하기 위해 grid 유저에서 ASMCA를 실행합니다.grid_envasmcaGUI 모드에서 ASMCA에서 Disk Groups를 추가합니다.(ASMCA 실행 화면)Disk Group Name에 DATA를 입력하고 Redundancy는 Extermal(Nome)으로 지정합니다.DATA001 디스크를 체크하고 OK 버튼을 클릭합니다.FRA 그룹을 추가하기 위해 Disk groups 창에서 Create버튼을 클릭합니다.Disk Group Name에 FRA를 입력하고 Redundancy는 Extermal(Nome)으로 지정합니다.FRA001 디스크를 체크하고 OK 버튼을 클릭합니다. 디스크 그룹 추가 작업이 완료되었으면 Exit 버튼을 클릭합니다.클러스터..

Grid Infrastructure 설치GRID 설치 시작 (root로 접속 후 su - oracle로 접속하면 에러가 발생할 수 있다.oracle 유저로 접속 후 grid 설치 진행)grid_envcd $GRID_HOME./gridSetup.sh소프트웨어 구성 옵션 선택새 클러스터에 대한 Oracle Grid Instructure 구성 (rac)독립 서버에 대한 Oracle Grid Instructure 구성 (싱글에서 오라클 asm 구성할때)Oracle Grid Instructure 업그레이드 (그리드 버전 업그레이드 할 때가 있다. 이때 하는거지만 보통 그리드는 지우고 다시 설치한다.)소프트웨어만 설정클러스터 구성 선택클러스터종류관련 문서첫번째꺼 한다.(용어 찾기)Oracle 독립형 클러스터는 모든..
GRID Infrastructure 설치 사전 작업GRID_HOME 경로 생성1번 노드 oracle 계정으로 접속한 후 grid 환경변수로 넘어간다.$GRID_HOME 경로에 디렉토리를 생성한다. oracle 계정에서 실행[racdb1:/home/oracle]> grid_env[+ASM1:/home/oracle]> mkdir -p $GRID_HOMEGRID 설치파일 업로드GRID_HOME에 grid 설치파일을 넣어준다.Grid 설치파일 압축 해제[+ASM1:/u01/app/19c/grid]> unzip LINUX.X64_193000_grid_home.zipcvuqdisk 패키지 설치패키지 설치 중 "오류: can't create transaction lock on /var/lib/rpm/.rpm.lock..

공유 스토리지 구성스토리지 구성가상 스토리지 파일 생성공유 스토리지 가상 디스크 생성위에 스토리지 구성에 따라 가상 하드를 만들어준다.다음처럼 미리 전체크기 할당을 선택해준다.VM에 스토리지 연결RAC1 설정에 들어가 저장소를 선택 후 컨트롤러에서 스토리지를 추가한다.ASM 환경 구성ASM 환경 설정Oracle ASM 설정 및 시작 (oracle, oinstall, y, y 입력)[root@rac1 ~]# oracleasm configure -iConfiguring the Oracle ASM library driver.This will configure the on-boot properties of the Oracle ASM librarydriver. The following questions will..
보안 설정보안 설정을 위해 selinux 모드를 변경한다.vi를 통해 /etc/selinux/config에서 SELINUX 부분을 수정한다.vi /etc/selinux/configSELINUX=disabled hosts 파일 수정그후 호스트 파일 수정vi /etc/hosts### Public10.0.2.15 rac1 rac1.localdomain10.0.2.16 rac2 rac2.localdomain### Private192.168.56.101 rac1-priv rac1-priv.localdomain192.168.56.102 rac2-priv rac2-priv.localdomain### Virtual10.0.2.150 rac1-vip rac1-vip.loca..

해당 블로그를 참고해 작성했다.https://lemonandgrapefruit.tistory.com/275 Oracle 19c RAC 설치(1) - RAC1 VM 설치 (Oracle Linux 7.6 설치)RAC 설치 사전 준비사항 - VirtualBox - Oracle Enterprise Linux 7.6 - Oracle Grid 19.3 - Oracle Database 19.3 Oracle Linux 다운로드 링크 https://yum.oracle.com/oracle-linux-isos.html Oracle Grid, Oracle Database 다운로드 링크 https://www.lemonandgrapefruit.tistory.com 이전 개요에서 한것처럼 우선 가상머신을 설정할 예정이다.- Vm..

오라클 RAC를 가상머신에 설칠할 예정이다.설치 시나리오는 다음과 같다. 1. 머신1 설정2. 머신2 복사3. RAC 세팅 마무리 이런식으로 진행 될 예정이다. 우선 오라클 RAC에 대해 알아보자https://myalpaca.tistory.com/17 Oracle RAC 개념(Cluster, 구성요소)Oracle RAC 개념 Oracle RAC는 여러 개의 Instance가 하나의 Database를 엑세스 할 수 있다. 이는 application에서 접속할 수 있는 통로는 여러 개이며 Database는 하나인 형태이다. Oracle RAC = N개의 Instance + 1개의 Dmyalpaca.tistory.com이 사이트를 참고했다.Oracle RAC = N개의 Instance + 1개의 Databas..

스프링 부트의 기본 로그 툴은 Logback이다. 로그 툴을 사용하는 이유는 System.out.print() 를 사용하게 되면 IO리소스를 많이 잡아먹어 속도가 느리며 후에 로그를 파일로 남겨서 확인해야 하기 때문이다. 1. 라이브러리 추가 https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1/1.16 해당 링크를 참조해 라이브러리를 추가한다. 2. log4jdbc.log4j2.properties, log4j2.xml 파일 생 로그 설정을 위해 resources 밑에 log4jdbc.log4j2.properties 파일을 추가한다. 그후 다음 코드를 추가한다. log4jdbc.spylogdelegator.n..
1. cmd 창에서 프로젝트가 있는 폴더로 이동한다. cd /project경로 2. gradlew build 입력 3. cd build/libs 하여 폴더 이동 4. libs 내에 생성된 jar파일을 실행 java -jar 'jar파일명.jar' 단 ec2에서는 jar 파일을 FTP를 이용해 업로드 한뒤 nohup java -jar 'jar파일명.jar' & 다음과 같이 입력하면 백그라운드로 실행 가능하다. +) Version등 변경은 build.gradle 파일을 수정하면 된다.

우선 JPA에서 N+1문제를 해결하기 위해 Fetch Join을 사용한다. 그런 Fetch Join 사용법과 Join과의 차이점을 알아본다. Join, Fetch Join 차이점 요약 일반 Join Fetch Join과 달리 연관 Entity에 Join을 걸어도 실제 쿼리에서 SELECT 하는 Entity는 오직 JPQL에서 조회하는 주체가 되는 Entity만 조회하여 영속화 조회의 주체가 되는 Entity만 SELECT 해서 영속화하기 때문에 데이터는 필요하지 않지만 연관 Entity가 검색조건에는 필요한 경우에 주로 사용됨 Fetch Join 조회의 주체가 되는 Entity 이외에 Fetch Join이 걸린 연관 Entity도 함께 SELECT 하여 모두 영속화 Fetch Join이 걸린 Entity..

가장 중요한 점!!!! CORS 는 에러나 오류가 아니다. Cross-Origin Resource Sharing Policy 이다. 즉 보안 정책 중 하나 이다. CORS 의 간단 플로우 GET 요청인지 POST 요청인지 파악한다. Content-Type 과 Custom HTTP Header 를 파악한다. OPTIONS 요청을 통해서 서버가 적절한 Access-Control-* 를 가졌는지 확인한다. 만약 적절한 Access-Control 을 가졌다면 실제 XHR을 트리거한다. 적절하지 못한 Access-Control 를 가졌다면 Error 를 발생시킨다. CorsFilter 생성하기 CorsFilter 클래스를 생성하고 다음과 같이 작성한다. @Component @Order(Ordered.HIGHEST..
오라클이란 오라클이란 미국의 오라클 회사에서 제작한 세계 점유율 1위 데이터베이스 관리 시스템이며 현재 유닉스 체제에서 가장 많이 사용되는 DBMS이다. 오라클 장점 관리시스템 Multiple databases 튜닝 가능하다. 다수의 사용자가 동시에 접근이 가능하다. 변화관리 변경 plan을 작성하고 실제 구현하기 전에 변경 사항의 효과를 볼 수 있다. 생산 시스템을 방해하지 않는다. 경고 오류가 발생하면 설정되어 있는 계정 및 이메일로 연락이 온다. 경고는 에정된 가종 정지 시간 동안 차단 될 수 있다. 분산처리 DBMS 실행 컴퓨터 / 서버 역할 컴퓨터 / DB 응용 프로그램 실행 컴퓨터 다르게 분산처리한다. 용량&처리 다른 데이터베이스보다 고성능의 트랜잭션을 처리한다. Cost 비용을 최소화 하기 ..
https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 문제 이해 해당 문제는 조건에 따라 코드를 작성하는 문제이다. 풀이 조건에 따라 코드를 작성한다. import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class test43 { public static void main(String[] args) { Scanner sc = new Sc..
https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 문제 이해 해당 문제는 그냥 2진수를 8진수로 변경을 하는 쉬운 문제이다. 풀이 끝에서 3글자씩 뽑아서 해당 글자가 무슨 숫자인지 체크해 문자열에 추가하는 작업을 반복해주면 된다. import java.io.*; import java.math.BigInteger; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRe..
https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 문제이해 해당 문제는 고장난 버튼을 체크해서 고장난 버튼을 사용하지 않고 가장 가까운 수를 찾은 뒤에 + - 버튼을 이용해 이동하는 문제이다. 처음 해당 문제는 상당히 어려웠다. 주의 해야한는 부분은 다음과 같다. 고장난 버튼을 체크 최솟 값을 구하기 처음 부터 완전 탐색 문제 풀이 모든 값들을 입력 받는다. 0 ~ 999999 까지 반복한다. 고장난 버튼을 눌러야하면 다음 반복으..
https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 문제 이해 해당 문제는 크레인이 박스를 옮기는데 크레인의 제한에 맞추어 옮기는 문제이다. 해당 문제의 경우 가장 큰 크레인 부터 가장 큰 박스 부터 시작해서 차례로 검색해서 큰 순서대로 먼저 처리하는 방식으로 문제를 해결 한다. 풀이 1. 크레인에 대한 입력 2. 박스에 대한 입력 3. 내림 차순으로 정렬 4. 만약 가장 큰 박스를 가장 큰 크레인이 옮길 수 없다면 -1 출력 5...

시큐리티에서 아이디와 암호를 입력해도 로그인이 안될 수 있다. 이 것은 암호를 단순히 DB에 저장할 경우 발생하는 문제이다. 해당 문제를 해결 하기 위해선 암호를 암호화 해서 넣어야 한다. 암호화 하는 방법은 다음과 같다. 위와 같은 encoder를 빈에 추가하고 다음과 같이 암호화 해서 저장한다. 로그인 등에 비밀번호를 비교할 필요가 있으면 다음과 같이 비교할 수 있다. passwordEncoder.matches(password, loginUser.getPassword())
스프링 시큐리티에서 로그인과 권한에 대한 옵션을 설정하는 방법에 대하여 설명한다. 스프링 시큐리티에서 설정을 하기 위해선 시큐리티를 위한 클래스를 만든다. 만든 클래스에 @Configuration 어노 테이션을 추가한다. @Configuration public class SecurityConfig { //내용 } 내용 부분에 다음과 같이 입력한다. @Bean //빈 등록 public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/admin/**").access("hasRole('ROL..
https://www.acmicpc.net/problem/1083 1083번: 소트 크기가 N인 배열 A가 있다. 배열에 있는 모든 수는 서로 다르다. 이 배열을 소트할 때, 연속된 두 개의 원소만 교환할 수 있다. 그리고, 교환은 많아봐야 S번 할 수 있다. 이때, 소트한 결과가 사전 www.acmicpc.net 문제 이해 해당 문제는 소팅하는 단순한 문제이지만 정해진 횟수만 반복해서 가장 큰수를 찾아야 한다. 1번째 자리부터 최대한 큰 수를 넣어야 하므로 1번째부터 시작하여 최대한 넣을 수 있는 큰 수를 찾아서 넣는 방식으로 푼다. 풀이 처음 부타 마지막까지 반복하면서 가장 큰수를 찾고 해당 수를 앞으로 넘기는 방식으로 풀이를 진행한다. 단 여기서 변경할 수 있는 범위는 S에 다라서 정해진다. imp..
https://www.acmicpc.net/problem/1522 1522번: 문자열 교환 a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 www.acmicpc.net 문제 이해 해당 문제의 경우 a가 연속으로 있기 위해선 몇개의 b를 교환해야 하는 가에 대한 문제이다. 해당 문제의 경우 모든 a가 연속으로 있으면 된다는 것을 기억하고 슬라이딩 윈도우 방식으로 풀었다. https://soeasyalgo.tistory.com/49 슬라이딩 윈도우 알고리즘 이번 포스트에서는 앞서 살펴봤던 투포인터와 아주 유사한 슬라이딩 윈도우에 대해 살펴보자. https://soeas..
아두이노에서 어떤 작업을 수행 할 때 잠시 대기하는 코드는 delay이다. 하지만 이렇게 delay를 사용하게 되면 다른 작업이 모두 멈추게 되는 문제가 있다. 일반 적인 경우라면 상관이 없지만 1,2,3 기능중 2,3 기능은 계속 수행 하되 1기능만 일정 시간 뒤에 실행 하고 싶어도 방법이 없다. 이럴 경우 loop()안에 timer라는 int형 변수를 만들고 timer를 loop가 한번 돌때마다 +1을 해줘 시간을 파악하고 원하는 타이밍에 해당 기능을 수행하게 만들 수 있다. void loop(){ int timer if(timer%1000==0){ //원하는 기능 } timer++; if(timer>1000000){ timer = 0; } } 위와 같이 작동하면 1000 즉 1초마다 한번씩 동작하게..
Vue로 화면을 구현하다 보면 클릭이벤트 등을 통해 작동한 내용을 자식컴포넌트에서 부모 컴포넌트에서 데이터를 넘겨야 할 경우가 있다. 이런 경우에 대해서 설명 하겠다. 이벤트 출력 input의 경우에 대하여 설명하고 다른 컴포넌트의 경우 해당 컴포넌트에 대한 정보를 찾아 보면된다. input의 이벤트는 @input이다. 이런식으로 작성하면 입력 될 때 마다 titleUpdate라는 메소드를 호출 할 수 있다. 위와 같이 작성하면 콘솔로 해당 입력 값을 띄울 수 있다. $Emit 위의 스크립트를 다음과 같이 변경하면 부모 컴포넌트에서 사용할 수 있다. {{ title }} 부모컨포넌트에서 위와 같이 작성한다면 자식 컴포넌트에서 이벤트가 발생하면 titleChange로 사용 사용할 수 있다. methods:..
https://www.acmicpc.net/problem/1359 1359번: 복권 첫째 줄에 세 정수 N, M, K가 주어진다. www.acmicpc.net 문제이해 해당 문제는 콤비네이션을 구해 확률을 구하면 되는 문제이다. 단 해당 문제의 경우 K개 이상 맞으면 당첨이기 때문에 K개 이상 맞은 모든 경우의 수를 더해 확률을 계산해 주어야 한다. 풀이 문제해결은 다음과 같다. import java.util.Scanner; public class test39{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextI..

https://www.acmicpc.net/problem/2553 2553번: 마지막 팩토리얼 수 첫째 줄에 N이 주어진다. N은 20,000보다 작거나 같은 자연수 이다. www.acmicpc.net 문제이해 해당 문제의 경우 단순히 팩토리얼을 구하고 0보다 큰 가장 작은 자릿수를 계산하면 되는 문제이다. 단 해당 문제의 경우 단순히 팩토리얼을 계산해 문제를 해결 하려 하면 시간 초과로 인해 해결 할 수 없다. https://steady-coding.tistory.com/322 [BOJ] 백준 2553번 : 마지막 팩토리얼 수 (JAVA) 문제 N!의 값을 계산한 후에, 0이 아닌 가장 낮은 자리 수를 구하시오. 예를 들어, 4! = 24 이기 때문에, 0이 아닌 가장 낮은 자리 수는 4이다. 또, 5..
2346번: 풍선 터뜨리기 (acmicpc.net) 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 문제이해 해당 문제는 단순하게 배열안에 들어있는 수만큼 이동해 배열을 확인하고 다시 이동하는 문제이다. 문제풀이 입력을 배열에 저장한다. 처음에는 0번째 배열을 열어보고 0번째 배열을 없엔다. 0번째 배열에 들어있는 수만큼 이동한다. 위의 동작을 반복하면 문제를 해결 할 수 있다. import java.io.*; import java.util.LinkedList; import java.util..
1080번: 행렬 (acmicpc.net) 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 문제이해 해당 문제의 경우 처음에는 3*3이 아니라 1열을 통째로 바꾸는 것으로 이해하고 그렇게 문제를 해결 했더니 실패 했다. 하지만 해당 문제의 경우 3*3의 행렬만 교체 하는 것이다. 여기서 중요한 것은 변경을 최소화 하는 것이다. 해당 문제에서 변경을 최소화 하기 위해선 왼쪽 위부터 반복한다면 변경을 최소화 할 수 있다. 문제풀이 모든 값들을 입력받고 왼쪽 위부터 시작해 비교해서 변경이 필요하면 변경한다. 마지막에 A와 B가 ..
1052번: 물병 (acmicpc.net) 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번 www.acmicpc.net 문제이해 해당 문제는 물병을 합치는 문제이다. 단 모든 물병의 량은 1이고 용량이 같은 두 물병만 합칠 수 있기에 짝수 일 경우 2로 나누고 홀 수일 경우 +1을 하는 식의 문제이다. 해당 문제를 풀 때 처음에는 문제를 정확히 이해하지 못해 일일이 물병의 량이 같은지를 확인 해 비교 했다. 하지만 검색을 해보니 단순히 물병을 몇개를 샀냐(홀 수가 몇 번 나왔냐)만을 비교하는 문제였다. 문제풀이 소스 코드를 보면 이해할 수 있..
1475번: 방 번호 (acmicpc.net) 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제이해 들어오는 수들의 수를 모두 계산 한뒤 9와 6을 처리하고 최대값을 구한다. 풀이 6도 9와 함께 저장한뒤 8까지의 최대값과 9의 최대값을 비교한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class test35 { public static void main(String args[]) throws IOException { Bu..