Spock은 Groovy문법을 사용한 단위 테스트 프레임워크입니다. Spock은 다른 테스트 프레임워크에 비해 시간을 아낄 수 있고 Stubbing, Mocking, Spying 작업들을 아주 간단한 코드로 할 수 있습니다. 또한 Spock는 요즘 핫한 BDD에 적합한 프레임워크라고 합니다. 오늘은 이처럼 다양한 장점을 가진 Spock을 간단하게 살펴보도록 하겠습니다. def "나이가 30살이다"() { given: def age when: age = 29 then: 30 == age } 위 코드는 잘 못된 코드이기 때문이기 때문에 테스트가 실패합니다. 이 때 Spock는 명확하고 아름답게 오류 메세지를 표시해 줍니다. 이것은 Spock을 사용하는 또 다른 이유입니다. Condition not satis..
NullPointerException은 자바 개발자를 가장 많이 괴롭히는 예외 중 하나입니다. 컴파일 시에는 잠복해 있다가 런타임에 발생하는 NPE는 코드 곳곳에 묻혀있는 지뢰나 다름없습니다. 실제로 NULL 참조를 처음 고안한 영국의 컴퓨터 공학자 Tony Hoare 조차 NULL 참조를 만든 것은 10억불짜리 실수라고 이야기 했을 정도입니다. 이전까지 자바 개발자들은 NPE를 피하기 위해 다음과 같은 방어 코드를 만들어야 했습니다. public City getCity(InputInformation input) { if (input.getCity() == null) { return City.SEOUL; } return input.getCity(); } NPE를 방지하기 위해 분기문을 사용하게 되고 자연..
민감한 정보를 서버나 DB에 직접 업로드 하게 되면 외부에 노출될 수 있는 위험이 생기게 됩니다. 또한 현대 웹 개발 환경은 서비스를 다중 서버에 분산해서 제공하고 자연스럽게 민감한 정보들도 다중 서버에 분산되서 저장되게 됩니다. 따라서 민감한 정보에 대한 위험도는 더욱 더 증가할 수 밖에 없습니다. Vault는 이런 문제점을 해결해 주는 오픈소스(paid version 도 존재)입니다. Vault 는 실제 애플리케이션 서버에서 민감한 정보드를 제거하고 Vault에 요청해서 사용할 수 있도록 만들어 줍니다. 실제로 Vault를 사용한 프로젝트는 위 이미지와 비슷한 구조를 가지게 됩니다. 실제로 Spring 에 Vault 를 적용하는 방법을 알아보도록 하겠습니다. - 추후 작성 예정
자바8에 도입된 새로운 기능 중 스트림(Stream)이 있습니다. 스트림을 이용하면 선언형으로 기존의 컬렉션 데이터들을 처리할 수 있게 됩니다. 쉽게 생각하면 컬렉션 반복을 좀 더 효율적이고 간편하게 수행할 수 있는 방법이라고 볼 수 있습니다. 또한 데이터의 병렬 처리에도 용이한 장점이 있습니다. 위 그림은 Stream을 이해하기 쉽게 표현한 그림입니다. 그림에서 물고기들은 어부들이 설치한 그물에 걸러지고 일정한 규격으로 포장된 뒤 소비자에게 전달됩니다. 자바에서 스트림은 위 그림의 흐름이라고 할 수 있습니다. 이런 흐름속을 헤엄쳐 다니는 물고기와 해양 생물들은 컬렉션 데이터라고 할 수 있겠죠. 데이터들은 스트림을 유영하다가 어부가 설치한 그물에 걸러지게 됩니다. 코드에서는 filter로 표현 되는 부분..
함수형 프로그래밍(Functional Programming)은 하나의 새로은 프로그래밍 패러다임입니다. 함수형 프로그래밍은 기본적으로 람다대수(lambda calculus)에 그 근간을 두고 있는 개념으로 다수의 함수형 프로그래밍 언어들은 람다 연산을 발전시킨 것으로 볼 수 있습니다. 지난 몇 년간 함수형 프로그래밍은 가장 인기있고 중요한 프로그래밍 패러다임이 되었고 객체지향 언어인 자바 역시 이런 함수형 언어의 장점을 도입하게 됩니다. 함수형 언어의 가장 큰 특징 중 하나는 함수가 1급객체(First class object)로 취급된다는 점입니다. 1급객체는 변수나 데이터 구조 안에 담길 수 있고 파라미터나 반환값으로 사용가능한 객체를 말합니다. 우리가 알고 있는 고전적인 자바에서 메소드는 1급 객체(..
아래와 같은 레거시 코드가 있다고 생각해 보자. public boolean hasTray(List menus) { // 메뉴가 3개 이상이면 들고가기 쉽지 않기 때문에 쟁반이 필요하다. if (menus.size() > 2) { return true; } for (String menu : menus) { // 국물이 있거나 뜨거 요리는 들고가기 어렵기 때문에 쟁반이 필요하다. if (menu.equals("오뎅") || menu.equals("라면")) { return true; } // 세트 메뉴는 서빙되는 음식이 무조건 3개 이상이라 쟁반이 필요하다. if (menu.contains("세트")) { return true; } } return false; } 위 코드는 분식집에서 주문받은 음식을 서빙할..
30년 라면 외길 인생을 걸어온 대한민국 최고의 라면 장인 윌슨씨는 최근 생활의 달인에 라면 달인으로 소개되며 유명세를 떨치고 있었습니다. 그 덕분에 그의 라면 가게 역시 개점이래 최대의 호황을 맞고 있었지만 손님이 너무 많이 몰리는 탓에 알바생을 추가로 고용할 수 밖에 없었죠. 그러나 새로운 알바생들은 아직 윌슨씨 가게의 라면 가격을 제대로 외우지 못해 계속해서 계산 실수를 하고 있었습니다. 그도 그럴것이 국내 최고의 라면 장인 답게 윌슨씨는 라면에 여러가지 토핑을 추가해 다양한 맛의 라면을 만들고 있었고 그 토핑들의 가격이 각각 달랐기 때문에 처음 일을 시작하는 알바생들이 쉽게 계산할 수 없었기 때문이죠. 윌슨씨는 고민끝에 라면의 가격을 자동으로 계산해 주는 프로그램을 제작하기로 결심했고 그가 아는 ..
루이스는 최고의 개발자가 되기 위해 수련을 이어가던 중 통장 잔고가 바닥나는 불운을 겪게 되었습니다. 그는 생활비를 마련하기 위해 어쩔 수 없이 편의점 야간 알바를 시작하게 되었죠. 하지만 낮에는 개발 공부를 하고 밤에는 아르바이트를 하는 생활이 결코 쉽지는 않았습니다. 특히 잠이 부족한 것이 항상 문제였죠. 루이스는 지난 한 달 간의 아르바이트 경험으로 새벽 2시 정도가 지나면 손님이 거의 오지 않는다는 사실을 파악했습니다. 손님이 없는 동안에는 창고나 카운터 의자에 앉아 잠깐 눈을 붙일 수 있을 것입니다. 하지만 손님이 오면 얼른 나와서 업무를 시작해야겠죠. 만약 손님이 왔는데도 계속 잠을 자고 있다면 그는 알바를 잘리고 말것입니다. 루이스는 자신의 특기를 살려 손님이 문을 열고 들어오면 자신이 쪽잠..
- Total
- Today
- Yesterday
- GROUP BY
- Count
- 로그
- Markov
- DP
- 경고
- REST API
- RESTful
- 마르코프 연쇄
- Spring in Action
- 유지보수
- 문장 생성기
- html
- 자바스크립트개론
- 클린코드
- 자바스크립트 개론
- 전략패턴
- restful api
- markov chain
- java
- was
- 코딩의 기술
- 동적계획법
- 야근
- 크롬
- CONVENTIONS
- 디자인패턴
- 몰라서망신
- 마르코프
- Warning
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |