본문 바로가기

전체 글

(97)
[Oracle] PGA와 SGA 최근 한국소프트웨어산업협회에서 주최하는 재직자 교육 중 류청하 강사님의 '데이터베이스 고도화 튜닝 과정'을 수료하였다. 개발자 입장에서도 알고있으면 좋을만한 내용들이 많았고, 해당 내용들을 까먹기 전에 내용을 복기하고자 오랜만에 블로그 글을 작성한다. 교육 내용이 Oracle기반의 내용이기 때문에 다른 데이터베이스에서는 구조가 조금 다르거나 명칭이 다른 부분이 있을 수 있다. 해당 내용들은 Orcale 기준의 내용임을 참고하자.   오늘은 먼저 PGA와 SGA에 대해서 정리해보고자 한다. ** PGA(Program Global Area)란PGA는 데이터베이스 서버에서 각 프로세스(작업 단위)가 일을 할 때 필요로 하는 메모리 영역이다.쉽게 얘기하자면 데이터베이스 서버에서 작업을 처리할 때 사용하는 개인 ..
[코딩테스트] 최대공약수, 최소공배수 구하기 (유클리드 호제법) 코딩테스트를 풀다보면 간간히 최대공약수, 최소공배수와 관련된 문제를 찾아볼 수 있다. 수학에 익숙하지 않은 사람이면 '최대공약수', '최소공배수'라는 워딩에서 주는 생소함에 부담을 가질 수도 있다. 하지만 코테 사이트에서 이와 관련된 문제를 꽤나 낮은 난이도의 문제로 취급하고 있는 만큼, 생각보다 어렵지 않은 개념이라 볼 수 있다. 최대공약수(GCD) 구하기 최대공약수는 유클리드 호제법을 이용하여 구할 수 있는데, 이는 큰 수를 작은 수로 나눈 나머지를 반복적으로 취하여 나머지가 0이 될 때 까지 작동하여 구하는 방식이다. 1. 재귀 방식으로 구현 // 재귀 방식 public static int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b..
[코딩테스트] label을 이용하여 다중 반복문 탈출하기 백준 2309번 일곱난쟁이 문제를 풀면서 이중 for문을 빠져나오게 코드를 작성해야하는 일이 있었다. 2중 for문 또는 다중 for문을 사용할 때, 안쪽에있는 for문에서 조건에 부합할 때 한번에 상위 for문까지 빠져나오는 법에 대해 머리를 굴려보다 찾아낸 기능이 바로 label이었다. 그래서 오늘은 label에 대해서 소개하고자한다. Label이란 label은 앞서 말한 것과 같이 다중 for문을 사용할 때 안쪽 for문에서 전체 루프를 즉시 종료하거나 다음의 큰 반복문으로 이동할 때 사용할 수 있다. 코드 예제 * 기본형태 outerLoop: // 외부 루프에 레이블 지정 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (i * ..
[Java] Stream Stream이란 Stream은 자바 8에서 추가된 컬렉션, 배열, I/O 자원 등의 데이터 소스를 처리 방법으로, 데이터의 흐름을 추상화하여 다양한 처리를 지원한다. Stream은 데이터 소스를 변경하지 않기 때문에 Stream으로 처리한 결과는 원본 데이터에 영향을 미치지 않는다. Stream은 지연(lazy)처리를 지원하기 때문에 Stream으로 처리한 데이터는 실제로 필요할 때 까지 계산되지 않고 필요한 시점에서 계산된다. 이러한 Stream을 사용했을 때 얻을 수 있는 가장 큰 장점은 간결하고 가독성이 좋은 코드로 작성이 가능하다는 점이다. int[] numbers = {1, 2, 3, 4, 5}; int[] result = new int[numbers.length]; int index = 0; ..
[Spring] AOP AOP(Aspect Oriented Programming)란 AOP(Aspect Oriented Programming)는 OOP(Object Oriented Programming)에서 발생하는 문제 중 하나인, 관심사의 분리를 해결해주는 프로그래밍 패러다임이다. 관심사의 분리란, 비즈니스 로직 외에 로깅, 보안, 트랜잭션과 같은 부가적인 기능이 필요할 때 이를 모든 메소드마다 일일이 추가하게 되면 코드가 중복되고 유지보수성이 떨어지기 때문에, 부가적인 기능들을 한 곳에서 관리하고 필요한 메소드들에 일괄적으로 적용하는 것을 얘기한다. 위 그림에서 Class A, Class B, Class C는 저마다 부가적인 로직(색깔 블록)이 중복되고 있다. 이때 중복되는 소스코드으로 인해 소스코드가 비대해 질 뿐만 아..
[Spring] @Valid @Validated와 유효성 검사 Annotation @Valid @Validated란 @Valid와 @Validated는 서버 사이드에서 유효성 검사를 하기 위해 자바 및 스프링에서 제공하는 어노테이션이다. @Valid는 javax.validation.constraints 에서 지원하는 어노테이션으로 valid조건들을 검증하고, 유효성 검사에 부합하지 않는 문제 발생 시MethodArgumentNotValidException를 발생시킨다. @Validated는 스프링에서 지원하는 어노테이션 기능으로 @Valid와는 몇가지 차이점이 있다. 먼저, 컨트롤러(핸들러)계층에서만 동작하는 @Valid와는 달리 @Validated는 서비스등 컨트롤러뿐만 아니라 다른 계층에서도 유효성 검사를 할 수 있게끔 해준다. (@Valid는 핸들러 어탭터 처리과정인 Argume..
[Java] toString()과 String.valueOf() 차이점 toString()과 String.valueOf()는 주로 Object값을 String형으로 형변환할 때 주로 사용하는 메소드들이다. 차이점 두 메소드의 차이점은 바로 null값에 따른 NullPointException 발생의 유무이다. toString() : null 값을 형 변환 시 NullPointerException(NPE)이 발생 / Object의 값이 String이 아니여도 출력 String.valueOf() : 파라미터로 null이 오면 "null"이라는 문자열을 출력 코드 예시 public static void main(String args[]) { Object obj = null; System.out.println(obj.toString()); // NullPointerException ..
[Java] 배열 자르기 배열 자르기 오늘은 자바에서 배열이 하나 주어졌을 때 시작 인덱스와 마지막 인덱스 범위만큼 배열을 자르는 방법을 소개하고자 한다. 예를 들어 1부터 10까지 값을 가지는 배열에서 시작 인덱스를 3으로, 마지막 인덱스를 7로 주어 다음과 같은 결과를 얻고자 한다. 기존 배열 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 시작 인덱스 : 3 마지막 인덱스 : 7 특정 범위의 배열 : [4, 5, 6, 7] 1. System클래스의 arraycopy 메소드 System 클래스에서 제공하는 arraycopy() 메소드를 활용하여 특정 위치부터 특정 개수만큼 새로운 배열에 값을 할당할 수 있다. System.arraycopy(A, B, C, D, E); 매개변수 A : 원본 배열 B : 원본 배열에..