전체 글 140

이펙티브 자바 - ITEM 42 익명 클래스보다는 람다를 사용하라

익명 클래스 JDK 1.1이 등장하면서 함수 객체를 만드는 주요 수단은 익명 클래스가 되었다. 아래코드는 문자열을 길이순으로 정렬하기 위한 비교 함수를 익명 클래스로 나타내었다. Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); 람다식의 등장 자바 8에 와서는 함수형 인터페이스를 람다식을 사용해 만들 수 있게 되었다. 람다는 함수나 익명 클래스와 개념은 비슷하지만 코드는 훨씬 간결하다. 아래 예제는 앞의 코드를 람다식으로 바꾼 코드이다. Collections.sort(words, (s1, s2) -> I..

성공과 실패를 결정하는 1% 네트워크 - 소켓을 작성하다.

Story 01 소켓을 작성한다. 1. 프로토콜 스택의 내부 구성 프로토콜 스택에는 TCP와 UDP라는 데이터 송 수신을 담당하는 프로토콜이 있다. 애플리케이션에서 보낸 의뢰를 받아 송수신 동작을 실행한다. 브라우저나 메일 등의 일반적인 애플리케이션이 데이터를 송 수신할 경우에는 TCP DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송 수신할 경우에는 UDP 그 아래에는 IP 프로토콜을 사용하여 패킷 송 수신 동작을 제어하는 부분이 있다. 인터넷에서 데이터를 운반할 때는 데이터를 작게 나누어 패킷이라는 형태로 운반하는데 이 패킷을 통신 상대까지 운반하는 것이 IP의 주 역할이다. IP 안에는 ICMP와 ARP라는 프로토콜을 다루는 부분이 포함되어 있다. ICMP : 패킷을 운반할 때 발생하는 오류..

Arrays.asList() vs Collection.singletonList() vs List.of()

사용법 3개의 메서드 모두 배열을 List로 변환하는 기능을 한다. 예시를 보면 바로 이해가 갈 것이다. //List.of String [] temp = {"a","b","c","d"}; List aslist = Arrays.asList(temp); //Collection.singletonList String [] temp2 = {"a"}; List singletonList = collection.singletonList(temp2); //List.of 메서드 String [] temp3 = {"a","b","c","d"}; List listOf = List.of(temp3) 위와 같이 배열을 List 타입으로 변환해준다. 위 예제에서는 String 타입 List 인데 다른 타입( ex) class, i..

서버 개발자로 살아남기 - 서블릿 컨테이너에 대해

Servlet 컨테이너란? Servlet 컨테이너는 말 그대로 Servlet을 담고 관리해주는 컨테이너다. 자세히는 Client의 Request를 받고, Response을 할 수 있게 웹 서버와 소켓을 만들어 통신한다. 대표적인 Servlet 컨테이너로 Tomcat(톰캣)이 있다. 톰캣도 마찬가지로 웹 서버와 소켓을 만들어 통신하며 JSP와 Servlet이 작동할 수 있는 환경을 제공한다. Servlet 컨테이너의 역할 웹 서버와의 통신을 지원한다. 서블릿 컨테이너는 서블릿과 웹서버가 통신할 수 있게 네트워크 통신에 필요한(Socket) 등을 API로 제공한다. 서블릿 생명주기(LifeCycle) 관리 서블릿 컨테이너는 서블릿의 생성과 파괴를 관리한다. 서블릿의 생명주기(LifeCycle) 서블릿 cla..

성공과 실패를 결정하는 1% 네트워크 - IP 주소를 DNS 서버에 조회한다.

Story 02 IP 주소를 DNS서버에 조회한다. 1. IP 주소의 기본 인터넷은 TCP/IP의 개념에 기초하여 만들어졌다. TCP/IP는 서브넷이라는 작은 네트워크를 라우터로 접속하여 전체 네트워크가 구성되어진다. 서브넷이란, 허브에 여러 대의 PC가 접속한 상태라고 생각한다. 여기에 ‘동번지’ 라는 형태로 네트워크 주소를 할당한다. 좀 더 큰 범위인 ‘동’에 해당하는 번호는 서브넷에 할당(네트워크 번호), ‘번지’에 해당하는 번호는 컴퓨터에(호스트 번호) 할당한다. 네트워크 번호와 호스트 번호를 합쳐서 IP주소라 한다. 액세스 대상의 서버까지 메시지를 운반할 때는 이 IP주소에 따라 액세스 대상의 위치를 파악하고 운반한다. 만약 메시지를 보내면 서브넷 안에 있는 허브가 운반하고 보낸 측에서 가장 가..

20년차 개발자의 실무 개발 노하우를 담은 JAVA 기초 - 내 기준 정리

개요 회사에서 외부강의를 지원하는 컨텐츠가 7개월전인가 생겼는데 그 때 '만만해보이는거 간단히 들어볼까'하고 신청했던 강의이다. 결론부터 말하자면 7장 전까지는 JAVA 기초 뿐만 아니라 통상적인 컴퓨터 언어라면 알아야 하는 내용들을 다루고, 그 이후부터는 JAVA의 특성을 다룬다. 그래서 7장 이후에 내가 몰랐던 내용이나, 아차차 까먹었다 하는 내용들만 간단히 정리 해놨다. 기승전결이 없는 나만 볼 수 있는 정리이다. Section 7 메서드 staic block → static method → static init 순서 자바 변수 메모리 할당 부분 좀더 알아보기 Section 8 상속 모든 클래스는 초기화 전에 상위클래스의 생성자를 호출한다. Section 9 다형성 & 추상화 instanceof O..

서버개발자로 살아남기 - 서블릿(Servlet)에 대해서

개요 현업에서 Spring boot를 사용하고 있기도 하고, 개인적으로 이 프레임웤에 대한 궁금증이 많기 때문에 기초부터 정리하면 좋겠다 라는 생각이 들어 차근차근 하나씩 정리해보려고 한다. Servlet 이란? 서블릿(Servlet)을 간단히 정의하자면 JAVA를 사용하여 웹을 만들기 위해 필요한 기술이다. 웹의 관점에서 본다면 Client의 요청을 처리하고, 이에 대한 결과를 다시 전송하고, Servlet Class의 구현 규칙을 따른다. 일반적으로 Web Server는 정적인 페이지만 제공한다. (Web Server) 만약 사용자가 요청한 시점에, 사용자가 작성한 데이터에 따라 다른 페이지를 보여줘야한다면?(WAS) 즉 **동적인 페이지를 제공해야한다면 서블릿(Servlet)이 필요하다. 예를 들어..

중첩 루프 조인(NESTED LOOPS JOIN)에 대해

NLJ, Nested Loop Join 은 중첩 for문과 같은 원리로 조건에 맞는 조인을 하는 방법이다. NESTED LOOP JOIN은 Driving Table로 한 테이블을 선정하고 이 테이블로부터 where절에 정의된 검색 조건을 만족하는 데이터들을 걸러낸 후, 이 값을 가지고 조인 대상 테이블을 반복적으로 검색하면서 조인 조건을 만족하는 최종 결과값을 얻어낸다. Driving Table , Driven Table Driving Table이란 JOIN을 할 때 먼저 액세스 되어 주도하는 테이블이다. 즉 조인을 할 때 먼저 액세스 되는 테이블을 Driving Table이라 하고, 나중에 액세스 되는 테이블을 Driven Table 이라 한다. 결정 방식은 옵티마이저(효율적인 방법으로 SQL 수행할 ..

서버 개발자로 살아남기 - 멀티 쓰레드 환경에서 Singleton 초기화 - DCL(Double Checked Locking)

Singleton 패턴은 전체 중 하나의 인스턴스만 존재해야 한다. 싱글 쓰레드를 사용하는 경우에는 문제가 되지 않지만, 멀티 쓰레드 환경에서 Singleton에 접근 시 초기화 관련해서 문제가 있다. 아래코드는 단순하게 구현한 멀티쓰레드 환경에서의 Singleton 초기화 방법이다. class Foo { private Singleton instance; public Singleton getInstance() { if(Objects.isNull(instance)) { instance = new Singleton(); } return Singleton; } } 위 코드는 멀티쓰레드 환경에 적합하지 않다. 쓰레드가 getInstance()에 동시에 접근하면 여러번 초기화 되는 문제가 발생하기 때문이다.(상호..

java에서 모니터 사용하기 - synchronized

세마포어는 실제로 매우 오래된 동기화 도구이다. 현재에는 모니터(monitor)라는 동기화 도구를 주로 사용하며, 이는 좀 더 고수준의 동기화 기능을 제공한다. QuickSort 알고리즘으로 유명한 C. A. R. Hoare(호어)의 논문에서 처음 등장한 개념이다. 하나의 객체마다 하나의 모니터를 결합할 수 있으며, 모니터와 결합된 객체는 잠금(lock) 기능을 가지고 있어 하나의 쓰레드만 접근 가능한다. 모니터 구조 ![[Pasted image 20221107200903.png]] 위는 모니터 구조를 나타낸 그림이다. 모니터는 공유 자원 + 공유 자원 접근함수로 이루어져 있고, 2개의 큐를 가지고 있다. 각각 mutual exclusion(상호배타) queue, conditional synchroniz..

728x90