혹시 String createdAt 로 선언하지 사용하지 않으신가요? DateTimeParseException 으로 고통받고 있지 않으신가요? 하지만 String 타입으로 데이터를 처리하고 있다면 버그나 Exception 이 발생하는 코드를 작성할 확률이 높아진다. 강타입 언어를 사용하는 장점을 전혀 활용하고 있지 못하기 때문에 적절한 타입을 사용하는 게 중요하다. 왜 도움이 되는지는 찬찬히 설명해 보려고 한다. java 표준 API 사용되는 타입을 사용한다면 데이터에 대한 유효성 검증을 library level (정확히는 Type 이 생성되는 시점) 에서 검증이 된다. Exception Handling이나 validation check를 코드를 작성하는 개발자가 직접 하지 않아도 된다는 뜻이다. 그렇다..
KSUG 하반기 가을세미나 - 당신의 자바를 한단계 올려드립니다 더 자바 코드를 테스트하는 다양한 방법 - 백기선 최근 MSA 환경에서 다른 시스템이나 데이터 중심의 테스트코드를 작성해야 하는데, 이를 해결하기 위한 좋은 방법이 될것 같다는 생각이 들었다. 그리고 테스트환경을 실제 환경하고 동일하게 해야한다에 대해서 여러 의견이 많지만, 동일하게 해야 한다는 관점에서 좋은 방법을 제시해 주셨던 것 같다. 발표자료: https://bit.ly/2q8S3Qo 세션 내용 Spring Boot 2.2 가 릴리즈 되면서 JUnit 5 가 추가되었다. Jupiter (junit 5 프로젝트명) 는 하위호환이 되지 않고 vintage engine 을 추가 해야한다. Spring-boot-starter-test 2.2..
이글은 Spring Boot 로 Test 작성시 @MockBean 이 제대로 동작하지 않는 삽질을 하게 되어 정리합니다. 새로운 조직에 와서 @MockBean 을 사용을 하여 IntegrationTest 를 작성 중이였는데, Mocking 이 제대로 동작을 하지 않아서 한참을 삽질을 하였다. 결론 부터 말하면 바로 이전팀에서도 동일한 삽질을 했었다. 하지만 똑같은 삽질을 하게 되어 이렇게 정리하게 되었다. 분명 나와 같은 실수를 하는 사람들이 있을 지도 모르기에 기록으로 남기고자 한다. 왜 삽질을 했나? Spring Boot 으로 DBUnit 을 이용하여 테스트를 작성할려고 하면 springtestdbunit/spring-test-dbunit 가이드대로 하게 된다. 그런데 @MockBean 이 동작 하지..
Java Network 오목 게임 대학교 졸업작품으로 만들었던 오목게임. 실제로는 군대에서 짬짬이 코딩을 하여서 만들어서 대학대 완성을 시켰던 프로그램이다. 허접한 구현이고 막코딩된 소스라 공개하기 부끄럽지만 기능을 더 향상시키기 위해서 오픈을 하도록 하겠다. 서버는 항상 떠 있으니 친구랑 접속해서 한게임 해봐도 될것 같다. 만약 필자가 있다면 쪽지 주시면 한게임~ 고고!! 구현된 기능 채팅기능 쪽지기능 게임방 개설 기능 오목 게임기능 한수물리기 기능 실행방법 jar 파일 다운로드 - 다운로드링크 실행 > cmd 창에서 다음 명령 실행 java -jar FiveStonesClient.jar 아이디 비번은 아무거나 입력 ( 현재는 체크하지 않음 ) 소스공개 github https://github.com/a..
Prototype Pattern 객체생성을 위한 디자인패턴중 하나인 프로토타입 패턴(Prototype Pattern)에 대해서 설명하도록 하겠다. 객체생성시 비용을 줄이기 위한 패턴들이니 이점에 유의에서 읽어보도록 하자. 1. 개요 프로토타입 패턴은 동일한 객체를 여러번 생성해야 하는 비용을 줄이기 위한 고안된 패턴이다. 예를 들어 수만건의 데이터를 읽어들인 분석을 위한 기초자료를 가지는 객체가 있다고 하자. 이를 분석할때마다 로딩한다면 그 비용은 엄청 날것이다. 이런 경우에 한번만 로딩후 이객체를 계속 복제해서 사용한다면 비용을 상당히 줄일 수 있을것이다. 2. 클래스 다이어 그램 Client 복제된 객체를 이용하는 클래스 Prototype clone 메소드를 가지고 있는 인터페이스 ConcretePr..
Builder Pattern 1. 개요 복잡한 응용프로그램을 개발하다 보면 특정 기능을 위한 객체들의 관계가 복잡해질 수가 있다. 객체를 생성하기 위한 프로세스나 패턴이 동일할 경우 새로운 타입의 객체를 쉽게 추가 할수 있도록 할 수 있는 패턴이 Builder Pattern 이라고 할 수 있겠다. 자동차를 만들기 위해 동일한 공정으로 여러가지 유형의 자동차를 만들 수 있겠다. 빌더패턴을 이용하면 여러디자인의 자동차를 동일한 공정으로 만들수 있다. 2. 클래스 다이어그램 Director 빌더 인터페이스를 이용하여 복잡한 객체를 만드는 역할을 한다. Builder 대상객체의 일부를 만들기 위한 추상 인터페이스 들을 지정한다. ConcreteBuilder Builder Interface를 구현하며 대상객체 생..
스프링 AOP구현 방식은 2가지가 있습니다. 1. 대상객체가 인터페이스 구현방식을 경우 -> 일반적인 proxy pattern 을 이용하여 AOP구현 2. 대상객체가 인터페이스를 구현 안햇을 경우 -> CGLIB 라이브러리를 이용하여 구현 CGLIB이란,동적으로 대상객체를 상속하는 클래스를 만들어 프록시를 구현한후필터클래스를 이용하여 공통의 관심사(Aspect)적용 참고사이트 - http://javacan.tistory.com/entry/114 --- 내용 추가 ----* 강제로 CGLIB 통한 프록시객체 생성방법 1. aop:config 태그에 다음 속성 추가 : proxy-target-class="true" 2. 어노테이션의 경우
프록시 패턴 (Proxy Pattern) 1. 개요 Proxy의 사전적 의미는 대리, 대리권 이라는 뜻을 가지고 있다. 실제 사용하려는 객체를 대신해서 역할을 해주는 패턴이라고 이해하면 될 것이다. 주로 원래 객체의 접근제어를 목적으로 이용된다. 어떤 이유 때문에 proxy 패턴이라 불려지는지 알아 보도록 하자. 우리가 알아볼 패턴유형으로는 Virtual Proxy, Protection Proxy, Remote Proxy 등이 있다. 2. 클래스 다이어그램 Subject interface proxy 클래스와 RealSubject 클래스가 구현을 하는 인터페이스로 Client 에서는 이 인터페이스만 알고 있으므로 내부 동작은 어떻게 이뤄지는 지 모르게 된다. Porxy class RealSubject 객체..
RESTful Service를 개발하면서 사용자( consumer ) 에게 서버족의 예외상황이나 에러코드에 대해 어떻게 처리해줘야 하는지 간단하게 정리해보고자 한다. REST 이론에서 가이드하는 방식도 있지만, RESTful 서비스 취지대로 Consumer 가 얼마나 편리하고 간편하게 서버의 자원을 이용할수 있도록 가이드하는게 제일 우선이라고 말할수 있겠다. 그럼 먼저 RESTful 에서 권장하는 방법에 대해서 간략하게 소개하고 그 다음 이를 어떻게 편리하게 사용할 수 있도록 구현하는지에 대해 알아 보도록 하자. 1. REST 이론 - 인증실패나 parameter 실패등이 발생했을때는 HTTP Header 의 Status 값을 이용하여 응답을 주라고 하고 있다. 예를 들어 인증실패의 경우 401 코드, ..
Spring Framework 를 사용하면서 설정파일에 대한 정확한 개념을 가지고 있지 못했던 것 같았다. 이번에 교육을 통해서 그동안 정확하게 머릿속에 정리되지 않았던 설정파일들에 대해 정리하고자 한다.필자와 같이 Spring Framework 를 사용하면서 무조건 코딩만 해왔던 분이라면 한번쯤 읽어보면 어떨가 하고 추천해본다. 몸값 높은 개발자를 위하여! 재미있는 개발을 위하여! 1. 디렉토리 구조 web server doocroot 폴더 구조의 일부를 보면 아래와 같다. WEB-INF 밑에는 컴파일된 class파일이 담겨져 있는 classes 폴더와 웹어플리케이션에서 사용하는 라이브러리들이 위치하는 lib 폴더가 대표적이다. 그리고 오늘 알아보려고 하는 dispater-servlet.xml, app..