본문 바로가기

JAVA79

Functional Interface (1) 자바는 여전히 OOP를 지원하는 명령형 프로그래밍 언어지만 흐름에 맞게 함수형 프로그래밍도 지원한다. 선언형 프로그래밍은 무엇을 해야 하는지에 따라 문제를 해결하는 방식으로 기존 명령형 프로그래밍과 다른 문제 해결 방식을 보인다. 이러한 선언형 프로그래밍으로 문제를 해결하는 방법을 공부하기 위해 자바 8에서 지원하는 java.util.function 패키지의 인터페이스를 공부해보고 명령형으로 처리하면 가독성이 떨어지고 확장성이 떨어지는 문제들을 선언형 프로그래밍으로 언제든 구현할 수 있도록 준비해보자. 선언형 프로그래밍을 공부하는 과정에서 JS에 관한 지식이 있다면 한결 부드럽게 다가갈 수 있다. 자바스크립트의 함수는 1급 시민으로 함수를 변수에 할당할 수 있으며, 함수를 매개변수로 넘겨줄 수 있고, 리.. 2022. 2. 7.
JDK Dynamic Proxy Proxy 패턴과 Decorator 패턴을 공부하면서 예제를 만들다 보면 상당히 불편한 점을 느끼게 된다. Interface 혹은 상속으로 클라이언트에게 다형성으로 프록시프락시 객체를 주입하려면 해당 인터페이스 혹은 상속받은 프락시 객체를 클라이언트 개수만큼 만들어야 한다는 사실이다. 만약 현재 구동되고 있는 애플리케이션의 유지보수를 하다가 기존로직에는 영향을 주지 않고 프록시 객체를 통해 접근제어나 데코레이터를 추가해야 하는 일이 생긴다면 클라이언트 수만큼 프록시를 생성해 주입해주는 일은 시간 소유가 상당히 커서 비효율적이다. 그래서 동적으로 프록시 객체를 런타임 시점에 개발자가 아닌 자바가 만들어 주입해주는 역할이 필요한데, 이는 자바에서 기본적으로 제공해주는 JDK 동적 프록시를 사용해서 가능하다... 2022. 1. 22.
Server Networking Proxy 내부망에서 외부망과의 통신 시 Direct connection보다는 보안상 이유로 Proxy Server을 통하여 연결하는 경우가 생각보다 많습니다. 그렇기에 시스템의 설정 부분부터 실제 애플리케이션 코드상에서 두 가지 작업을 진행해 주어야 합니다. Linux 설정 해당 애플리케이션이 Linux 기반으로 동작하는 서버라면 우선 외부로 나가는 트래픽을 프락시를 통해 외부로 나가는 요청을 할 수 있도록 해주어야 합니다. .bashrc,. bash_profile,. bashrc_profile에 설정합니다. vi ~/.bashrc export http_proxy=http://www.proxyserver.com:port export https_proxy=http://www.proxyserver.com:port #.. 2021. 11. 14.
메일 발송 내부망에서 SMTP 서버의 접근 권한을 얻었고 이제 사용자들에게 메일 발송 로직을 작성했는데 생각보다 막히는 부분이 많았다. 1. SMTP 인증하는 부분에서 ID 및 PASSWORD가 없으니 25번 포트로 진행하라는 답변을 인프라팀에게 전달받았다. 그래서 테스트를 진행하는 과정에서 오류가 난다. 디버깅을 통해 도대체 어느 부분에서 오류가 발생하는지 확인하기 위해 찾아봤더니.. Authenticator auth = new SMTPAuthenticator(user, pwd); Session session = Session.getInstance(props, auth); //이걸루 변경 Session session = Session.getInstance(props); 세션을 얻는 과정에서 오류가 발생했다. te.. 2021. 11. 6.
SSL/TLS 서버 통신 (JSSE, TrustManager) JSSE Java Secure Socket Extensing 통칭 JSSE는 안전한 인터넷 통신을 가능하게 하는 자바 패키지 및 FrameWork입니다. TLS/SSL을 구현한다라는 것은 응용 계층의 프로토콜인 HTTP, SMTP, FTP, Telent을 사용하는 클라이언트와 서버 간의 데이터의 안전한 통신을 보장하는 안전한 네트워크 애플리케이션을 개발하는 것과 같습니다. 이 JSSE 패키지에는 java.security, java.net 를포함하고 있습니다. 또한 javax라는 표준 확장 패키지도 존재하고 있습니다. * Extension package sun사에서 공식적으로 간주한 패키지를 표준 확장 패키지라하며 그렇지 않은 것을 비표준 패키지라고 합니다. 표준 확장 패키지에는 보통 java 뒤에 x가 .. 2021. 11. 6.
JavaMail API 오랜만에 자바 포스팅이다. 빌어먹을 성격 때문에 개발할 때 사용하는 API 세부를 알지 못하고 구현하면 정신병 걸릴 것 같아서, 주말에 Mail 관련 API를 좀 살펴보기로 했다. 사실 SMTP 서버까지는 고객사에 구축되어 있는 상태고 그냥 정보만 받아와서 메일 쏴주면되는데, 궁금하니까 못 참치 JavaMail API JavaMail API는 메일 및 메시징 응용프로그램을 빌드하기 위해 플랫폼과 프로토콜에 독립적인 프레임워크를 제공합니다. 메일 시스템을 구성하는 객체를 정의하는 추상 클래스 세트를 제공합니다. 전자 메시지를 읽고, 작성하고, 보내기 위한 옵션 패키지입니다. 이 API는 시스템 구성 요소 및 인터페이스를 포함하여 메시징 시스템에 대한 인터페이스를 구성하는 데 사용되는 요소를 제공합니다. J.. 2021. 10. 24.
짧)[JAVA] 객체지향 세계 보호되어 있는 글 입니다. 2021. 4. 25.
[JAVA] JAVA Serialize 프로젝트를 보게 되면 심심치 않게 보는 코드가 implements Serializable입니다. 저는 아무렇지도 않게 넘기다가 문득 궁금해져서 한번 파보려고 합니다. 자바에서 직렬화란 자바 시스템에서 사용되는 객체 혹은 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술과 역으로 바이트 형태의 데이터를 객체로 바인딩시켜주는 것을 말합니다. 사실 자바스크립트에서도 JSON.parse를 통해 객체를 json으로 직렬 화하는 코드를 많이 보셨을 겁니다. JSON과 마찬가지로 자바 직렬 화도 하나의 포맷 형태로 생각할 수 있습니다. 어떤 데이터 직렬 화가 존재할까요? CSV : 표 형태의 다량의 데이터를 직렬 화하는데 가장 많이 쓰이는 포맷으로 , (콤마)를 기준으로 데이터.. 2021. 4. 23.
[JAVA] Stream 여기서 말하는 스트림은 자바 8에서 추가된 Stream API가 아니다. 자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림이라는 흐름을 통해 다룬다. 스트림이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미합니다. 즉 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 한다고 한다. 입출력 스트림 스트림은 한 방향으로만 통신할 수 있으므로, 입력과 출력을 동시에 처리할 수는 없습니다. java.nio는 채널을 제공해주는 데 이 채널은 입출력을 동시에 처리할 수 있는 양방향 채널입니다. 하지만 스트림에서는 단 방향만통신할 수 있기 때문에 입력 스트림과 출력 스트림으로 구분됩니다. 자바에서는 java.io 패키지를 통해 InputStream과 Out.. 2021. 4. 19.
[JAVA] 디자인 패턴 github.com/yusungill/design_Pattern/commits/master yusungill/design_Pattern Contribute to yusungill/design_Pattern development by creating an account on GitHub. github.com 2021. 4. 13.