no image
[Spring] ConversionService 활용해보기
배경 회사에서 100개가 넘는 컬럼들을 다루어야 하는 경우가 있었다. 100개가 넘는 컬럼들 중 섹션별로 일부의 데이터를 추가하거나 수정할 수 있어야 했고, 기존의 데이터와 서로 다른지 판단할 수 있어야 하며 이를 로그로도 남겨야 하는 요구사항이 있었다. 예를 들면 Entity 가 아래와 같은데, @ExampleSection 이라는 Annotation 으로 섹션을 분리한 뒤 사용자가 원하는 Section 별로 데이터를 저장하거나 수정할 수 있어야 하는 것이다. @Entity(name = "exampleEntity") @Table(name = "EXAMPLE_ENTITY", schema = "GREATSCHEMA") @DynamicInsert @DynamicUpdate @Builder @Getter @No..
2022.11.21
[Java] 간단하게 알아보는 웹 기술 역사
웹 기술 1997 - 서블릿 HTML 생성이 어려웠음 1999 - JSP HTML 생성은 편리했지만, 비즈니스 로직까지 전부 함께 들어있어 너무 많은 역할을 담당했음 2000년 초 ~ 2010년 초 - 서블릿, JSP 를 조합한 MVC 패턴 Model, View, Controller 로 역할을 나누어서 개발 MVC 패턴 자동화, 복잡한 웹 기술을 편리하게 사용할 수 있는 다양한 기술을 지원했음 스트럿츠, 웹워크, Spring MVC (과거) 현재 Annotation 기반 Spring MVC @Controller 사실상 이 기술이 나오면서 다양하게 MVC 프레임워크가 나오던 것이 막을 내림 Spring Boot Spring Boot 는 빌드 결과(Jar) 에 WAS 서버를 포함 → 빌드 배포가 단순화됨. ..
2022.10.03
[ERROR] Could not write JSON: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)
오류 내용 Could not write JSON: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?) 해결 방안 말 그대로 JSON 으로 변환할 때 Map 객체는 허용하지 않는 의미이다. 아래처럼 Map 인터페이스를 그대로 사용하면서 JSON 으로 직렬화할 때 위와 같은 오류가 생길 수 있다. @Builder @Getter @NoArgsConstructor @AllArgsConstructor public class PostKafkaProxyResponse { private String topic; private int partition; private long offset; private long timestamp; p..
2022.08.02
no image
[Spring] @ModelAttribute 파라미터에서 사용 방법 및 원리
@ModelAttribute 는 클라이언트로부터 일반 HTTP 요청 파라미터나 multipart/form-data 형태의 파라미터를 받아 객체로 사용하고 싶을 때 이용된다. 사용 방법 @ModelAttribute 는 parameter, method 레벨로 두 가지의 방식을 지원하고 있다. @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ModelAttribute { ... } @ModelAttribute 를 이용할 DTO 클래스에서는 아래처럼 생성자를 구현해도 사용할 수 있다. 단, 요청 파라미터와 매개변수 이름이 서로 같아야 한다. pack..
2022.07.30
no image
[Linux] Mac 에서 OpenJDK 17 설치하기 (Homebrew)
아래 명령어를 입력해서 다운로드한다. $ brew install openjdk@17 나타나는 화면에서 다운로드할 때 어떤 버전을 다운로드받고 있는지 확인할 수 있다. 또한 다운로드 후 사용자가 할 수 있는 작업들에 대해서 친절하게 명령어와 함께 설명을 해준다. 시스템에서 openjdk 17 을 찾을 수 있도록 아래 명령어를 입력하여 진행한다. $ sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk zsh 을 이용할 경우 아래처럼 명령어를 입력하여 PATH 에 대해서도 같이 추가해준다. $ echo 'export PATH="/opt/homebrew/opt/ope..
2022.07.27
[Java] 클래스 이름과 파일 이름의 관계
public class 가 있는 경우, 소스 파일의 이름은 반드시 public class의 이름과 일치해야 한다. // Hello2.java public class Hello2 {} class Hello3 {} public class가 하나도 없는 경우, 소스 파일의 이름은 'Hello2.java', 'Hello3.java' 둘 다 가능하다. 이 경우, 하나의 소스 파일에 둘 이상의 public class가 존재하면 안 된다. // Hello2 class Hello2 {} class Hello3 {}
2016.08.22