본문 바로가기

프로그래밍

(92)
[Oracle] PGA와 SGA 최근 한국소프트웨어산업협회에서 주최하는 재직자 교육 중 류청하 강사님의 '데이터베이스 고도화 튜닝 과정'을 수료하였다. 개발자 입장에서도 알고있으면 좋을만한 내용들이 많았고, 해당 내용들을 까먹기 전에 내용을 복기하고자 오랜만에 블로그 글을 작성한다. 교육 내용이 Oracle기반의 내용이기 때문에 다른 데이터베이스에서는 구조가 조금 다르거나 명칭이 다른 부분이 있을 수 있다. 해당 내용들은 Orcale 기준의 내용임을 참고하자.   오늘은 먼저 PGA와 SGA에 대해서 정리해보고자 한다. ** PGA(Program Global Area)란PGA는 데이터베이스 서버에서 각 프로세스(작업 단위)가 일을 할 때 필요로 하는 메모리 영역이다.쉽게 얘기하자면 데이터베이스 서버에서 작업을 처리할 때 사용하는 개인 ..
[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 : 원본 배열에..
[Git] commit목록에서 workspace.xml 파일 제거하기 intellij와 github를 연동하여 프로젝트를 진행하던 중 commit을 할 때마다 workspace.xml파일이 함께 Changes 목록에 올라와 workspace.xml파일을 gitignore에 추가해야 할 일이 생겼다. 하지만 workspace.xml파일이 이미 깃허브 레파지토리에 올라가 있는 상황이라 gitignore에 추가하여도 자꾸만 올라가는 문제가 발생하였다. 해결방법을 찾아본 결과 git bash를 이용하여 작업하여 문제를 해결할 수 있었다. 해결 1. 깃허브와 연동되어있는 프로젝트 디렉토리에 접근한다. (.git파일이 있는 폴더) 2. 폴더 내부에서 마우스우클릭하여 git bash를 킨다. 3. git Bash Here 클릭 4. 아래의 커맨드 입력. mv .idea ../.idea..
[JavaScript] split() / join() split() 이란 문자열을 특정 구분자로 나누어 배열에 저장하는 메소드 문법 string.split( separator, limit ); 인자로 separator(구분자)와 limit을 받는다. limit은 최대 분할 개수를 의미하며 생략가능하다.(limit 값을 정하지 않으면 전체를 다 분할한다.) 코드 예제1 // str변수에 'abcd' 문자열을 넣어준다. let str = 'abcd'; // strArr변수에 위에서 생성했던 문자열을 특정 기호(기호를 쓰지 않을 경우 문자하나씩)를 기준으로 나누어 배열형태로 저장해준다. let strArr = str.split(''); 결과 strArr = ['a', 'b', 'c', 'd']; 코드 예제2 // str변수에 'Hello World !!' 문자열..