| 아파치 카프카(Apache Kafka)란? 아파치 카프카(Apache Kafka)는 분산 스트리밍 플랫폼이며 데이터 파이프 라인을 만들 때 주로 사용되는 오픈소스 솔루션입니다. 카프카는 대용량의 실시간 로그처리에 특화되어 있는 솔루션이며 데이터를 유실없이 안전하게 전달하는 것이 주목적인 메세지 시스템에서 Fault-Tolerant한 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리할 수 있습니다. 아파치 카프카는 현재 2.x 버전까지 나와있고 초기에 Producer, Consumer 기능에서 0.10.x 버전에서부터 Connectors와 Stream Processors가 추가되었습니다. 이 포스팅에서는 Producer, Consumer에 대해서만 다룰 것이며 카프카가 어떤 아키텍처로 구성되어 있고 어..
지금까지 회사에서 기존 flume, kafka 로 이루어진 데이터 파이프라이닝 구축하고 운영하면서 프론트 제작이 필요해지는 시점이 왔다. Spring boot의 thymeleaf를 이용하는 부분도 고려해봤으나 이번에 프론트 기술 스택도 경험하고 및 프로덕트로 팔아볼만한 사이드 프로젝트 개발도 할 겸해서 Vue랑 React를 학습하기로 했다. 여담이지만 서버만 만지고서는 내가 혼자 서비스를 개발하기 참 어렵다. 어떤 서비스든 사용자에게 보여지는 화면이 있어야하는 데 그걸 잘 못하니ㅠ 둘 다 써보면서 (간단한 프로젝트 개발하는 정도) 느낀 점은 Vue가 훨씬 편했다. React 같은 경우는 개인적으로 느끼기에는 양방향 바인딩 같은 기본적인 기능을 구현하는 데 좀 더 신경을 써야되는 부분이 많았던 반면에 Vu..
| 스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. ..
청주 임장 후기 오늘은 기분전환도 할 겸, 청주로 임장을 떠나보았습니다. 한 때 갭투자자들의 성지였던 청주는 그동안 엄청난 물량 공급과 주변 세종시의 영향으로 가격이 지지부진 하였는데 청주의 앞으로의 모습은 어떨까 궁금한 마음에 한 걸음에 달려가 보았습니다!! [청주 임장 후기 1탄 – 2019.10월 청주 복대동 방문 후기] 지난 10월, 복대동 두산 지웰위브 2차를 중심으로 부동산 탐방을 다녀 온 뒤, 두 번째 방문입니다. 먼저, 지난 방문을 간략하게 복귀해보자면 SK하이닉스를 비롯한 대한민국 굴지의 대기업이 대농지구를 중심으로 뒷편에 자리잡고 있으며, 그 앞에 바로 1차 신영지웰시티 아파트와 지웰두산위브가 자리잡고 있습니다. 첫 방문 당시, 지웰시티몰과 현대백화점 같은 슬리퍼 상권 형성이 너무 잘 ..
| 들어가기 전에 GIT 저장소 지금 포스팅은 국토교통부에서 제공하는 부동산 공공데이터 API를 사용합니다. 아래 포스팅을 보시고 먼저 부동산 공공데이터 API를 신청해주시길 바래요! [유용한 정보들] - 국토교통부 공공데이터 부동산 실거래가 API 신청 방법 이전 포스팅 [파이썬/파이썬 웹 크롤링 - 부동산 공공데이터] - [파이썬 크롤링/부동산 데이터] 스크래피(scrapy) startproject로 초기 프로젝트 구성하기[파이썬/파이썬 웹 크롤링 - 부동산 공공데이터] - [파이썬 크롤링/부동산 데이터] scrapy를 이용한 부동산 공공 데이터 간단하게 받아오기[파이썬/파이썬 웹 크롤링 - 부동산 공공데이터] - [파이썬 크롤링/부동산 데이터] scrapy를 이용한 부동산 공공 데이터 파싱 및 추출..
| 스프링 게시판 만들기 - 부트로 쉽게 구현한 Spring 게시판 예제 git repository는 여기를 클릭하시면 됩니다. 스프링 게시판은 스프링 MVC로 스프링 부트에서 밀고있는 툴인 Thymeleaf를 사용하여 쉽게 만들 수 있습니다. REST API + SPA( React, Vue 등 )으로 만들 수 있지만 간단한 커뮤니티 사이트 구현을 위해서는 조금 과한 기술스택을 사용하는 것이 아닌 지 생각해 봐야 합니다. 스프링 MVC를 사용했을 때의 데이터 흐름은 아래의 링크를 참고하여 보시면 될 것 같습니다. [Spring/Spring 입문 - 개념 및 핵심] - [Spring] 스프링(Spring) MVC 아키텍처/설계 구조 위에서 JSP를 Thymeleaf라고 생각하고 읽으시면 스프링 부트 MVC..
| Spring REST Docs Spring REST Docs는 REST API에 대한 정보를 제공하는 Docs를 생성할 수 있는 Spring 진영에서 제공하는 툴입니다. Spring MVC Test 코드 작성시 추가적으로 Docs를 생성하는 코드를 첨가하여 생성할 수 있습니다. REST Docs는 REST 아키텍처의 self-descriptive 규약을 지키기 위해 REST API의 리소스 및 API 명세 그리고 요청과 응답 데이터의 설명까지 포함된 문서를 만들 수 있게 해줍니다. 모든 소스 코드는 여기에서 보실 수 있습니다. 프로젝트 구조+---src | +---main | | +---java | | | \---com | | | \---example | | | \---springrestapi | |..
| 스프링 HATEOAS HATEOAS는 Hypermedia As The Engine Of Application State 의 쟉자로 REST 아키텍처의 한 구성요소입니다. 이 HATEOAS를 통해서 어플리케이션의 상태를 전이할 수 있는 메커니즘을 제공할 수 있습니다. 예로 들어, 송금 어플리케이션이 현재 Home 화면을 나타내는 상태에 있다고 생각해 봅시다. 이 Home 화면에는 입금, 출금, 송금 등 다른 화면 혹은 기능, 리소스로 갈 수 있는 링크들이 존재할 것입니다. 이 링크를 통해서 다른 페이지로 가는 것을 다른 상태로 전이한다고 보고 이 링크들에 대한 레퍼런스를 서버 측에서 전송합니다. 그럼으로서 클라이언트가 명시적으로 링크를 작성하지 않고도 서버 측에서 받은 링크의 레퍼런스를 통해 어플리케이..
| Spring REST API 비즈니스 로직 적용 및 JUnitParam을 이용한 테스트 JUnitParam 테스트 라이브러리는 JUnit의 각 Test 메서드에 파라미터를 쓸 수 있게 함으로써 테스트 코드량을 줄이고 유지보수를 쉽게 해주는 유용한 라이브러리입니다. 이 JUnitParam 라이브러리를 이용하여 아래와 같은 비즈니스 로직을 적용한 코드를 작성하도록 하겠습니다. basePrice 와 maxPrice가 모두 0이면 free = true 그 이외에는 free = falselocation이 null 이거나 문자열의 길이가 0일 때 offline = false 그 외에는 offline = true 모든 소스 코드는 여기에서 보실 수 있습니다. 프로젝트 구조+---src | +---main | | ..
| Spring REST API Bad Request 처리 및 응답하기 이번 시간에는 서버에서 Bad Request 응답시, 응답 메세지에 Error 정보를 담아서 보내는 법을 알아보겠습니다. 모든 소스 코드는 여기에서 보실 수 있습니다. 프로젝트 구조+---src | +---main | | +---java | | | \---com | | | \---example | | | \---springrestapi | | | | SpringRestApiApplication.java | | | | | | | +---common | | | | TestDescription.java | | | | ErrorsSerializer.java | | | | | | | \---events | | | Event.java | | |..
| Spring REST API Bad Request 처리 이번 시간은 지난 시간에 이어서 HTTP 요청에 대해 잘못된 입력값이 보내진 경우, 어떻게 처리를 할 것 인지에 대해 알아보겠습니다. 한 경우는 입력값이 없는 상태, 또 하나는 비즈니스 로직에 위배되는 값이 보내왔을 때입니다. 모든 소스 코드는 여기에서 보실 수 있습니다. 프로젝트 구조+---src | +---main | | +---java | | | \---com | | | \---example | | | \---springrestapi | | | | SpringRestApiApplication.java | | | | | | | +---common | | | | TestDescription.java | | | | | | | \---events ..
| Spring REST API 입력값 제한하기 및 Bad Request 처리 REST API를 설계할 시 Client 측에서 잘못된 데이터를 요청하거나 전송할 시 그것을 처리하는 로직을 만들어야 합니다. 여기서는 DTO(Data Transfer Object)와 스프링 부트에서 제공하는 설정 정보를 이용해 손쉽게 해당 로직을 적용할 것입니다. 모든 소스 코드는 여기에서 보실 수 있습니다. 프로젝트 구조+---src | +---main | | +---java | | | \---com | | | \---example | | | \---springrestapi | | | | SpringRestApiApplication.java | | | | | | | \---events | | | Event.java | | ..
| 들어가기 전에 GIT 저장소 지금 포스팅은 국토교통부에서 제공하는 부동산 공공데이터 API를 사용합니다. 아래 포스팅을 보시고 먼저 부동산 공공데이터 API를 신청해주시길 바래요! [유용한 정보들] - 국토교통부 공공데이터 부동산 실거래가 API 신청 방법 이전 포스팅 [파이썬/파이썬 웹 크롤링 - 부동산 공공데이터] - [파이썬 크롤링/부동산 데이터] 스크래피(scrapy) startproject로 초기 프로젝트 구성하기[파이썬/파이썬 웹 크롤링 - 부동산 공공데이터] - [파이썬 크롤링/부동산 데이터] scrapy를 이용한 부동산 공공 데이터 간단하게 받아오기 | 국토교통부 부동산 매매데이터 분석 및 추출 국토교통부에서 제공하는 공공 데이터 포맷은 다음과 같이 xml 포맷으로 전송됩니다. 이번 포..
| 들어가기 전에 GIT 저장소 지금 포스팅은 국토교통부에서 제공하는 부동산 공공데이터 API를 사용합니다. 아래 포스팅을 보시고 먼저 부동산 공공데이터 API를 신청해주시길 바래요! [유용한 정보들] - 국토교통부 공공데이터 부동산 실거래가 API 신청 방법 이전 포스팅 [파이썬/파이썬 웹 크롤링 - 부동산 공공데이터] - [파이썬 크롤링/부동산 데이터] 스크래피(scrapy) startproject로 초기 프로젝트 구성하기 | 부동산 매매 데이터 간단하게 받아오기 국토교통부 사이트에 접속해서 로그인을 하신다음 마이페이지의 오픈 API를 클릭합니다. 그러면 전에 신청했던 API의 목록이 나오며 API에서 데이터를 얻기 위한 일반 인증키와 End Point를 다음과 같이 제공합니다. 이 일반 인증키와 E..
| 들어가기 전에 본 포스팅을 제대로 따라가려면 scrapy가 설치되어 있어야 합니다. 아래 링크를 참조하셔서 scrapy 설치를 먼저 진행해주세요! [Python/파이썬 프로그래밍] - 스크래피(scrapy) 설치 및 scrapy 프로젝트 시작하기 또한 부동산 공공데이터 사이트에서 공공데이터 API를 신청한 후 해당 API가 사용가능한 상태가 되어야 합니다. [유용한 정보들] - 국토교통부 공공데이터 부동산 실거래가 API 신청 방법 또한 본 포스팅은 다음 실행환경을 기반으로합니다. 1. window 10 2. Python 3.8.1 3. Scrapy 1.8.0 | scrapy 프로젝트 만들기 아래와 같은 커맨드를 치게되면 scrapy에 대한 프로젝트가 만들어 집니다.C:\Users\user\Deskt..
| 들어가기 전에 안녕하세요 새로비입니다. 최근 직장 다니면서 부동산 재테크에 눈을 뜨게 되어 열심히 투자 공부 중인 부린이(?)입니다. 이쪽 세계에 입문하면서 알게된 여러 웹사이트, 어플리케이션들이 있는데 대표적인 것들이 아파트 실거래가, 호갱노노, zip4입니다. 이 서비스들은 정부에서 제공하는 공공데이터 API를 토대로 만들어진 것들입니다. IT업계에 있으신 분들은 아주 친숙한 것들이지만 이쪽 분야를 잘 모르시는 분들은 그저 어렵고 복잡하기만한 분야인 것 같습니다. 하지만 전문적인 지식이 아닌 단순히 내가 원하는 데이터를 얻고 싶거나 조그마한 어플이나 웹을 개발하는 용도면 전혀 어려운 분야가 아닙니다. 절대로! 조금만 공부해보고 관심받으면 아주 쉽게 원하는 것을 얻어갈 수 있을 거라 확신합니다. 이..
이전 scrapy에 대한 소개와 아키텍처에 대한 글과 이어지는 내용입니다~ [Python/Python 프로그래밍] - 크롤링, 스크래핑할 때 이거 쓰세요. 최고의 파이썬 크롤링 솔루션 scrapy window에서 anaoncda를 통해 scrapy를 설치했을 때 계속 실행 오류가 뜨시면 일반 Python 공식 사이트에서 배포하는 Python 프로그램을 설치하여 Scrapy를 설치하세요! 저도 최근 anaconda를 설치해서 scrapy를 진행했었는데 계속 오류가 나서 Python으로 다시 진행했더니 잘 작동됩니다! | scrapy 설치 scrapy를 설치하기 위해서는 pip 패키지 매니져를 이용할 때는 다음과 같은 명령어를 입력하시면 됩니다. (이때, python이 설치된 디렉터리를 경로가 환경변수로 설..
자바에서 제공하는 this 키워드는 인스턴스 자기 자신를 가리키는 키워드입니다. 이 this 키워드를 통해 클래스 메서드 및 생성자에서 자기 자신의 데이터를 업데이트하거나 조작할 수 있습니다. 여기서 중요한 것은 this 키워드는 이 클래스를 기반으로 생성된 인스턴스를 가리키는 참조라는 사실입니다. 인스턴스를 가르키는 참조와 인스턴스 자체는 다르다는 것을 알아두셨으면 좋겠습니다. public class ThisExample { private String name; private Integer age; private String address; public ThisExample() { this.name = "KBS"; this.age = 19; this.address = "Seoul"; } public S..
| VisualVM VisualVM은 JVM 에서 동작하는 어플리케이션의 프로파일링 및 모니터링을 제공하는 GUI 툴입니다. 현재 다니고 있는 회사에서는 다른 JVM 모니터링 툴을 사용하지 않고 VisualVM을 통해 모니터링 및 프로파일링을 하고 있습니다. 다른 상용 툴(ex. 제니퍼소프트 제품들)들을 써보지 않아서 모르겠지만 VisualVM 만으로 아직까지는 큰 불편없이 19만줄 가량되는 마이크로아키텍처 기반 데이터 파이프라이닝 프로젝트를 운영하고 있습니다. | 실행 환경 Window 10 homeJava 1.8 IntelliJ IDE( Not Required ) | VisualVM을 이용한 log4j2 로그 수준 변경 운영을 하는 도중에 특정 Logger의 로깅 레벨 수준을 높여 DEBUG 및 TR..
| slf4j와 log4j2 slf4j는 자바 로깅 시스템을 쉽게 사용할 수 있도록 해주는 라이브러리이며, 다양한 자바 로깅 시스템을 사용할 수 있도록 파사드 패턴(facade pattern) 및 추상화를 통해 로깅 기능을 제공합니다. slf4j를 사용함으로서 얻을 수 있는 이점은 기존에 사용하는 로깅 시스템을 교체하고 싶을 때, 소스 코드를 수정하지 않고도 maven이나 gradle의 의존성 설정만 바꾸면 손쉽게 적용할 수 있다는 점이죠. 예로들어 logback을 로깅 시스템으로 사용한 자바 어플리케이션이 log4j로 로깅 시스템을 바꿀 일이 있으면 의존성 설정과 설정 파일만 조정해 주면 손쉽게 소스 수정없이 migration이 가능하단 점입니다. log4j2는 자바 진영에서 제공하는 로깅 시스템이며 ..
| Java Optional( 자바 옵셔널 ) Java Optional 클래스는 Java 8에서 추가되었으며 자바의 고질적인 문제인 NullpointerException 문제를 해결할 수 있는 방법을 제공합니다. import java.util.Optional; | of, ofNullable로 객체 감싸기 자바에서 제공하는 객체를 Optional 객체로 감싸기 위해서는 Optional 에서 제공하는 of 와 ofNullable 매서드를 사용합니다. 둘의 차이점은 of는 인자로서 null값을 받지 않는다는 것이고 ofNullable은 null값을 허용한다는 것입니다. @Test public void givenNonNull_whenCreatesNonNullable() { String name = "saelob..
| 개요(Introduction) Java에서 객체가 어떻게 형성되고 관리되는 지 이해하려면 .java 파일로 작성되었던 소스코드가 어떻게 JVM위로 로딩되는 지 아는 것이 대단히 중요합니다. 왜냐하면 클래스 로딩 때 발생하는 이슈를 해결할 수 있고 코드 상에서 동적으로 클래스를 로딩하는 구문을 이해할 수 있으며 드물지만 자신만의 클래스 로더(User-defined loader)를 만드는 것이 가능하기 때문입니다. | 자바 파일(Java file), 클래스 파일(Class file) 자바 파일은 확장자가 .java 인 파일로서 자바 언어로 소스 코드를 작성할 때 그 내용을 적는 파일을 뜻합니다. 그리고 이 자바 파일을 자바 컴파일러로 컴파일한 파일이 바로 .class 확장자를 가진 클래스 파일입니다. 우..
Executors는 JDK에서 제공하는 framework로서 Java application에서 실행되는 task를 간단하게 비동기로 처리할 수 있게 해주는 thread-pool과 API를 제공합니다. Java application 상에서 thread를 한 두개를 만들어 돌리는 것은 그렇게 어렵지 않습니다. 하지만 그 숫자가 20, 30 혹은 그보다 많아질 경우에는 이 많은 thread를 어떻게 관리할 것인지 문제가 되기 시작합니다. 이 문제를 Executors framework을 통해 간단히 처리할 수 있습니다. Executors framework가 하는 일은 크게 3가지 입니다. 1. Thread 생성 : thread를 생성하거나 thread pool을 만드는 method를 제공합니다. 2. Threa..
1. 이클립스에서 Windows -> Preference -> Java -> Installed JREs 를 클릭합니다. 2. JDK 소스코드를 붙이고자 하는 JRE 버전을 클릭하고 {JRE_INSTALLED_DIRECTORY}\lib\rt.jar 를 클릭해서 Source attachment를 클릭합니다. 3. Source Attachment를 클릭하여 JAVA_HOME의 JDK 디렉터리에 위치해 있는 src.zip 파일을 찾아 클릭합니다. 4. Apply and Close를 클릭하여 적용합니다.
오라클 테이블 생성 테이블은 DBMS에서 가장 기본적인 객체로 로우(행), 컬럼(열)로 구성된 2차원 형태의 객체로 엑셀의 워크시트의 구조와 유사합니다. SQL을 이용해 데이터를 조회, 삭제, 입력, 수정할 수 있으며 그 결과로 생성되거나 삭제된 데이터가 반영되는 곳이 테이블입니다. 테이블은 DBMS에서 가장 필수적인 요소입니다. 따라서 테이블의 논리적, 물리적 구조를 제대로 알아야 나중에 DBMS를 운영할 때 효율적이고 안전하게 운영할 수 있습니다. 테이블 생성 구문 테이블은 CREATE 문으로 생성할 수 있습니다. CREATE 구문에는 정말 많은 옵션이 있지만 그 중 핵심적인 것만 적어보면 아래와 같습니다 CREATE TABLE [SCHEMA.] 테이블명 ( 컬럼1 데이터타입 [DEFAULT 표현식]..
■ MariaDB 다운로드 MairaDB 설치 프로그램은 여기 MariaDB 사이트에서 다운로드 받을 수 있습니다. 다운로드 페이지에 가면 현재 다음과 같은 페이지 창이 나타납니다. 아래 최신 stable 버전을 클릭합니다. (현재 10.4) 만약 최신 버전이 아닌 그 이전 버전의 MariaDB 서버를 내려받으려면 우측 "View All MariaDB"를 클릭하면 됩니다. 이 버튼을 클릭하면 메인 버전의 예전 release 버전을 목록으로 표시해줍니다. ■ windows windows 운영체제의 비트 버전에 맞게 해당 다운로드 패키지를 클릭합니다. 참고로 winx32는 32비트 운영체제, winx64는 64비트 운영체제입니다. 여기서는 msi 패키지를 다운로드 쉽게 설치를 진행하는 방법을 알아보겠습니다...
■ MariaDB란? MariaDB는 MariaDB사가 제작한 오픈소스 RDMBS 소프트웨어입니다. MariaDB가 무엇인지 알기위해서는 MySQL이란 유명 RDBMS를 알아야합니다. 왜냐하면 MySQL에서 떨어져나온 RDBMS가 MariaDB이기 때문이죠. MySQL은 AB사에서 제작했던 소프트웨어 입니다. 썬 마이크로시스템스에서 당시 10억 달러, 우리나라 돈 1조 가량에 인수했다가 양복기업의 대표주자 오라클이 썬 마이크로 시스템스를 2010년에 72억 달러 8조 ㅎㄷㄷ 에 인수해가면서 오라클 것이 되었죠. 오라클은 MySQL을 인수하면서 상업적으로 MySQL을 이용할 시 사용료를 내도록 정책을 바꾸어 버렸습니다ㅠㅠ 그러나 오라클의 정책에 반발한 AB사에서 핵심 창업자중 한 명이었던 몬티 와이드니어스..
| 오라클 블럭(Oracle Block) 회사에서 쓰는 레거시 DDL문을 분석해 보니 PCTFREE, PCTUSED가 나와서 이를 정리한 포스팅입니다. 무려 9i이후부터 세그먼트를 자동적으로 관리하는 ASSM(Automatic Segment Space Management)가 나와 SEGMENT SPACE MANAGEMENT AUTO 절을 넣어 자동으로 관리하고 있습니다. 이렇게 수동으로 관리하는 것을 보기 어렵게 되었다고 알고있는데 어쩌겠습니까? 월급쟁이의 설움 ㅠㅠ 돈 받고 일하려면 어쩔 수 없이 해야죠. (회사를 까는 거는 아닙니다 ㅎㅎ;) 오라클에서의 I/O는 블럭단위로 이루어집니다. 오라클 블럭은 OS의 블럭 한 개 이상을 합쳐 만들며 DB_BLOCK_SIZE로 지정하게 됩니다(기본 오라클 DB ..