전체 글(43)
-
S3에 이미지 호스팅을 하는 당신을 위한 종합선물 세트
이번에 새로운 사이드 프로젝트인 몽글을 개발하게 되면서 이미지를 업로드 및 관리해야 하는 로직이 필요했었습니다. 이전 프로젝트에도 S3에 이미지를 호스팅해서 서비스를 한적이 있었지만 이전에 했던 방식은 몇가지 문제점을 갖고 있었습니다. 첫번째, 이미지 로딩 속도입니다.이미지를 호스팅하고 해당 이미지 URL 이를 클라이언트에서 받아 처리하였을때이미지가 로딩되는 속도가 비교적 느린편에 속했었습니다.조사한 결과 이미지의 크기가 너무 큰것과 이미지의 링크가 http로 되어있었던 점입니다.그 전에도 CloudFront를 활용해서 캐싱 등을 진행했었지만 Flutter 쪽 이슈(https 사용시 간헐적으로 Exception 발생)이 있어 결국은 S3로만 호스팅을 하고 http로만 서빙을 했었습니다. 갑자기 HTTP..
2024.10.10 -
Spring Validation 정복하기
이번에 회사에서 Validation을 도입하면서 추가적으로 배운 Spring Validation에 대해 작성해보겠습니다.일단 기존의 저희 회사에서는 Application 단에서의 값 검증은 이루어 지지 않았었습니다. 일단 업무 자체가 하나의 기능을 개발할때 협업을 하기보단 본인이 해당 기능, 해당 페이지에 대해Front, API 까지 개발을 혼자 담당하는 경우가 많기 때문이었습니다. 이러한 업무 특성상 굳이 데이터 검증할 필요성을 못느끼셨던 것 같습니다.어차피 화면에서도 체크를하고 DB에서도 데이터 타입이 지정되어 있으면 최소한의 데이터 정합성은 흐트러지지 않으니까요하지만 제 개인적인 생각으로는 이러한 업무 방식은 좋지 못하다고 판단 되었습니다. 첫번째, 클라이언트에서는 값이 변조되기가 쉽습니다. 브라우..
2024.05.07 -
Spring 에서 전략패턴 적용해보기
전략 패턴이란? 전략 패턴은 GoF 디자인 패턴 중 객체의 행위를 변경할 수 있게 하는 디자인 패턴입니다. 이 패턴은 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 통해 각각의 알고리즘을 캡슐화하여 사용할 수 있도록 합니다. 클라이언트는 런타임에 알고리즘을 선택할 수 있으므로, 같은 문제를 다른 방식으로 해결할 수 있는 유연성을 제공합니다. 전략 패턴의 구성 요소 전략 패턴은 주로 세가지 주요 구성 요소로 이루어집니다: Context (문맥): 전략을 사용하는 역할을 합니다. Context는 필요에 따라 다른 Strategy를 사용할 수 있습니다. Strategy (전략): 여러 알고리즘을 인터페이스로 정의합니다. 모든 전략은 이 인터페이스를 구현합니다. ConcreteStrategy (구체적인 ..
2024.04.14 -
Spring의 Event
스프링 프레임워크는 개발자들이 애플리케이션 내에서 발생하는 다양한 이벤트를 효율적으로 관리하고 처리할 수 있도록, 강력한 이벤트 리스너(Event Listener) 메커니즘을 제공합니다. 이 메커니즘은 pub/sub 패턴의 구현을 단순화하며, 애플리케이션의 결합도를 낮추고 유지보수성을 높이는 데 도움을 줍니다. 이벤트 리스너를 활용하면, 특정 이벤트가 발생했을 때 실행되어야 할 비즈니스 로직을 캡슐화하고, 애플리케이션의 다른 부분과 독립적으로 관리할 수 있습니다. 이벤트 기반 프로그래밍의 이점 낮은 결합도(Low Coupling): 이벤트 프로듀서(발행자)와 컨슈머(소비자) 간의 직접적인 의존성을 제거합니다. 이벤트 프로듀서는 이벤트가 발생했다는 사실만 알리고, 이벤트를 처리하는 로직은 별도의 리스너에서..
2024.03.31 -
AWS 비용 최적화 여정
안녕하세요 피플에서 백엔드를 맡고 있는 고지훈입니다. 대학생분들이 모여서 운영하다보니 항상 금전적인 측면에서 힘든 상황을 겪고 있습니다. 그나마 여러분들의 성원과 도움으로 만들어진 AWS 크레딧과 후원금으로 운영되고 있습니다. 하지만 이또한 지속가능하다고 하기엔 불확실성이 짙기 때문에 서비스 운영에 들어가는 비용 자체를 줄일 필요성을 많이 느끼게 된것같아요 그중에 운영비용 중 AWS 서버비가 가장 많은 금액을 차지했었습니다. 피플을 사용하신 분들 중 공지사항을 한번이라도 보셨다면 저희 서버비용이 상당히 많이 나오는데요 비용 최적화 이전 평균 370~380달러 정도로 지출되고 있었습니다. 원화로 480,000원 정도로 매우 부담스러운 금액이었습니다. 저희 서비스는 AWS에서 운영되며 실제 운영서버는 다음의..
2024.03.18 -
CGLIB
CGLIB(Class Generation Library)은 자바 언어의 라이브러리 중 하나로, 코드 생성을 통해 동적으로 클래스를 생성하는 라이브러리입니다. 주로 스프링 프레임워크와 같은 프레임워크나 라이브러리에서 AOP(Aspect-Oriented Programming)을 구현하는데 사용됩니다. CGLIB은 JDK의 동적 프록시를 보완하는 방법으로 동작합니다. JDK 동적 프록시는 인터페이스를 기반으로 프록시를 생성하며, 인터페이스를 구현하는 클래스만 프록시로 감쌀 수 있습니다. JDK 동적 프록시는 Reflection API를 활용하게 되는데 이는 구체적인 클래스 타입을 알지 못해도 런타임에 클래스 정보에 접근할 수 있게 해주는 자바의 API 입니다. 허나 리플렉션은 동적일 때, 해결되는 타입을 포..
2023.07.02