목록PROGRAMING/JAVA (8)
nickjoIT
관리자 ID일 경우 로그인 할 때 사외 IP로 접근 시에 로그인이 되지 않도록 해둔 로직이 있었는데, 어느 순간부터 사내에 있는 PC로 접근했는데도 로그인이 되지 않는 일이 발생했습니다. 문제를 찾아보니 웹 서버에 접근할 때 L4(Load balancing)이나 Proxy 서버 등을 사용할 때 request.getRemoteAddr(); 로 IP를 가져오면 Client IP가 아니라 L4나 Proxy 서버의 IP를 가져오는 것을 알 수 있었습니다. 이런 장비들의 경우 Client IP를 Header에다가 남겨둔다고 합니다. 따라서, Client IP를 가져오기 위해서는 다음과 같은 로직을 사용해야 합니다. 1234567891011121314151617181920212223242526272829303132..
1. 스트림이란 - 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메소드들을 정의해 논것 2. 장점 - 데이터를 추상화하였다는 것은, 데이터 소스가 무엇이던 간에 같은 방식으로 다룰 수 있게 되었다는 것과 코드의 재사용성이 높아진다는 것을 의미한다 - 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다 - 코드가 간결하고 이해하기 쉬우면서 재사용성이 높다 String[] strArr = {"aaa","ccc","bbb","aaa"}; List list = Arrays.asList(strArr); Stream stream = list.stream(); // 스트림 생성 Stream stream1 = Arrays.asList(strArr).stream(); str..
1. 람다식이란?- 람다식(Lambda expression)은 간단히 말해서 메서드를 하나의 식으로 표현한 것이다.- 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다.- 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명 함수' 라고도 한다. int[] arr = new int[5]; ArrayList arrList = new ArrayList(); Arrays.setAll(arr, a -> (int)(Math.random()*5)+1); for(int a: arr) System.out.print(a + " "); 2. 람다식의 장점- OOP 언어인 Java에서 함수형 코드를 작성할 수 있게 해준다.- 람다 표현식을 이용함으로써 간결하고 명확한 코드로 그 ..
1. 지네릭스- 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다.- 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거러움이 줄어든다. 2. 지네릭스의 장점- 타입 안정성을 제공한다.- 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다. public class Box { T item; public T getItem() { return item; } public void setItem(T item) { this.item = item; } } public class BoxMain { public static void main(String[] args) { Box box = n..
1. 정의- 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻 한다.- 컬렉션은 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다.- 다른 말로는 컨테이너라고 부르는데, 이것은 값을 담는 그릇이라는 의미 이다. - 담는 값의 성격에 따라 컨테이너의 성격이 조금씩 달라지는데, 자바는 다양한 상황에서 사용할 수 있는 다양한 컨테이너를 제공하며, 이것을 컬렉션 프레임워크라고 부른다.- JDK1.2 이전까지는 Vector, Hashtable, Properties와 같은 컬렉션 클래스들을 서로 다른 각자의 방식으로 처리해야 했으나, JDK1.2 부터 컬렉션 프레임웍이 등장하면서 다양한 종류의 컬렉션 클래스가 추가되고 모든 컬렉션 클래스를 표준화된 방식으로 다룰 수 있도록 체계화되..
1. String- 자바에서 String은 불변객체(immutable instance)이다. ex)1) String hello = "Hello";, 라는 문자열 인스턴스를 메모리에 생성하고 그 래퍼런스를 hello 라는 문자열 변수에 대입한다.2) hello는 단지 "Hello" 라는 문자열 객체를 가리키는 레퍼런스를 담고 있다.3) hello += "and how are you?";, 이 문장을 수행한 결과 hello가 가리키는 문자열 객체의 내용은 "Hello and how are you?"가 된다.불변 객체인 String의 내용이 바뀐 것이다.4) hello += "and how are you?"; 문장이 내부적으로hello = new StringBuffer(hello).append(" and ho..
1. 프로세스- 멀티 프로세싱을 지원하는 운영체제에서는 동시에 여러 프로그램을 실행 할 수 있다. 그때 실행 중인 프로그램에 대한 인스턴스를 프로세스라고한다.- 프로세스는 프로그램에 대한 각각의 인스턴스를 의미하므로, 같은 프로그램을 여러개 띄웠다고 해서 하나의 프로세스를 공유하는 것은 아니다.- 프로세스는 운영체제로 부터 주소공간, 파일, 메모리 등을 할당 받는다. 2. 스레드- 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세서 내의 주소 공간이나 자원들을 대부분 공유 하면서 실행된다.- 기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성된다. 이를 메인 스레드라고 부르며, 스레드를 추가로 생성하지 않는 한 모든 프로그램 코드는 메인 스레드에서 실행된다.- 프로세스는 여러개의 스레..
1. 오류와 예외의 차이점1) 오류: 프로그램 코드에 의해서 수습될 수 없는 심각한 에러- 문법 오류: 오타와 같이 자바 구문에 어긋난 코드 때문에 발생하고, 컴파일시에 발생하는 오류(컴파일 에러)- 실행 오류: 프로그램 실행시 상황에 따라 발생하는 오류(런타임 에러) 2) 예외: 프로그램 코드에 의해서 수습 될 수 있는 미약한 오류- 프로그램 실행시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하여 정상 실행 상태를 유지 할수 있음 2. 일반예외- 컴파일러 체크 예외라고도 하는데, 컴파일 하는 과정에서 예외처리코드가 필요한지 검사하기 때문.- 만약 예외처리 코드가 없다면 컴파일 오류가 발생한다. 3. 실행 예외- 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다.- 실행 예외는 자바..