스프링 부트 2 - 스프링 없이 서블릿으로 애플리케이션 만들기
임베디드 톰켓 서블릿은 자바의 표준 기술이고, 이 표준 기술을 구현한 제품들이 많이 존재한다. 그 중 가장 대표적인 서블릿 컨테이너가 톰켓이다. 톰켓도 자바로 만들어진 프로그램이다. 즉, 클래스에 오브젝트로 만들고 어떤 메소드를 실행하면 동작한다. 톰켓은 ‘임베디드 톰켓’이라는 라이브러리를 제공해준다. 스프링 부트를 처음 프로젝트 생성할 때 이미 임...
임베디드 톰켓 서블릿은 자바의 표준 기술이고, 이 표준 기술을 구현한 제품들이 많이 존재한다. 그 중 가장 대표적인 서블릿 컨테이너가 톰켓이다. 톰켓도 자바로 만들어진 프로그램이다. 즉, 클래스에 오브젝트로 만들고 어떤 메소드를 실행하면 동작한다. 톰켓은 ‘임베디드 톰켓’이라는 라이브러리를 제공해준다. 스프링 부트를 처음 프로젝트 생성할 때 이미 임...
스프링 부트란 무엇일까? 스프링 개발을 도와주는 여러가지 도구의 모음이자 스프링 자체를 확장하고 있는 프레임 워크, 라이브러리 기존의 스프링을 사용하기 위해선 너무 복잡한 고민이 필요하고, 시작을 빠르게 하기 어려웠다. 스프링이 제공하는 많은 선택지와 스프링과 함께 사용하는 표준 기술, 라이브러리를 어떤 것을 어떤 식으로 사용해야 할지에 ...
동시성이 필요한 이유 동시성은 무엇(what)과 언제(when)을 분리하는, 결합(coupling)을 없애는 전략이다. 프로그램의 구조와 효율 개선을 위해 동시성을 이용한다. 동시성은 어렵다. 각별히 주의하지 않으면 난감한 상황에 처한다. 미신과 오해 동시성은 항상 성능을 높여준다. 대기 시간이 아주 길어 여러...
창발적 설계로 깔끔한 코드를 구현하자 설계 품질 향상을 위한 단순한 설계 규칙(중요도 순) 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 단순한 설계 규칙 1: 모든 테스트를 실행하라 모든 테스트 케이스를 항상 ...
시스템 제작과 시스템 사용을 분리하라 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 ‘연결’하는) 준비 과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야 한다. public Service getService() { if (service == null) service = new MyServiceImpl(....
클래스 체계 표준 자바 관례에 따른 내부 체계 순서 static public 상수 static private 변수 private instance 변수 public 함수 private 함수는 자신을 호출하는 public 함수 직후에 선언 ...
TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 개발과 테스트가 대략 30초 주기로 묶인다. 매일 수십 개, 매달 수백 개, 매년 수천 개에 달하는...
외부 코드(오픈 소스 등)를 우리 코드에 깔끔하게 통합해야 한다. 외부 코드 사용하기 패키지 제공자나 프레임워크 제공자는 적용성을 최대한 넓히려 애쓴다.(그래야 많은 고객이 구매하니깐) 하지만 사용자는 자신의 요구에 집중하는 인터페이스를 원한다. 예시 : java.util.Map 문제점1 : 해당 객체를...
오류 코드보다 예외를 사용하라 오류 코드를 사용하면 호출자 코드가 복잡해지고, 잊어버리기 쉽다. 오류가 발생하면 예외를 던지는 편이 낫다. (호출자 코드가 더 깔끔해진다.) 논리와 오류 처리 코드가 뒤섞이지 않기 때문이다. // Bad public class DeviceController { ... ...
변수를 비공개(private)로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다. 그런데 많은 프로그래머는 조회(get) 함수와 설정(set) 함수를 당연하게 공개(public)해 변수를 외부에 노출할까? 자료 추상화 인터페이스나 getter/setter 함수만으로는 추상화가 이루어지지 않는다. 아무 생각없이 ...