전체 글
도커 소개 (Docker overview - get started 공식문서 번역)
도커 개요 애플리케이션의 개발, 배포, 실행을 위한 오픈 플랫폼이다. 애플리케이션과 인프라를 분리하여 어느곳에서든 빠르게 애플리케이션을 실행할 수 있게 해준다. 코드를 작성하는 것과 실제로 프로덕션에서 애플리케이션을 구동하는 사이의 딜레이를 최소화해준다. 도커 플랫폼 애플리케이션을 패키징하고 느슨하게 분리된 환경인 컨테이너에서 구동시켜준다. 한 호스트에서 여러 개의 컨테이너를 실행시킬 수도 있다. 컨테이너는 실행에 필요한 모든 것을 포함하고 있어서 호스트에 무엇이 설치되었는지에 의존할 필요가 없다. 컨테이너는 쉽게 공유도 가능해서, 다른 동료와 같은 방식으로 동작하는 컨테이너를 쉽게 공유할 수 있다. 도커는 컨테이너의 라이프사이클을 관리할 수 있는 도구와 플랫폼을 제공한다. 컨테이너를 이용하여 컴포넌트와..
도커 (Docker) 가 무엇인지 알아보자.
도커(Docker)? 개발자라면, 도커가 무엇인지 정확히는 몰라도 들어보긴 많이 들어봤을 것이다. 그렇다면 도커가 무엇일까? 정의부터 천천히 읽어보자. 정의 리눅스의 응용프로그램을 프로세스 격리 기술을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트이다. 컨테이너란? 코드와 의존성을 모두 패키징하는 소프트웨어 표준 단위이다. 이를 이용해 다른 컴퓨팅 환경에서도 애플리케이션을 빠르게 이식시킬 뿐만 아니라 신뢰성 있게 동작시킬 수 있다. 실행 중인 환경의 OS 에 관계 없이 동일한 동작을 보장한다. 왜 쓸까? 왜 쓰는지 알아야 도커를 이해하기 더욱 쉬울 것이다. 도커는 어떤 문제를 해결하고 있을까? 왜 쓸까 1 : 배포를 쉽게 하기 위해 사용한다 배포 경험이 어느정도 있는 개발자라면, 리눅스에서 만든 ..
이펙티브 자바, 쉽게 정리하기 - item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라
이펙티브 자바, 쉽게 정리하기 - item 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 마커 인터페이스의 정의 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스 ex) Serializable 은 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream 을 통해 쓸 수 있다(직렬화할 수 있다)고 알려준다. 마커 애너테이션 vs 마커 인터페이스 마커 인터페이스의 장점 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 사용할 수 있다. 마커 애너테이션은 타입으로 사용할 수는 없다. 타입으로 사용할 수 있기 때문에 런타임에야 발견할만한 오류를 컴파일 타임에 발견할 수도 있다. 마커 인터페이스는 적용 대상을 더 정밀하게 지정할 수 있다. ex) 특정 ..
이펙티브 자바, 쉽게 정리하기 - item 40. @Override 애너테이션을 일관되게 사용하라
이펙티브 자바, 쉽게 정리하기 - item 40. @Override 애너테이션을 일관되게 사용하라 @Override가 없을 때 하기 쉬운 실수 public class Item40Test { static class Bigram { private final char first; private final char second; public Bigram(char first, char second) { this.first = first; this.second = second; } public boolean equals(Bigram b) { return b.first == first && b.second == second; } public int hashCode() { return 31 * first + secon..
이펙티브 자바, 쉽게 정리하기 - item 39. 명명 패턴보다 애너테이션을 사용하라
이펙티브 자바, 쉽게 정리하기 - item 39. 명명 패턴보다 애너테이션을 사용하라 명명패턴이란? 메서드의 이름 앞을 test...로 짓는 등 이름에 패턴을 주어 Reflection 등으로 해당 패턴 검출 시 특정 작업을 수행하는 식의 코딩 형식이다. 명명패턴의 단점 오탈자의 위험 메서드, 파라미터, 클래스명 등 영역에 대한 설정이 불가능하다. 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다. ex) 특정 예외가 던져져야 올바르게 실행되는 메서드가 있다면? 예제 실행 샘플 1: @MethodTest, 일반 메서드 애너테이션 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MethodTest { } @..
5월 3주차 주간회고
열정을 잃어버렸었다 어떤 일이 있었는가? 개인적으로 번아웃과 같은 말을 싫어한다. 때때로 그런 건 노력하지 않았던 사실에 대한 핑계만 된다고 생각했기 때문이다. 나는 이번 주에는 거의 노력을 하지 않았다. 나는 비싼 돈을 내고 강의를 결제해놓고도 듣지 않았던 사람일 뿐이다. 어떤 감정을 느꼈는가? 자책하며 우울한 감정도 느끼고, 공허한 감정도 느꼈다. 내가 왜 이렇게 열심히 살고 있는지에 대해서도 다시 한번 생각해보고, 나는 왜 인생을 사는지에 대해서도 다시 한번 생각해보았다. 내가 공부를 하는 목적은 대체 불가능한 인력이 되어 그에 맞는 합당한 보상을 받고 경제적인 고통에서 벗어나기 위함이 가장 크다고 생각했다. 자아실현과 경제적 고통에서의 해방을 한꺼번에 이루고 싶다. 무엇을 배웠고 앞으론 어떻게 할..
ObjectMapper (Jackson) 커스텀 직렬화 역직렬화 구현
ObjectMapper (Jackson) 커스텀 직렬화, 역직렬화 ObjectMapper 는 객체를 잘 직렬화해서 JSON 문자열로 만들어주거나, JSON 문자열을 잘 파싱해서 객체로 만들어준다. 그런데 사용자 정의 객체의 경우엔, 개발자가 직접 직렬화, 역직렬화 시켜줄 필요가 있다. 이럴 때 어떻게 확장할 수 있을까? 다음과 같은 코드로 확장하면 된다. @Bean public ObjectMapper objectMapper() { SimpleModule module = new SimpleModule(); module.addSerializer(LocalDateTime.class, new CustomLocalDateTimeSerializer()); module.addDeserializer(LocalDateT..
자바 8 이상에서 날짜 올바르게 다루기
java.util.Date vs java.time.LocalDate 자바에서 날짜를 지원하는 대표적인 API 는 2가지가 있다. java.util.Date: Java 8 이전부터 존재한 API 이다. java.time.LocalDate: Java 8 부터 생긴 API 이다. java.util.Date 는 이름과 다르게 날짜 뿐 아니라 시간까지 다룬다. 반면, java.time.LocalDate 는 날짜만 다루는 역할을 하고, 시간까지 다루기 위한 java.time.LocalDateTime 이라는 API 가 따로 정의되어 있다. 위의 두개 객체 중에서 java.time 패키지에 있는 LocalDate 를 사용하는 것이 권장된다. 예전엔 날짜를 다루기 위해서 java.util.Date, java.util.C..
asciidoctor 를 통한 Spring REST Docs 자동 생성 세팅하기
Spring REST Docs 개요 RESTful 서비스의 문서 작성을 돕는다. Spring MVC Test 와 함께 자동 생성된 스니펫과 Asciidoctor 로 쓰여진 수기 문서를 조합한다. Swagger 와 같은 도구에 의해 만들어진 문서화의 한계로부터 해방시켜준다. 정확하고, 간결하고, 잘 구조화된 문서를 생성하는 것을 돕는다. 이 문서화 방법은 사용자가 가장 쉬운 방법으로 정보에 접근할 수 있도록 돕는다. Spring Boot Config 스프링 부트에서는 @AutoConfigureRestDocs 라는 애노테이션을 제공하여 테스트에 있는 Spring REST Docs 를 강화한다. build.gradle 세팅 방법 plugins 세팅하기 plugins { // Asciidoctor id 'org..
5월 2주차 주간회고
너무 많은 일에 치였다. 말 그대로 너무 많은 일에 치였다. 사이트 운영에는 정말 많은 노력이 소요된다. 어떤 일이 있었는가? (Fact) SNS 로그인에 관련된 문제가 있었다. SNS 로그인 정책과 휴면 정책이 변경되면서, 기존에 있던 회원에 대한 고려가 부족해 문제가 생겼다. 휴면의 경우는 로그인을 하지 않은지 1년이 지나야 일어나는 일이며, 휴면 회원은 다시 휴면을 해제하러 오는 일이 잦지 않으므로 이러한 장애는 수면위로 떠오르기 정말 힘든 장애다. 이제서야 발견되어 내가 고쳤다. 다행히, 전임자가 여전히 회사에 다니는 도중이라 여러가지 궁금한점을 물어보고 조치가 가능했다. SNS 로그인 기능은 https 에서만 테스트가 가능하고, 기존 히스토리를 몰라 재연데이터를 만드는데 어려움을 느껴 많이 애를..
javadoc 한글 깨짐 문제 해결
문제 현상 ./gradlew javadoc 위 명령어로 javadoc 빌드를 했을 때, 아래와 같은 에러가 난다. error: unmappable character (0xEC) for encoding x-windows-949해결 방법 Javadoc 빌드 시 인코딩을 추가해주면 된다. Gradle 기준으로 gradle.build 에 아래의 내용을 추가하자. javadoc { options.addStringOption("locale","ko_KR"); options.addStringOption("encoding","UTF-8"); options.addStringOption("charset","UTF-8"); options.addStringOption("docencoding","UTF-8"); } 이제 다시 ..
Spring REST Docs + asciidoctor 로 문서 자동 생성해보기
Spring REST Docs 개요 RESTful 서비스의 문서 작성을 돕는다. Spring MVC Test 와 함께 자동 생성된 스니펫과 Asciidoctor 로 쓰여진 수기 문서를 조합한다. Swagger 와 같은 도구에 의해 만들어진 문서화의 한계로부터 해방시켜준다. 정확하고, 간결하고, 잘 구조화된 문서를 생성하는 것을 돕는다. 이 문서화 방법은 사용자가 가장 쉬운 방법으로 정보에 접근할 수 있도록 돕는다. Spring Boot Config 스프링 부트에서는 @AutoConfigureRestDocs 라는 애노테이션을 제공하여 테스트에 있는 Spring REST Docs 를 강화한다. build.gradle 세팅 방법 plugins 세팅하기 plugins { // Asciidoctor id 'org..