목록Development Experience (82)
KorSA
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bXyg04/btrMyhHfmwz/8PtSt2KfkJoKlKorBAHic0/img.png)
여러 HTML 태그를 겹치게 (overlay) 하고 싶을 땐 CSS의 position 속성의 aboslute, relative 사용을 고려해보자 회사에서 vue3용 open-layers 라이브러리를 사용하여 지도를 표출하고 그 위에 버튼을 구현해야 하는 작업이 있었다. 버튼이당 그냥 태그 두 개를 나열하면 화면이 겹치지 않고 map이 표출된 영역 아래에 button이 표출된다. display: flex; 를 이용하는 방법이 있지 않을까 해서 검색해보았지만 찾지 못했다. 아마 flex는 레이아웃을 컨트롤하는 게 목적이어서 그러지 않을까 싶었다. 결국 찾은 방법은 태그의 position속성을 absolute로 지정하면 된다. 버튼이당 이렇게 하면 지도에 겹쳐져서 버튼이 표시된다. 그런데 또 하나의 난관에 부..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/n3l3G/btrKejOO9jU/jfTlkwOiMcKQCGQvBxDKmk/img.png)
이번에 시작한 Vue 프로젝트에서는 각 항목별로 제목을 달아준다. 그 제목을 좀 예쁘게 표시해보고자 아래와 같은 디자인을 구상해보았다. 구글느님의 도움을 받아 canvas 태그를 사용하여 저런 사각형을 그릴 수 있었다. 헌데.. 보는 기기에 따라 달라지는 canvas의 width, height가 마음에 걸렸다. 그래서 pixel로 width, height를 고정하는 대신 vw, vh를 사용해보았다. (참고로, vw랑 vh가 적용되려면 css에 {dsiplay: block; }을 넣어주어야 한다. 헌데 막상 모니터 크기에 따라 이상한 모양으로 변하곤 했다. 이렇게 잘 나오게 맞춰 놓아도 모니터 크기가 달라지면 위처럼 이상하게 변해버렸다. vw,vh 대신 %를 사용해보아도 마찬가지였다. 어느 모니터에서든 자..
JAVA에서 Null을 처리하기 위한 방법으로 Optional을 사용한다. Null 대신 Optional 이라는 객체를 반환함으로써 NullPointerException 이 발생하는 걸 방지하기 위해서이다. 회사에서 개발을 하면서 Optional.of() 함수를 썼는데 NullPointerException이 발생했다. 코드를 보니 아래와 같은 느낌으로 작성되어 있어서 of()의 전달인자로 null이 전달된 것이었다. Object myName = null; Optional.of((String)myName); Optional.of()를 호출하려면 null이 아닌 값만 전달되어야 한다. 만일 null이 "될수도" 있는 값이 전달된다면 Optional.ofNullable()을 호출해야 한다. Object myN..
# JAVA 객체 -> gRPC Proto 객체 JAVA 객체를 gRPC proto 객체로 컨버팅을 할 때 ObjectMapper 클래스를 사용할 수 있다. 이 ObjectMapper로 JAVA 객체를 Serialize하여 JSON String을 만들고 다시 이 JSON String을 gRPC proto 객체로 해석하는 것이다. MyJavaObj javaObj = new MyJavaObj(); ObjectMapper mapper = new ObjectMapper(); # JAVA 객체 -> JSON String json = mapper.writer().writeValueAsString(javaObj); # gRPC proto 객체의 builder를 얻어옴 Builder builder = MyGrpcPro..
Spring-Web-Application 개발을 진행하면서 회사 공통으로 쓰고 있는 JAR 파일을 첨부하게 되었다. 이 JAR 파일에는 우리 개발팀이 공통으로 쓰는 모듈들이 들어가있는데 주로 DB, gRPC, Util 등의 기능들이 포함되어 있다. 공통된 기능을 내가 따로 개발할 필요없이 이미 만들어진 것을 가져다 씀으로써 편리함과 DRY(Don't Repeat Yourself) 를 얻었지만 예상 못한 문제가 있었다. 바로 MyBatis를 포함한 프로젝트는 어딘가에 Mapper 클래스가 존재해야 한다는 것이었다. 헐? 지금 개발하고 있는 Spring-Web-Application은 DB 기능을 사용하지 않는데? 이 Application은 사용자에게 REST API 인터페이스를 제공하고 요청이 들어오면 다른..
회사에서 Kubernetes 대신 Docker Swarm으로 Orchestration을 하기로 결정되었다. 상대적으로 시간이 여유로운 내가 Docker Swarm을 담당하게 되었다. 여러개의 프로젝트를 Docker Swarm 환경에 띄우면서 겪은 삽질을 기록겸 공유겸 남겨둔다.. #00. 순서 1. docker-compose.yaml 파일로 Docker Image를 BUILD 2. Docker Swarm Manager, Worker 등록 3. Docker Swarm Manager Node에서 Private Repository 구동 4. docker stack deploy 명령을 통해 Docker Swarm 상에 Docker Image들을 구동 #01. docker-compose.yaml 파일로 Docke..
이 글은 IBM의 Docker Swarm vs. Kubernetes: A Comparison을 읽고 정리한 글입니다. Container Orchestration을 하려면 Docker Swarm과 Kubernetes 중 어느 것을 사용하는 게 좋을까? 우선 Container가 뭔지, Container Orchestration이 무엇인지 정리하고 넘어가자. Container는 우리가 배포하고자 하는 서비스 프로그램(app)과 이 프로그램이 의존하고 있는 모든 의존 프로그램들(dependencies)을 패키지 형태로 묶는 방법을 말한다. 이렇게 프로그램에 필요한 모든 것을 하나의 패키지로 만들면 언제 어디서든 그리고 docker를 지원하는 어떤 Runtime 환경에서든 프로그램을 실행시킬 수 있다. Conta..
MyBatis의 Mapper.xml 파일을 작성할 때 태그에서 keyProperty 속성으로 여러개의 key값을 지정하는 경우가 있다. 예를들어 ... 처럼 말이다. 이때 변수명을 잘 입력했음에도 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error selecting key or setting result to parameter object. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named... 오류가 뜨는 경우가 있다. 이 경우에는 ..
MyBatis를 이용한 프로젝트에서 객체 하나를 Maria DB에 insert하고 그 키값을 얻어오고 싶었다. 키값은 AUTO_INCREMENT 속성 대신 DB에서 직접 생성한 UUID 값을 사용하기로 하였는데, 태그에 추가로 태그를 넣어주어야 했다. 그래서 아래와 같이 작성했는데 SELECT UUID() as MY_OBJECT_ID FROM MY_CUSTOM_TABLE INSERT INTO MY_CUSTOM_TABLE ( MY_OBJECT_ID ) VALUES ( #{myObjectId} ); But... 어쩐 일인지 계속 "SelectKey returned no data" 에러만 계속 발생하였다. 테스트해보니 테이블에 데이터가 있을 경우 이 에러는 발생하지 않고 테이블이 비어있는 경우에만 이 에러가 ..
우리 회사는 gRPC로 통신 프로토콜을 정의하여 협업을 진행한다. gRPC 명세가 변경되면 새로 빌드된 SNAPSHOT이 소스 저장소인 NEXUS에 올라간다. 개발자가 각자의 프로젝트에서 개발을 할 때에는 NEXUS에 올라간 최신 SNAPSHOT 버전을 maven으로 import하여 사용한다. 오늘 아침 gRPC 명세가 변경되어 있었기 때문에 나의 프로젝트로 새로운 SNAPSHOT을 땡겨와야했다. 내가 쓰는 IntelliJ(2021.2.3 Community Edition)에서 기참조된 maven repository 내용을 업데이트하려면 아래와 같이 진행하면 된다. 1) pom.xml 우클릭 2) maven탭에 마우스 hover 3) 오른쪽에 메뉴가 하나 새로 뜨는데 여기서 Reload Project 클릭..