Solmi's Development Blog
[Spring] @JsonInclude와 @JsonIgnore
지난주 프로젝트 모임 중 지현님께서 양방향 연관관계가 있는 Entity가 Json으로 변환될 때 순환 참조가 일어나는 에러가 발생하여 @JsonIgnore 어노테이션으로 문제를 해결하셨다는 얘기를 전해들었다. 당시 "저희 프로젝트에도 @JsonIgnore 사용한 코드 있어요!" 하고 찾아보니 @JsonInclude였다. response 반환 시 null 필드를 생략하기 위해 @JsonInclude를 사용했었는데, @JsonIgnore와 헷갈렸다. 헷갈리지 않도록 Jackson 어노테이션들을 살펴보고 정리해보고자 한다. Jackson Property Inclusion Annotations Jackson 라이브러리에서 사용되는 속성 포함에 관련된 어노테이션들로, JSON 직렬화 및 역직렬화 과정에서 특정 필..
![[AWS S3] 여러 객체 삭제](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4TtSt%2Fbtsm7xuTgsd%2FWr7R5K18yjTXZ092pTYTn1%2Fimg.png)
[AWS S3] 여러 객체 삭제
게시글 삭제 시 게시글에 첨부된 이미지/비디오/음성녹음 등 S3에 저장된 파일객체들을 모두 삭제해야 한다. 프로젝트의 S3 폴더 구조는 위와 같이 되어 있는데, boardKey 하위의 객체들을 한 번에 삭제하고 싶었다. 코드 public void delete(String base) throws IOException { var listObjectsV2Result = amazonS3Client.listObjectsV2(bucket, base); for (var objectSummary : listObjectsV2Result.getObjectSummaries()) { System.out.println("key = " + objectSummary.getKey()); amazonS3Client.deleteObje..
[20230628] 오늘의 삽질
오늘의 삽질📢 기존 코드는 아래와 같이 되어 있으며, 내 역할은 resize 메서드에서 리사이징 된 동영상의 바이트를 갖는 새 VideoCustomFile 객체를 반환하는 것이었다. @Getter public class VideoCustomFile implements CustomFile { private final byte[] bytes; private final String base; private final String fileName; public VideoCustomFile(MultipartFile multipartFile) { this.fileName = addRandomValueFilePrefix(multipartFile); this.base = "video"; try { this.bytes ..
[JAVA] var 사용 시 주의할 점과 장단점 - 지역 변수 추론 타입
var란? Java10에서 도입된 var는 초기화 값이 있는 지역 변수 선언 시 타입을 생략할 수 있으며, 컴파일러가 타입을 추론한다. var는 키워드가 아닌 예약된 타입 이름(reserved type name)으로, 식별자로 사용할 수 있다. 즉, 아래와 같이 작성해도 문제가 발생하지 않는다. var var = "Hello, World!"; The identifier var is not a keyword; instead it is a reserved type name. This means that code that uses var as a variable, method, or package name will not be affected; code that uses var as a class or int..
[REST API] UrlConnection vs. RestTemplate vs. WebClient
써드파티 API를 연동하며 HTTP 통신을 위해 UrlConnection과 RestTemplate, WebClient 세 개의 라이브러리를 두고 고민을 했다. 다른 프로젝트에서는 HttpUrlConnection을 사용했는데, 다른 두 가지 방법과는 어떤 차이가 있는지 특징들을 비교해보고자 한다. UrlConnection java.net 패키지에 속하는 Java의 기본 HTTP 클라이언트로, URL의 내용을 읽어오거나 URL 주소에 대해 HTTP 통신 및 GET, POST로 데이터를 전달할 때 사용한다. 저수준 I/O, 즉, InputStream, OutputStream으로 로 HTTP 요청 및 응답을 처리한다. 응답코드가 4xx 이거나 5xx일 경우 IOException이 터진다. 타임아웃을 설정할 수 ..
[Design Pattern] 디자인 패턴과 종류
디자인 패턴이란 디자인 패턴은 소프트웨어 설계 과정에서 빈번하게 발생하는 문제를 정리해서 상황에 따라 간편하게 적용할 수 있게 정리한 해법이다. 디자인 패턴을 잘 활용하면 시간과 노력, 시행착오를 줄일 수 있다. 디자인 패턴 종류 디자인 패턴은 용도에 따라 생성, 행동, 구조의 3가지 범주로 나뉘어진다. 1. 생성 패턴(Creational Pattern) 객체 인스턴스를 생성하는 패턴으로, 클라이언트와 그 클라이언트가 생성해야 하는 객체 인스턴스 사이의 연결을 끊어주는 패턴 싱글턴 패턴(Singleton Pattern) - 특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해주는 패턴. 싱글턴 패턴을 사용하면 전역 변수를 사용할 때와 마찬가지로 객체 인스턴스를 어디서든지 액세스 할 수 있게 만들 수 있다..