반응형

에디 135

[Optional] Java 유용한 Null 처리

Java 코드를 짜면서 가장 많이 발생하는 에러는 무엇일까?? 바로 NullPointException 입니다. 이 Exception을 최대한 줄일 수 있는 Optional에 대해서 정리하겠습니다. Java 8부터 Null처리로 Optional이 나왔다. 그러나 개발자들이 기대했던 것과 다르게 만들어져 말이 많았다.... NullPointException를 완벽하게 방어해낼 것이라는 예상과는 다르게 구멍이 있는 기능이다. Optional의 get()같은.. 그래서 주의사항이 26가지가 된다. 이 글에서는 주의사항에 다루기 전에 Optional이 무엇인지, 어떤 메소드가 있는지에 대해서 알아보겠습니다. Optional이란? T 타입의 객체를 Wrapper하는 Wrapper 클래스입니다. 코드를 작성하다보면 ..

Develop/java 2020.12.01

[JPA] JPA를 적용하며.. ( field convert 편 )

오늘도 JPA를 적용한 프로젝트를 진행 중입니다. 지난글 [JPA] JPA를 적용하며.. ( insert, update 분기 편 ) 에서는 insert, update 분기를 if문 없이 처리하는 유틸리티 함수를 적용했습니다. 이번글에서는 Entity의 field를 convert하는 방법에 대해서 정리하겠습니다. 사건 전말 Database Table 컬럼 중 동적으로 변하는 데이터가 있었습니다. 우리는 해당 컬럼을 varchar 타입으로 주고 Json 방식으로 저장하기로 하였습니다. 아래에 관련 table과 필드 ddl입니다. create table staff ( id bigint auto_increment primary key, age int null, name varchar(255) null, meta..

Develop/spring-data 2020.11.30

서비스에 대한 개발자 선택

실제 운영중인 서비스를 보면 왜 이렇게 만들어놨지? 하며 한숨쉴 때가 있습니다. 그리고 그 서비스를 이어받아 기능을 추가해야할 때 기존 방식에 맞춰야할지? 아니면 수습하면서 진행해야할지? 당연히 수습해야한다! 확장성, 유지보수성, 가독성 등을 고려했을 때 무조건 수정해야한다! 하지만 시간이 없는데? 정해진 시간내에 못하면 어떡하지? 새로운 트러블을 만드는 건데 어떡하지? 제가 내린 답은 의외로 간단합니다! 책임질 수 있다면 수습하시면 됩니다. 말은 쉽지만 실행하기엔 어려운 선택입니다. 저의 경험으로 예를 들어보겠습니다. 이번에 신규 서비스를 만들면서 배치를 만들어야했습니다. 배치를 만들 당시 "이건 Spring Batch로 만들어야해!!" 했으나 Spring Batch를 할 줄 몰라서 @Scheduler..

MindControl 2020.11.29

[Monitoring] Actuator, Prometheus를 이용한 monitoring해보자! - 1편 ( actuator 적용한 application을 띄우기 )

모니터링 서비스가 없으면 정말 불편합니다. 간단한 예로 ~ 하루는 출근했는데 "** 서비스가 실행이 안되는데?" 확인해보니 메모리 초과로 셧다운되있었습니다. 개발 서버에서 테스트 중에 public망에 있던 서비스와 통신 중에 계속 에러가 발생 확인해보니 셧다운되있었습니다. ** 서비스 죽었어? 잠시만요... 터미널 열고 타자 다다다다다 ps -ef... docker ps .. 매번 이럴순 없습니다. 소스는 github에 올려놓았습니다. 1편 - actuator 적용한 application을 띄우기 2편 - monitoring application, prometheus docker로 띄우기 3편 - Grafana docker로 띄우기 4편 - AlertManager 적용 actuator는 Spring In..

Develop/devops 2020.11.28

[JPA] 프로젝트에 JPA를 적용하며.... ( save편 )

이번 프로젝트를 진행하면서 JPA와 Querydsl을 도입하였습니다. SI 회사에서 근무했을 당시에는 mybatis를 사용했었습니다. SI 프로젝트는 90%이상이 mybatis일 것입니다. 그리고 스타트업으로 이직한 후 첫 프로젝트에서도 역시 mybatis를 사용했습니다. 미리 공부해뒀다면 jpa를 썼을텐데... 아쉬운 마음에 학습하고 이번 프로젝트를 진행할 떄 도입하기로 결정이 났습니다. ( 드디어..! ) Repository를 이용하여 findById(), save(), 그외 등등.. 을 사용하였습니다. 혹시나 프로젝트 기술스택에 대해서 궁금해하시는 분들을 위해서 적어봅니다. - - Querydsl-jpa - p6spy ( log설정 ) - pinpoint ( 모니터링 ) - flyway ( 기술검토..

Develop/spring-data 2020.11.26

[javascript] '==', '===' 차이 ( 나의 삽질.. )

프로젝트를 진행하는 값이 없는 경우 ( falsy ) 를 체크하기 위한 함수를 생성하였습니다. 서버에서 받은 파라미터가 falsy인지 체크하는 함수를 만들었습니다. function isNull(value) { return value == null || value == undefined || value == ''; } 이제 서버에서 받은 파라미터를 위에서 생성한 메서드에 넣고 null 체크를 하고 jquery show(), hide() 처리를 하려고 했습니다. const response = data.data; const $detailElement = $("[name=detailName]"); // value = 0 값이 내려왔습니다. if (isNull(response.value) ) { $detailEl..

Daily Develop 2020.11.25

flyway. DB 형상관리 및 다양한 기능을 제공! 재택근무 시 유용해요! 2탄

이전 글 ( flyway. DB 형상관리 및 다양한 기능을 제공! 재택근무 시 유용해요! 1탄 )에서 flyway에 대해서 간단하게 알아보았습니다. 이번글에서는 실제 환경에서 어떻게 사용하는 지 소스기반으로 정리하겠습니다. 모든 소스는 github에 올려두었습니다. 요즘 코로나로 인해 재택근무가 많아지는 상황입니다. 저도 재택근무를 한번 해봤는데 집에서 로컬 db 환경으로 작업해야하는 상황이 있었습니다. 물론 슬랙으로 동료분들과 db 변경사항을 공유했지만 누락되는 내용도 있었고 각자 로컬 db 스키마 정보가 달라서 작업하는데 어려움이 있었습니다. 이럴경우 아주 유용한 것이 flyway입니다. ( 이전 글과 동일한 내용입니다. ) 소스와 함께 정리하도록 하겠습니다. 이 글에서 다루는 Flyway 사용 방법..

Develop/database 2020.11.24

이런 개발자가 될 것이다. 남들 때문에 스트레스 받지 말자!!

32살 개발자 마음의 변천사에 대해 정리하려합니다. 글을 작성하면서 나는 어떻게 살아왔고 어떻게 변해왔고 어떻게 살아갈지 저도 정리하는 시간을 가져보려고 합니다. 전 직장은 SI 회사였습니다. 좋은 스펙을 가지고 있지 않은 제가 선택할 수 있었던 회사의 폭은 매우 좁았습니다. 더군다나 C++을 하던 제가 오픈소스의 신세계를 맛보고 Java로 옮겼기에 나이도 어느정도 차있는데 신입이므로 취업하기도 힘들었습니다. 회사에 입사했을 때 정말 이클립스는 어떻게 쓰는거지? 서블렛? MVC? 이게 다 뭐지.. 하면서 멘탈이 산산조각나면서 회사를 출퇴근하던게 엊그제 같았습니다.지금도 너무나 부족합니다..직장 동료들은 전공자, 학원출신으로 어느정도 기본 지식을 가지고 시작했기에 너무 비교되고 자꾸 작아지기만 했습니다. ..

MindControl 2020.11.23

flyway. DB 형상관리 및 다양한 기능을 제공! 재택근무 시 유용해요! 1탄

이번글에서는 flyway에 대해서 알아보겠습니다. 모든 소스는 github에 올려두었습니다. 요즘 코로나로 인해 재택근무가 많아지는 상황입니다. 저도 재택근무를 한번 해봤는데 집에서 로컬 db 환경으로 작업해야하는 상황이 있었습니다. 물론 슬랙으로 동료분들과 db 변경사항을 공유했지만 누락되는 내용도 있었고 각자 로컬 db 스키마 정보가 달라서 작업하는데 어려움이 있었습니다. 이럴경우 아주 유용한 것이 flyway입니다. flyway는 다양한 기능을 제공해줍니다. 하나씩 살펴보겠습니다. flyway 간단하게 데이터베이스 형상관리 툴이라고 생각하시면 됩니다. 다양한 환경에서 적용이 가능합니다. 전 spring boot, mysql 환경에서 적용해보았습니다. 작동원리 형상관리는 table로 이루어지고 있습니..

Develop/database 2020.11.21

[ObjectMapper] Convert!! snake to camel, camel to snake

Restful API를 사용하다 보면 내가 만든 vo와 값이 다르게 넘어올 때가 있습니다. 그땐 vo.set.. vo.set.. vo.set... ObjectMapper를 사용하면 편리합니다. 모든 소스는 github에 있습니다. 개발자는 코드로 보는게 이해가 빠를 듯하여 코드위주로 작성하겠습니다. build.gradle plugins { id 'org.springframework.boot' version '2.3.4.RELEASE' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' co..

Develop/java 2020.11.19

실전 자바 소프트웨어 개발 정리 - 3

모든 소스는 github에 올려두었습니다. 문서 관리 시스템 목표 문서 관리 기능 설계의 핵심은 상속 관계, 즉 어떻게 클래스를 상속하거나 인터페이스를 구현하는가에 달렸다. 문서관리 기능을 제대로 설계하려면 리스코프 치환 원칙을 알아야한다. 언제 상속을 사용해야 하는지와 관련해서는 '상속보다 조합' 원칙도 알아야한다. 유지보수가 쉽고 좋은 테스트를 만드는 방법을 활용해 기존에 배운 자동화된 코드 구현 지식을 확장한다. 설계 다양한 방법으로 설계가 가능하므로 다양한 설계와 모델링 중 한 가지를 선택한다. 테스트 주도 개발(TDD)은 프로그램을 시작하는 아주 좋은 방법 중 하나이며 이미 예제를 풀어보면서 사용한 방법이다. 임포터 다양한 종류의 문서를 임포트하는 것이 문서 관리 시스템의 핵심 기능이다. 파일의..

Study/java 2020.11.18

[Intellij] 유용한 plugin 소개

회사 복지(?) 덕분에 intellij 를 사용하고 있습니다.유용한 plugin이 개발 생산성을 크게 높여줍니다! 실제 제가 사용하는 plugin을 소개하겠습니다. 사용하는 플러그인 목록입니다.CodeGlanceCodotaGrep ConsoleRainbow BracketsSonarLint한개씩 살펴보겠습니다. CodeGlance코드 미니맵 기능이라고 생각하시면 됩니다. CodotaAI가 코드를 추천해줍니다. 자동완성 기능에 AI 기반으로 코드를 추천해줍니다. Codota 아이콘 모양의 3가지가 추천해주는 코드입니다.오른쪽에 퍼센트는 실제 개발자들이 사용하는 퍼센트를 보여주고 있습니다. String 입력 후 Get relevant examples 클릭하면 우측에서 예제소스를 보여주고 있습니다. 실제로 코딩..

Develop Tool 2020.11.17

Spring Data JPA, Querydsl 로깅처리. p6spy 원하는 로그만 출력하기

바로 여기로 오셨다면 이전 글을 참조해주세요. 왜 p6spy를 선택했는지와 분석하는 이유에 대해서 정리해놓았습니다. jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 1탄! jpa, querydsl을 사용했을 때 불편한 점과 해결 방법(로깅) 및 로깅의 종류에 간략하게 알아보았습니다. jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 2탄! p6spy 적용방법을 알아보았습니다. Spring Data JPA, Querydsl 로깅처리. p6spy pretty하게 설정하기 p6spy 로깅 출력을 pretty 적용 이번 글에서는 p6spy를 사용하는데에 편리한 설정들이 뭐가 있는지 알아보는 과..

Develop/spring-data 2020.11.16

실전 자바 소프트웨어 개발 정리 - 2

모든 소스는 github에 올려두었습니다. 입출금 내역 분석기 확장판 목표 코드베이스에 유연성을 추가하고 유지보수성을 개선하는 데 도움을 주는 개방/패쇄 원칙(open/closed principle (OCP)) 을 배운다. 언제 인터페이스를 사용해야 좋을지를 설명하는 일반적인 가이드라인과 높은 결합도를 피할 수 있는 기법도 배운다. 자바에서 언제 API에 예외를 포함하거나 포함하지 않을지를 결정하는 자바의 예외 처리 방법을 배운다. 메이븐, 그레이들 같은 검증된 빌드 도구를 이용해 자바 프로젝트를 시스템적으로 빌드하는 방법도 배운다. 개방/패쇄 원칙 특정 금액 이상의 모든 입출금 내역을 검색하는 메서드를 구현해보자. 간단한 findTransactions() 메서드를 포함하는 BankTransactionF..

Study/java 2020.11.15

Spring Data JPA, Querydsl 로깅처리. p6spy pretty하게 설정하기

바로 여기로 오셨다면 이전 글을 참조해주세요. 왜 p6spy를 선택했는지와 분석하는 이유에 대해서 정리해놓았습니다. jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 1탄! jpa, querydsl을 사용했을 때 불편한 점과 해결 방법(로깅) 및 로깅의 종류에 간략하게 알아보았습니다. jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 2탄! p6spy 적용방법을 알아보았습니다. 이번 글에서는 p6spy를 사용하는데에 편리한 설정들이 뭐가 있는지 알아보는 과정과 적용하는 것까지 정리하겠습니다. 작성된 글의 소스 코드는 github에 올려두었습니다. JPA, Querydsl 설정 방법은 아래..

Develop/spring-data 2020.11.13
728x90
반응형