inseohwang-blog
inseohwang-blog
InSeo-Hwang
19 posts
Umbrella CTO
Don't wanna be here? Send us removal request.
inseohwang-blog · 8 years ago
Text
테스트 데이터베이스 환경을 Docker 기반으로 통합하기
테스트 데이터베이스 환경을 Docker 기반으로 통합하기
이 글은 Docker를 ‘들어는 봤지만’, ‘어디에 어떻게 활용하면 좋을지’ 고민하시는 Docker 입문자를 위한 글입니다 :)
최근 국산 데이터베이스 툴인 SQLGate를 10여 년간 개발, 판매하고 있는 (양용성 대표)라 쓰고 형이라 부르는 용성이 형과 다양한 OS에서 동작하는 Java 기반의 SQLGate 버전 개발을 진행하고 있습니다. 지난 편에 소개했던 하이브리드 웹 애플리케이션 기술들과, Scala, RPC 등 다양한 기술들을 조합해서 10여 년 이상 개발, 유지보수 되어왔던 Delphi 버전 SQLGate를 HTML5/Java/Scala를 기반으로 하는 완전히 새로운 애플리케이션으로 설계하고 있습니다.
(현재 진행 중인 디자인 프로토타입을 살짝 보여드리자면…)
저는 가장 먼저 테스트와…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
test
test[pdfjs-viewer url=”http%3A%2F%2Fblog.chequer.io%2Fwp-content%2Fuploads%2F2017%2F01%2FJEUS_6_getting_started.pdf” viewer_width=100% viewer_height=1360px fullscreen=true download=true print=true]
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
Java, JavaFX, Spring, Chromium, HTML5 기반 키오스크 플랫폼 개발기
Java, JavaFX, Spring, Chromium, HTML5 기반 키오스크 플랫폼 개발기
[pdfjs-viewer url=”http%3A%2F%2Fblog.chequer.io%2Fwp-content%2Fuploads%2F2017%2F01%2FKISOK-%E1%84%80%E1%85%A2%E1%84%87%E1%85%A1%E1%86%AF%E1%84%80%E1%85%B5.pdf” viewer_width=100% viewer_height=1360px fullscreen=true download=true print=true]
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
2016년 회고
2016 Year Review
  1. Spring Boot in Action 번역
생에 첫 번역도전. 와이프와 처남의 도움이 없었으면 6개월이라는 시간 동안 혼자서 하기 정말 힘들었을 것 같다. 번역하는 동안 Spring Boot 버전이 세 번이나 바뀌면서, 예상했던 넉 달보다 두 달이라는 시간이 더 걸렸지만 정말 유의미한 경험이었던 것 같다. 영어도 영어지만, 한국 사람이 잘 이해할 수 있는 한글로 바꾼다는 게 얼마나 힘들고 어려운 일인지를 새삼 깨달았고, 일도, 번역도 결국 Context 파악이 정말 중요하다는걸 다시 한번 되새겼다. http://www.yes24.com/24/Goods/30119126?Acode=101 이글을 통해 다시 한번 와이프와 처남, 그리고 출판사 관계자분들께 감사하다는…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
혼자서 법인만들기 – 2편 사업자등록
혼자서 법인만들기 – 2편 사업자등록
1편 혼자서 법인등기에 이어, 법인인감카드 발급과 사업자등록 방법을 정리해봅니다.
1. 등기상태 확인하기
서울중앙지방법원 등기국에 서류를 내고 이틀 정도 있다가 인터넷 등기소 에 가서 ‘체커’라고 검색을 해보니, 등기가 완료되었더라고요.
2. 법인인감카드발급하기
법인은 인감증명서를 발급하기 위해서 카드가 필요하더군요. 법인인감카드발급신청서 를 작성해서 가���운 등기국에 방문합니다. ( 서초동 중앙지법 등기국말고 집 주위에 가까운 등기국에 가면 됩니다. )
저는 서울남부지방법원 등기국으로 가서 인감카드 발급 후 무인기에서 1장당 1,000원씩에 인감5부, 등본5부를 발급했습니다.
참고로 별생각 없이 목동에 서울남부지방법원으로 갔는데, 작년 6월부터 등기국이 몇몇 지역이 통합돼서 구로세무서 옆으로…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
혼자서 법인만들기 - 1편 법인등기
혼자서 법인만들기 – 1편 법인등기
법무사 없이 혼자서 법인 만드는 방법을 제대로 정리해둔 블로그나 문서가 없어서 혼자 법인을 만든 경험을 토대로 정리해봅니다. 남들은 다들 법무사에 맡긴다길래, 없이 하면 얼마나 힘든지 겪어보고싶…(어서는 아니고 법무사 수수료가 아까워서…) 아무튼 혼자 진행을 해보니 법인이 어떤 과정을 통해서 만들어지는지 잘 이해할 수 있었습니다.
  1. 상호결정
인터넷 등기소의 법인 상호 검색 서비스를 통해 (http://www.iros.go.kr/ifrontservlet?cmd=INSEWelcomeNseFrmC) 설립하고자 하는 법인 이름을 입력해봅니다.
저는 서울중앙지방법원에 등기 할 예정이라 관할등기소를 서울중앙지방법원으로 선택하고 이름을 입력해보니, 아직 ‘체커’라는 이름은 등록되어 있지 않더라고요. 중복되지…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
Jackson JSON View를 활용해 원하는 필드만 JSON으로 직렬화 하기
Jackson JSON View를 활용해 원하는 필드만 JSON으로 직렬화 하기
10분만에 JSON API 개발하기
JPA와 QueryDSL로 SQL한줄도 없이 JSON API 만들기
지난 편에 이어 이번 편에서는 Jackson JSON View 기능을 활용해서 API 별로 원하는 필드만 JSON으로 직렬화하는 방법을 살펴보겠습니다.
현재 고객 목록을 조회하는 /api/v1/customers API는 JSON 응답이 다음과 같습니다.
{ "page": { "totalPages": 0, "totalElements": 0, "currentPage": 0, "pageSize": 0 }, "list": [ { "id": 1, "customerName": "황인서", "customerPhone": "010-1234-5555", "customerAddr": "서울시 강서구",…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
JPA와 QueryDSL로 SQL 없이 JSON API 만들기
JPA와 QueryDSL로 SQL 없이 JSON API 만들기
부제: 내가 이러려고 SQL 작성했나.. 자괴감 들고 괴로워..
지난번 포스팅에서는 AXBoot Initialzr와 AXBoot 개발자 도구를 활용해 빠르고 간단하게 JSON API를 만들었습니다. 하지만 실제로 서비스에 사용할 API 라고 하기에는 조금 부족하죠. 예를들면 다음과 같은 조건이 있을것 같습니다.
특정 ID를 가진 고객만 검색
특정 전화번호, 주소, 이름으로 고객을 검색
전화번호, 주소, 이름 전체에서 검색
API에 매개변수를 전달하고, 해당 매개변수에 따라 동적으로 데이터를 조회할 수 있는 기능을 만들어보겠습니다. (하지만 단 한줄의 SQL도 작성하지 않을겁니다!)
1. CustomerService를 다음과 같이 구성합니다.
public List gets(RequestParams…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
10분만에 JSON API 개발하기
10분만에 JSON API 개발하기
AXBoot Framework를 사용해서 JSON API를 10분 만에 만드는 방법을 소개합니다 (사실 10분 조금 더 걸릴수도있…)
준비물
Eclipse 혹은 IntelliJ IDEA
Lombok (https://projectlombok.org/)
Java 8 + (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
NodeJS (https://nodejs.org/en/)
Git (https://git-scm.com/)
요즘..다들 이정도는 설치되어 계시잖아요.. 그죠..?ㅋㅋ (아니시라면 얼른 설치해주세요!)
1. AXBoot Initialzr에 접속해서 프로젝트를 생성합니다
2. Generate…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
AXBoot Framework를 소개합니다.
수많은 오픈소스를 사용하면서, 언젠가는 많은 사람에게 조금이나마 도움이 될 수 있는 오픈소스를 만들어야겠다는 막연한 생각을 하고 있었습니다. 저 또한 오픈소스를 비롯해 수많은 공유정신을 가진 선배 개발자들로부터 다양한 지식과 도움을 받으며 성장했기 때문에, 이 생태계를 더욱 발전시키기 위해서는 무엇이라도 해야겠다는 생각이 항상 있었습니다.
그러던 2013년 어느 날 AXISJ라는 웹 UI 프레임워크 오픈소스를 접했습니다. 웹 개발에 필요한 대부분 컴포넌트를 제공하고 있고 다양한 예제를 통해서 웹 개발을 더욱 가속화 시킬 수 있는 뛰어난 프레임워크였는데, 더 놀라운 사실 중 하나는 개발자가 ‘한국’ 사람이며 문서 또한 ‘한글’로 되어 있다는 점이었습니다. 대단하다는 생각과 함께 ‘이클립스’ 이후로 두 번째…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
@Valid 애너테이션을 컬렉션 타입 @RequestBody에 사용하기
@Valid 애너테이션을 컬렉션 타입 @RequestBody에 사용하기
Spring Controller @RequestBody에 @Valid를 사용할경우, 단일 Object 타입일 때는 Validator가 잘 동작하지만, Collection 타입으로 감싸져 있을 경우에는 Validator가 동작을 하지 못한다.
원인을 찾아보기 위해 디���깅으로 클래스들을 추적해보니
RequestResponseBodyMethodProcessor -> AbstractMessageConverterMethodArgumentResolver -> DataBinder (validate)로 이어지는데, AbstractMessageConverterMethodArgumentResolver의 validateIfApplicable에서 @Valid 애너테이션이 있는지 확인을 한 후, 애너테이션이 있을 경우…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
Spring MethodArgumentNotValidException (@Valid 예외처리)
Spring MethodArgumentNotValidException (@Valid 예외처리)
@Valid 애너테이션으로 데이터를 검증하고, 해당 데이터에 에러가 있을 경우 예외를 한번에 모아서 처리하는 방법
1. 모델에 Validation Annotation 추가
... @Id @Column(name = "COMP_CD", length = 100, nullable = false) @Comment(value = "회사 코드") @NotNull(message = "회사코드를 입력하세요") private String compCd; @Column(name = "COMP_NM", length = 50, nullable = false) @Comment(value = "회사명") @NotNull(message = "회사명을 입력하세요") @Max(value = 50, message = "회사명을 50자리…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
RevelFramework - 4) GORM + MySQL 5.7 JSON Column Marshalling
RevelFramework – 4) GORM + MySQL 5.7 JSON Column Marshalling
MySQL 5.7 부터는 PostrgreSQL처럼 컬럼타입으로 JSON을 사용할 수 있다. 규모가 크지 않은 초기 서비스 단계라면 굳이 RDBMS와 NoSQL을 나누지 않고도 JSON 컬럼을 적절히 사용해서 아주 멋진 데이터 저장소를 만들 수 있다고 생각한다.
해당 컬럼에 인덱스가 필요한가?
해당 컬럼이 집계성 컬럼이거나, 조인이 필요한가?
해당 컬럼이 WHERE 절에 자주 등장하는가?
나는 위 3가지에 해당되지 않으면 왠만해선 JSON 컬럼에 저장한다. 데이터로써의 의미보다 메타정보(참고용 정보)로써 화면에서 쓰이는 정보성 역할이 더 크다고 생각하기 때문에, 경험상 추후 확장성을 고려해 JSON으로 저장하는 것이 더 많은 이점이 있었다. 또한 비즈니스 로직을 처리하는 과저에서도 저런 값들은 크게 사용되지…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
RevelFramework - 3) Zero-downTime Deploy
RevelFramework – 3) Zero-downTime Deploy
아직 Revel + GO로 개발한 API 서버가 Production(실제 운영환경)에 투입되지는 않았다. 하지만 여전히 CHEQUER 서비스를 개발중이다보니, 개발자들이 JSON API를 사용해야하고, 테스터들은 테스트를 진행하면서 API 서버와 계속 통신을 하게된다. 따라서 개발/테스트가 가능한 알파 환경이 필요한데, 간단한 쉘 스크립트로 무중단 개발 환경을 구성해보자.
환경은 다음과 같다.
NGINX가 앞단에서 UpStream을 통해 로드밸런싱 & FailOver를 수행하고, 무중단 환경을 위해서 2대의 Revel 애플리케이션을 구동시켰다.
NGINX는 http/https로 요청을 받고, Revel 애플리케이션이 구동되는 9001/9002 포트로 UpStream으로 Proxy Pass를 하게된다.
NG…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
RevelFramework - 2) Debugging with IntelliJ
RevelFramework – 2) Debugging with IntelliJ
1편에서 애플리케이션 실행을 위해 터미널에서 revel run jsonApp 명령을 사용했다. 하지만 revel run 명령으로는 개발 중에 디버깅을 할 수가 없다.
하지만 애플리케이션이 복잡해질수록 디버깅은 필수적이고, 디버깅 환경 없이 개발한다는 것 자체가 상상이 안되기도 한다.
디버깅 환경을 만들기 위해 IntelliJ에서 실행 버튼 왼쪽에 있는 삼각형을 클릭하고, Go Application을 선택하자. (GO Application이 안보이면 GO 플러그인을 설치하자)
  다음과 같이 File, Output directory, Working directory, Program Argument를 입력하자.
그리고 디버그 버튼을 누르고 디버깅으로 실행 한 후, HelloController의…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
RevelFramework 1) Hello World with IntelliJ
RevelFramework 1) Hello World with IntelliJ
CHEQUER API 서비스를 SpringBoot + Java8 에서 GO + Revel로 변환하면서 경험했던 내용들을 조금씩 공유해보고자 한다.
GO를 접했던 첫날 어설프게 알고��었던 GO기본문법을 다시 완전히 상기시키고, 80개 정도의 예제코드들을 따라해보면서(여기서 중요한건 눈으로 보고, ‘간단하네~’ 라고 생각되는 코드도 하나도 빠짐없이 모두 쳐본다. 3줄짜리 HelloWorld 코드 일지라도. 새로운 언어를 배울 때 가장 중요한 부분 중 하나는, 기존에 자신이 잘 알고있던 언어의 지식과 혼돈하면서, 새로 배우는 언어도 잘 아는것처럼 착각하는 것이다. 그래서 열심히 새로운 언어를 배운것 같은데도, 막상 IDE나 에디터에서 코딩을 해보려고하면 한줄을 치기도 쉽지 않다.) GO의 문법, 느낌 등에…
View On WordPress
0 notes
inseohwang-blog · 8 years ago
Text
GO(Golang) Cross Compile 구성
GO(Golang) Cross Compile 구성
Mac에서 개발한 GO 애플리케이션을 Linux 64bit 머신에 배포하고 싶을 경우 크로스 컴파일(Cross Compile) 환경을 구성해야 한다.
공식문서(https://golang.org/doc/install/source)에 설명된 내용으로 하다보니 잘 안되서 구글링과 블로그한 결과를 토대로 재정리 해봤다.
기존에 pkg로 설치된 /usr/local/go 는 지워버리고, GOROOT 또한 $HOME/go로 변경했다.
환경변수와 설치 위치는 다음과 같다.
GO 1.4 : $HOME/go1.4
GO 1.6 : $HOME/go
export GOROOT=$HOME/go export GOROOT_BOOTSTRAP=$HOME/go1.4 export GOPATH=/Workspace/go export…
View On WordPress
0 notes