본문 바로가기

분류 전체보기

(121)
Spring Boot Validation Custom (ConstraintValidator) 스프링 부트에서 Validation 체크할 때 커스텀한 어노테이션을 만들어서 사용해볼게요. 자주 사용할만한 체크를 미리 만들어두면 좋아요. 예제에서는 성별을 Validation 체크하는 어노테이션을 만들어볼거에요. pom.xml org.springframework.boot spring-boot-starter-validation build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' } Gender @interface GenderValidator 클래스를 추가하고 ContraintValidator의 구현 로직을 작성해주면 됩니다. gender라는 필드에 @Gender 어노테이션만 추..
이클립스(Eclipse) 자동정렬 커스텀 빌더 패턴으로 코딩하다보면 아래와 같은 코드를 정렬하고 싶을 때가 있어요. 줄을 바꿔주는게 코드 보기가 좋은 것 같아요. public User toUser() { return User.builder().email(email).password(password).nickname(nickname).gender(gender).build(); } public User toUser() { return User.builder() .email(email) .password(password) .nickname(nickname) .gender(gender) .build(); } Preferences - Java - Code Style - Formatter 탭으로 이동해주세요. 그다음 New 버튼을 클릭하여 profile ..
Spring Boot Querydsl (Maven, Gradle 5) 항상 JPA를 사용하면서 JpaRepository와 EntityManager만 사용했었는데 항상 먼가 제한적이다는 느낌을 많이 받았어요. 그래서 Native Query를 어떻게 하면 깔끔하게 코딩할 수 있을까 고민하다가 답을 찾지 못했고 결국 Querydsl이나 jooq로 눈을 돌리게 되었어요. 쿼리의 도움을 받아야 하는 레거시 시스템 환경은 확실히 JPA가 많이 불리한 것 같아요. 개발 환경은 JDK 11 + Spring boot 2.1.9 버전이구요. 예제를 통해 간단히 Querydsl을 설정하고 사용해볼게요. for Maven 더보기 pom.xml 아래 코드 추가 후에 Update Project 4.0.0 com.querydsl querydsl-apt com.querydsl querydsl-jpa ..
nothing to fetch (이클립스 git) Pulling 1 repository See 'Details' for more information. Nothing to fetch. 무슨 사유인지 정확히 모르겠지만 가끔 이클립스에서 remote가 사라지는 경우가 있어요. 오류 그대로 fetch가 없다는 뜻이에요. 이런 경우 수동으로 잡아줘야해요. Git Repository - Properties 클릭 remote에 fetch를 추가해주어야 해요. open을 클릭하면 IDE에서 .git\config 파일이 열려요. .git\config [remote "origin"] 란에 fetch 추가 후에 저장 fetch = +refs/heads/*:refs/remotes/origin/* 혹은 fetch = +refs/heads/*:refs/remotes/{리포지토..
Node.js 코딩 패턴 (Routes-Controllers-Services 구조) 서버 개발을 하다보면 코드의 특성별로 소스 파일을 나누게 되어있어요. Node도 마찬가지에요. 처음에 잘 구조를 잡아두면 유지보수할 때 큰 이득을 볼 수 있어요. 구조만 잘 잡아줘도 Node에서도 충분히 복잡한 비즈니스를 말끔하게 볼 수 있습니다. 반대로 매우 간단한 로직을 나눠버리면 비효율적인 작업이 될 수도 있으니 잘 판단해서 디자인해야되요. 우선, 기본으로 사용할 수 있는 Routes-Controllers-Services 구조로 게시판 CRUD 예제를 구현해볼게요. board-route var express = require('express') var router = express.Router() const BoardController = require('../controllers/board-con..
Node.js MySQL Transaction(트랜잭션) 노드에서 mysql 모듈을 사용할 때 트랜잭션 처리하는 방법에 대해서 알아볼게요. 아직 mysql을 연동하지 않았다면 이 글을 먼저 참고해주세요. https://gofnrk.tistory.com/61 Node MySQL 연동 (Express) Node.js에서 MySQL을 연동해볼게요. 연동하고 select, insert, update, delete 쿼리까지 실행시켜 볼거에요. 연동하고 사용하는 것 자체는 매우 간단해요. 우선, mysql2 모듈을 설치해줍니다. npm i mysql2 pool.j.. gofnrk.tistory.com 트랜잭션 예제는 게시글 댓글(board_comment)에 INSERT 하고, 게시글(board)에 댓글 수를 +1 UPDATE 해줄거에요. board와 board_comme..
자바 싱글톤 패턴 (Java Singleton Pattern) 자바 환경에서 싱글톤으로 객체를 사용하는 방법에 대해서 알아볼게요. 싱글톤 패턴은 디자인 패턴 중 하나로 최초 한 번만 객체를 생성을 하여 메모리에 할당하는 기법이에요. 동일한 객체를 지속적으로 사용해야 할 때가 있어요. 이 때마다 인스턴스를 생성해내는 것보다 하나의 인스턴스를 사용하는 것이 리소스 절약면에서 유리합니다. 싱글톤을 구현하는 방법은 굉장히 많이 나와있지만 딱 두 가지만 알면 되요. 기본 방법 많이 쓰는 방법 Simple 방법 우선, 가장 기본 방법부터 작성해볼게요. 최초 한 번 객체를 초기화하기 때문에 Thread-Safe를 보장합니다. 하지만, 객체를 사용하지도 않는 경우에도 이미 생성되어 있어서 사용하지 않는다면 리소스 낭비가 있을 수 있습니다. 사실 사용하지 않을 객체를 싱글톤으로 만..
자바 템플릿 메소드 패턴 (Java Template Method Pattern) 자바 디자인 패턴에서 많이 언급되는 패턴 중 하나에요. 도대체 이게 뭔지 바로 구현해볼게요. 예제로 길을 찾는 기능을 구현하려고 해요. 출발지와 목적지를 입력하면 빠른 길, 가까운 길, 무료 길 등등 원하는 길을 알려줄거에요. 템플릿 클래스 어떤 길을 찾건 출발지와 목적지는 공통적으로 받아야되요. 공통적인 기능은 템플릿 클래스에 구현하고 빠른, 가까운, 무료와 같이 알고리즘이 다른 기능은 추상 메소드로 선언하여 각각 구현하도록 할거에요. public abstract class Direction { // 출발, 도착 세팅 final void setStartAndDest(String start, String end) { System.out.println("출발지 : " + start); System.out...