개발중인 셀럽잇 서비스에선 셀럽들이 다녀온 다양한 음식점에 대한 정보들을 제공합니다. https://www.celuveat.com 보시는 것과 같이 음식점과 관련한 다양한 사진 파일들도 제공하고 있습니다. 현재, 어플리케이션을 운영중인 서버에 해당 대략 600개의 이미지 파일들을 저장하여 관리하고 있는데요. 더 다양한 음식점과 해당 음식점과 관련한 사진들을 지속적으로 추가할 예정이며, 사용자들의 사진 리뷰 기능이 추가될 계획에 따라 더 많은 이미지 파일들이 추가 될 수 있습니다. 이러한 상황에서 현재 방식(운영서버에서의 이미지 파일 저장 및 관리)은 이미지 파일이 지속적으로 적재되면서 운영서버의 디스크가 부족해질 수 있으며, 수많은 이미지를 운영서버 내에서 관리해야 한다는 문제점이 있습니다. 또, 이미지..
Spring을 활용하여 웹 어플리케이션을 개발하면, 다양한 Http 요청에 대해 처리하는 기능들을 개발 할 것이다. 그리고, 필연적으로 공통적으로 처리해야 할 기능과 중복된 코드들이 많이 생긴다. 이러한 웹 요청에 대한 공통 관심사를 처리하기 위해 Filter와 Interceptor를 활용할 수 있다. SpringBoot를 활용한 Spring Web 요청 flow 출처 : https://gowoonsori.com/spring/architecture/ Filter Filter.class A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on..
HTTP Headers Header HTTP header는 HTTP의 요청과 응답에 필요한 부가적인 정보들을 담고있는 필드이다. Message나 Body의 데이터에 대한 의미를 변경하거나 조정하는데 사용될 수 있다. 헤더는 대소문자를 구별하지 않으며, 줄의 처음에서 시작하여 바로 다음에 :과 헤더에 해당하는 값이 따라온다. Header의 종류 Header는 사용되는 목적과 진영에 따라 다양한 방법으로 분류할 수 있다. RFC에서 정의한 명확한 구분 기준은 없지만, 편의상 분류할 수 있는데 다음과 같이 4개의 헤더로 자주 분류한다. General header : 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더 Request header : 요청하는 리소스 또는 클라이..
Spring application 테스트 Spring을 사용하여 application을 구성 했다면, 테스트 실행 환경에서도 동일한 구성이 갖추어져 있어야 한다. 직접 구성하지 않은 서블릿이나 WAS, DataSource, jdbcTemplate 및 실행 환경등 Java로만 구성된 code Test public class Dao { private final CustomConnceton customConnceton = new CustomConnection(); public void do() { customConnceton.query(...) } } @Test void saveTest() { private Dao dao = new Dao(); dao.do() //then } Spring framework를 ..
Java의 생성자 Java의 생성자(constructor)는 클래스(인스턴스)를 초기화 하는 가장 기본적인 방법이다. 인스턴스의 상태를 초기화 하거나 종속성을 주입하는데 사용된다. 생성자 라는 이름에 맞게 객체를 생성하는 기능을 한다. Book.class class Book { String title; String author; String genre; public Book(String title, String author, String genre) { this.title = title; this.author = author; this.genre = genre; } } Book 이라는 인스턴스를 생성하기 위해선 다음과 같은 코드를 통해 수행할 수 있다. Book 1984 = new Book("1984",..
보너스 돈이 생겼다 카지노에서 블랙잭을 마치고 환전을 하러갔다. 기분 좋게 [4.98$]칩 8개와 [0.99$]칩 5개를 교환하려했다. private static final double BIG_CHIP_REFUND_DOLLAR = 4.98d; private static final double SMALL_CHIP_REFUND_DOLLAR = 0.99d; void exchange() { double accountDollar = 0d; int bigChipCount = 8; for (int i = 0; i < bigChipCount; i++) { accountDollar += BIG_CHIP_REFUND_DOLLAR; } int smallChipCount = 5; for (int i = 0; i < small..
AssertJ AssertJ는 더 다양한 assertion을 제공하는 자바 라이브러리이다. 공식 문서 : https://assertj.github.io/doc/ Junit5에서 제공하는 Assertion method가 존재하는 데, AssertJ는 어떤 특징 때문에 추가적인 라이브러리를 사용하는 것일까? 특징 메서드 체이닝을 지원하여 더 직관적이고 읽기 쉬운 테스트코드를 작성 정확한 에러메세지 JUnit이외의 추가적인 메서드 지원 AssertJ의 여러 메소드들을 연쇄적으로 호출해 코드를 작성할 수 있다. (메서드 체이닝) import static org.assertj.core.api.Assertions.assertThat; import org.junit.jupiter.api.Test; public cla..