목록전체 글 (302)
elevne's Study Note

네트워크는 여러 대의 컴퓨터를 통신 회선으로 연결한 것을 말한다. 지역 네트워크는 회사, 건물, 특정 영역에 존재하는 컴퓨터를 통신 회선으로 연결한 것, 인터넷은 이러한 지역 네트워크들을 통신 회선으로 연결한 것을 말한다. 컴퓨터의 고유한 주소 역할을 IP, Internet Protocol 이 해준다. IP 주소는 네트워크 어댑터 (Lan 카드) 마다 할당되는데, 한 개의 컴퓨터에 두 개의 네트워크 어댑터가 장착되어 있다면 두 개의 IP 주소를 할당할 수 있는 것이다. 프로그램은 DNS (Domain Name System) 을 통해 연결할 컴퓨터의 IP 주소를 찾는다. 대중에게 서비스를 제공하는 대부분의 서버는 도메인 이름을 가지고, IP 주소를 등록한다. (e.g., www.naver.com : 222..

Stream 을 사용할 때 Optional, OptionalDouble, OptionalInt, OptionalLong 클래스를 사용할 수 있다. 이들은 저장하는 값의 타입만 다를 뿐 제공하는 기능은 거의 동일하다. Method Description isPresent() 값이 저장되어 있는지 여부 orElse() 값이 저장되어 있지 않을 경우 디폴트 값 지정 ifPresent() 값이 저장되어 있을 경우 Consumer 에서 처리 컬렉션의 요소는 동적으로 추가되는 경우가 많은데, 가령 컬렉션의 여러 요소들을 통해 하나의 집계값을 산출하려 할 때 컬렉션의 요소가 추가되지 않아 저장된 요소가 없을 경우 NoSuchElementException 예외가 발생할 수 있다. 이럴 때 Optional 클래스들을 사용..

AOP 는 IoC/DI, 서비스 추상화와 더불어서 Spring 의 3 대 기반 기술 중 하나이다. 스프링에 적용된 AOP 의 적용 대상은 선언적 트랜잭션 기능이다. 서비스 추상화를 통해 많은 근본적인 문제를 해결했던 트랜잭션 경계설정 기능을 AOP 를 이용하여 더욱 깔끔하게 작성해볼 수 있다. 이전까지 작성한 UserService 는 스프링이 제공하는 트랜잭션 인터페이스를 사용했지만 비즈니스 로직이 주인이어야 할 때에도 메소드 내에는 트랜잭션 코드가 더욱 많은 자리를 차지하고 있다. 트랜잭션 경계설정 코드와 비즈니스 로직 코드 간에는 서로 주고받는 정보도 없다. 이럴 때, 트랜잭션 코드를 간단하게 클래스 밖으로 뽑아내 버릴 수 있다. UserService 클래스를 다른 클래스에서 참조하여 사용할 수 있게..

보조 스트림이란다른 스트림과 연결되어 여러가지 편리한 기능을 제공해주는 스트림을 말한다. 보조스트림을 필터 스트림이라고 부르기도 하는데, 이는 보조스트림의 일부가 FilterInputStream, FilterOutputStream 의 하위클래스이기 때문이다. 보조스트림은 그 자체만으로는 입출력을 수행할 수 없다. 입력 소스와 바로 연결되는 InputStream, FileInputStream, OutputStream, Writer 등에 연결해서 입출력을 수행하게 된다. 보조스트림은 문자 변환, 입출력 성능 향상, 기본 데이터 타입 입출력, 객체 입출력 등의 기능을 제공한다. 보조스트림을 생성할 때는 자신이 연결될 스트림을 아래와 같이 생성자의 매개값으로 받게된다. 보조스트림 변수 = new 보조스트림(연결..

프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번하게 일어난다. Java 에서 데이터는 Stream 을 통해 입출력되므로 Stream 의 특징을 잘 알아야한다. Stream 은 단일 방향으로 연속적으로 흘러가는 것을 뜻한다. 프로그램이 데이터를 입력받을 때는 InputStream, 데이터를 보낼 때에는 OutputStream 이라고 한다. 입력스트림의 출발지는 키보드, 파일, 네트워크 상의 프로그램 등이 될 수 있고, 출력스트림의 도착지는 모니터, 파일, 네트워크 상의 프로그램이 될 수 있다. 프로그램이 네트워크 상의 다른 프로그램과 데이터 교환을 하기 위해서는 양쪽 모두 입력스트림과 출력스트림이 따로 필요하다. 기본적인 데이터 입출력 API 는 java.io 패키지에서 제공한다. ..

Stream 은 Java 8 부터 추가된 컬렉션 (+ 배열) 의 저장 요소를 하나씩 참조해서 Functional Style 로 처리할 수 있도록 해주는 반복자이다. Stream 은 Iterator 과 비슷한 역할을 하는 반복자이지만, 람다식으로 요소 처리 코드를제공하는 점과 내부 반복자를 사용하므로 병렬처리가 쉽다는 점, 중간처리와 최종처리 작업을 수행할 수 있다는 점에서 차이가 있다. java.util.Stream 패키지에서 Stream API 들을 확인해볼 수 있다. Stream 은 데이터의 필터링, 매핑, 그루핑, 정렬 등의 중간처리와 합계, 평균, 카운팅, 최대값, 최소값 등의 최종처리를 파이프라인으로 해결한다. 파이프라인은 여러 개의 스트림이 연결되어 있는 구조를 말한다. 스트림이 생성될 때 바..

기존에 작성한 UserService 에 새로운 기능을 추가한다. 고객의 레벨이 업그레이드 될 때 해당 사용자에게 업그레이드 안내 메일을 보내는 것이다. 유저의 레벨을 업그레이드하는 upgradeLevel() 메서드 끝에 새로 만드는 메일을 보내는 메서드를 추가해주면 될 것이다. private MailSender mailSender; public void sendUpgradeEmail(User user) { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setTo(user.getEmail()); mailMessage.setFrom("useradmin@ksug.org"); mailMessage.setSubject("UPGRADE 안..

애플리케이션을 개발하다 보면 다수의 객체를 저장해두고 필요할 때마다 꺼내서 사용하는 경우가 많다. 이 때 배열을 사용할 수도 있지만, 배열은 저장할 수 있는 객체의 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하기에는 문제가 있다. 또, 배열을 사용했을 때의 문제점으로 객체를 삭제했을 때 해당 인덱스가 비게 된다. Java 에서는 이러한 배열 대신 Collection 프레임워크의 다양한 자료구조들을 사용해볼 수 있다. ArrayList ArrayList 는 List 의 구현클래스이다. 기본 생성자로 ArrayList 객체를 생성하면 내부에 10 개를 저장할 수 있는 초기 용량을 가지게 된다. 저장되는 객체 수가 늘어나면 용량이 자동으로 증가하지만, 처음부터 크게 잡고 생성할 수도 있다..