부제: RabbitMQ Spring 연동, RabbitMQ 연동 이번 시리즈에서는 간단한 Spring AMQP 예제를 소개한다. 예제를 시작하기 전에 이번 포스팅에서는 AMQP라는 것에 대해 소개할 것이다. 1. AMQP 정의 Advanced Message Queuing Protocol의 약자이다. 이름에서 알 수 있듯 MQ(Message Queuing)기반의 프로토콜이다. 메시지관리, 큐잉, 라우팅(peer to peer, pub-sub), 신뢰성, 보안 등에 대해 정의하고 있다. Spring AMQP는 Spring에서 AMQP기반 메시징 애플리케이션을 개발할 수 있도록 Spring의 개념을 적용한 라이브러리이다. 비동기 메시지 리스너, 큐 선언, exchange 선언 및 binding 기능 등 전반적..
부제: 인터페이스와 추상클래스의 비교 인터페이스와 추상클래스의 차이점. JAVA 서적 아무거나 펴보면 무조건 나오는 내용이다. 혹시 당신은 그냥 문법적인 차이만 대충 알고 넘어가지 않았는가? 이번 글에서는 인터페이스와 추상클래스를 비교해보겠다. 1. Abstract Class 클래스의 형태 중 하나이다. 클래스는 일반 클래스(concrete class)와 추상 클래스(abstract class)로 나뉜다. 클래스를 abstract로 정의한 경우 그 클래스는 추상 클래스가 된다. 추상 클래스의 선언 예는 아래와 같다. public abstract class Human { public abstract void sleep(); public abstract int food(); } 추상 클래스가 일반 클래스와 ..
부제: 지극히 주관적인 컴퓨터공학과 졸업 후 진로 글쓴이는 4년제 대학의 컴퓨터공학과를 졸업하고 IT 플랫폼 기업에서 소프트웨어 개발자로 일하고 있다. 대학생 때의 기억을 더듬어보면 꽤 많은 선배, 동기들이 졸업 후 IT 플랫폼 기업 또는 스타트업 개발자를 택하지 않았던 것 같다. 대학을 졸업한지 5년정도 되었는데.. 내가 대학을 다니던 시절보다 소프트웨어 개발자가 되고 싶어하는 컴퓨터공학과 학생이 많은 것 같다. 대부분 학문이 그렇겠지만, 컴퓨터공학은 적응을 못하는 학생들이 많은 편이다. 특히, 개발이 적성에 맞지 않아 마음고생을 많이하고 진로에 대해 걱정하는 학생들이 많을 것 같다. 그래서 이번 글에서는 글쓴이가 직접 겪거나 본 것을 기반으로 컴퓨터 공학과를 졸업하면 어떤 업계로 진출할 수 있는 지 ..
이 글을 구글링해서 찾을 정도라면 Proxy가 뭔지 어느정도 이해하고 있을 것으로 생각한다. 혹시 Proxy가 뭔지 모르는 사람은 여기를 참고하자. 외부 repo 접근이 proxy로 인해 자유롭지 못할 경우에 꼭 설정해줘야만 한다. 나는 주로 엔터프라이즈 환경 (ex: 회사에서 개발할 때) proxy 문제를 겪는다. 1. YUMsudo vi /etc/yum.conf # 맨 밑에 아래 내용을 추가한다. proxy={{YOUR_PROXY_SERVER}} proxy_username={{USER_NAME}} proxy_password={{PASSWORD}} 2. WGETsudo vi ~/.wgetrc # 맨 밑에 아래 내용을 추가한다. http_proxy={{YOUR_PROXY_SERVER}} proxy_use..
부제: 비동기 호출 시 stacktrace가 유실되는 문제. javascript async stacktrace has lost Node.js는 single-thread 기반 비동기 방식이다. 그래서 나는 Node.js로 서버 애플리케이션을 개발할 때 Javascript가 ES6 이후로 지원하는 promise, async, await를 많이 사용한다. 나처럼 개발하는 사람들은 한 번쯤 직면 했을 문제에 대해 다뤄보려고 한다. 그건 바로.. 비동기 호출 시 Error의 stacktrace가 사라지는 현상 나는 서론을 쓰는데 재능이 없으니 바로 예제를 보여주겠다. 1. stacktrace가 없어지는 상황async function functionOne() { throw new Error('Error here p..
작은 규모의 서비스를 개발한다면 서버와 클라이언트 간 호출이 대부분일 것이다. 하지만 더 큰 서비스가 될 수록 서버와 서버간 HTTP 호출이 필요해진다. 서버 아키택처가 MSA와 같은 형태라면 정말 많이 사용할 것이다. Spring boot에서는 다른 서버의 API endpoint를 호출할 때 RestTemplate을 많이 쓴다. 이 글에서는 RestTemplate을 활용하여 다른 서버를 호출하는 서비스 예제를 다뤄볼 것이다. 시작하기 전에, RestTemplate을 잘 모른다면 여기를 참고하자. 이 예제는 JAVA 11로 작성되었으며 프로젝트의 전체 내용은 Github에 공유되어있다. 1. 설정하기먼저 Spring boot를 사용하기 위해 build.gradle을 아래와 같이 설정한다.plugins {..
Spring으로 개발하면서 개인적으로 궁금했던 내용이다. (나는 Field Injection을 자주 쓴다.) 왜 Field Injection을 쓰면 IntelliJ에서 쓰지 말라고 경고할까? 나는 그동안 Field Injection으로 불편함 없이 개발해왔다. 게다가 Field Injection이 Constructor Injection 보다 작성할 코드가 더 적다. 그러나 IntelliJ는 항상 아래와 같은 Yellow-Block으로 나한테 엄포를 놓는다. Field Injection을 쓴다는 건 소스코드 상의 Warning과 같다는 건데.. 궁금해져서 찾아볼 겸 이 내용으로 오랜만에 블로그에도 남긴다. 1. Field Injection? Constructor Injection? 먼저 Field Inje..
요즘 한국프로야구의 큰 화제로 FA 상한제가 주목받고 있다. 최근 선수협 이대호 회장이 FA 상한제에 대해 결정된 바가 없다는 의견을 밝혀 더욱 화제가 되었다. 안 그래도 요즘 KBO리그는 경기의 질적 하락, FA 몸값 거품론이 몇 년 전부터 꾸준히 제기되고 있었는데, 여기에 기름을 부어버린 격이 되었다. FA상한제와 FA 제도 개선안 FA 상한제는 2018년에 KBO가 제안한 FA 제도 개선안의 일부분이다. FA 제도 개선안은 다음과 같다. 1. FA 계약 4년 총액 80억으로 제한. 2. FA 취득 기간 1년 단축 3. FA 등급제 적용 FA 취득 기간 1년 단축과 FA 등급제 적용은 반가운 소식이다. FA 취득 기간이 1년 단축되면 고졸 선수의 경우 FA 취득까지 8년, 대졸 선수의 경우 7년이 소..
부제: Hibernate Dynamic Eager and Lazy Load. JPA eager/lazy load. JPA eager load 하기 Hibernate는 JPA의 대표주자라고 할 수 있는 ORM(Object Relational Mapping)이다. MyBatis와 같은 SQL-Mapper와 달리 개발자가 쿼리를 직접 작성하지 않는다는 특징이 있다. 그래서 생산성이 좋고 SQL을 직접 작성하지 않으니 쓸데없이 DAO를 찍어낼 필요도 없고 장점이 많지만, 이 글에서 다루지 않을 것이다. 1. Eager load 와 Lazy load Eager-load와 Lazy-load에 대해 먼저 짚고 넘어가자. 뒤따라올 두개의 모델 예제를 보면 된다. @Entity public class Student { ..
부제: 카카오 경력 면접 후기, 카카오 경력 코딩테스트 후기 작년 4월 초쯤 지원했으니 딱 1년이 지났다. 1년이나 지나서 가물가물하지만 경력공채 후기를 남겨본다. 기억이 잘안나서 오히려 보안유지(?) 에 좋을 것 같다. 서류 https://careers.kakao.com/ 에서 지원할 수 있다. 보통 카카오는 조직별로 소규모 채용을 하는 것으로 알고있다. 하지만 나는 대규모 경력 공채에 지원했다. 그동안 갈고 닦은(?) 이력서를 연필로 꾹꾹 눌러쓰듯 심혈을 기울여 제출했다. 서류 심사를 꽤 엄격하게 본 것 같던데.. 무난하게 합격할 수 있었다. 다른 회사에 비해 이력서 양식이 간단하다는 느낌을 받았다. 학력/자격증과 같은 항목은 아예 필수 입력 항목이 아니었다. 추천인을 기재하는 항목도 있었다. 나는 ..