본문 바로가기

Backend

(76)
자바 팩토리 메소드 패턴 (Java Factory Method Pattern) 팩토리 메소드 패턴에 대해서 알아볼게요. 굉장히 많이 쓰이는 패턴이고, 익혀두면 나름 유용하게 쓸 수 있어요. 자바 소스 안에서도 많이 볼 수 있구요. 저도 때때로 사용하는 것 같습니다. 예제로는 패스워드를 암호화하는 기능을 구현해볼거에요. 실제 암호화 로직은 뺄거구요. 최대한 완성도 높게 구조를 만들겠습니다. 1. 인터페이스 만들기 Password라는 인터페이스를 만들었고, 클래스에서 세부 구현할 encode라는 메소드를 추가했어요. 혹은 추상클래스를 만들어서 추상 메소드를 추가하셔도 상관없습니다. public interface Password { String encode(String str); } 2. 구현체 작성 라이트하게 암호화하는 SimplePassword 클래스 강하게 암호화하는 SuperPa..
자바 파일 복사 (+ Spring) Java에서 파일을 복사하는 코드에요. Java 기존 java.io File in = new File("C:\\Temp\\abc.txt"); File out = new File("C:\\Temp\\def.txt"); try (InputStream fis = new FileInputStream(in); OutputStream fos = new FileOutputStream(out)) { int bytesRead = 0; while ((bytesRead = fis.read()) != -1) { fos.write(bytesRead); } fos.flush(); } catch (Exception e) { e.printStackTrace(); } java.nio Path in = Paths.get("C:\\Tem..
Spring Boot JUnit 5 MockMvc Test 스프링 부트에서 테스트 코드를 작성해볼거에요. 굉장히 많은 방법들이 있어요. 그 중에 가장 기본적인 방법으로 알려져있는 JUnit Framework를 사용해보겠습니다. 아마 대부분 스프링 부트로 개발을 하고 있다면 개발한 Controller를 테스트하고 싶을거에요. Controller를 테스트하는 방법 역시 여러가지가 있지만 그 중에 기본으로 알려진 MockMvc를 사용하겠습니다. AbstractControllerTest src/test/java 소스 폴더 밑에 패키지를 만들어서 넣어주면 됩니다. 테스트할 때 필요한 공통 설정 파일이구요. 설정하는 방법은 대표적으로 두 가지에요. AutoConfiguration Customizing AutoConfiguration 아주 간단하게 테스트할 때는 아래와 같이..
Spring Boot 내장 WAS 종류와 특징 스프링 부트 내장 WAS의 종류와 특징입니다. 최대한 쉽게 적어봤어요. Tomcat ~7버전까지 대규모 트래픽에서 불안정하다 vs 아니다 등의 의견이 분분했고, 8버전은 폭망했지만, 8.5버전으로 대응하여 안정화시켰고, 9버전이 나와 안정화되었고 이후로도 꾸준히 업데이트 중입니다. 강력한 커뮤니티, 다양한 성공 사례 등... Java 진영에서 실제로 가장 널리 사용되는 WAS에요. Spring Boot에서도 기본 내장 WAS는 Tomcat이구요. 저 역시도 아직까지는 기본 WAS를 사용하고 있습니다. org.springframework.boot spring-boot-starter-web implementation('org.springframework.boot:spring-boot-starter-web')..
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 ..
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..