반응형 분류 전체보기181 필터(filter), 인터셉터(interceptor), AOP(Aspect-Oriented Programming) 살펴보기 Spring에서 필터와 인터셉터 그리고 AOP는 전부 공통 로직을 분리하여 처리하기 위해서 사용하기 위해서 사용되는 기능이다. 하지만 사용방법과 적용되는 위치의 차이가 있기 때문에 알맞게 사용해야 한다. 큰 구조는 Spring mvc Request 라이프 사이클을 통해 확인할 수 있다. ( AOP는 표시되어 있지 않지만...) 필터(Filter): 필터는 서블릿 컨테이너(예: Tomcat, Jetty)에서 요청과 응답을 가로채는 기능이다. 주로 요청과 응답의 헤더를 수정하거나 인코딩을 처리하는 등의 작업에 사용된다. Spring의 javax.servlet.Filter 인터페이스를 구현하여 사용한다. 필터는 web.xml에 등록하여 적용되고, Spring Boot에서는 FilterRegistrationBe.. 2023. 7. 22. [Spring boot] war로 배포하기, SpringBootServletInitalizer 현재는 spring boot에 Tomcat이 내장되어 있는 Embedded Tomcat형태의 jar파일로 빌드되어 단순히 실행하면 되지만 jsp를 사용하는 웹애플리케이션 같은 경우에는 war로 빌드하여 Tomcat이나 Jetty와 같은 외부 서블릿 컨테이너를 통해서 배포를 해야 했는데 이경우에 SpringBootServletInitalizer를 상속받아서 실행되도록 하여야 한다. 즉, SpringBootServletInitalizer를 상속받는 이유는 웹 애플리케이션 서버를 war형태로 배포하기 위해서 사용한다. jar vs war 그렇다면 war와 jar는 어떤 차이가 있는건지도 알아보았다. 먼저 두 파일 전부 애플리케이션을 간단하게 배포하고 실행시킬 수 있도록 관련파일들을 패키징 해주는 것이 목적이다.. 2023. 7. 22. Prototype Pattern, 프로토타입 패턴 프로토 타입 패턴이란? 객체를 생성할 때 기존 객체를 복제하여 새로운 객체를 생성하는 방법을 제공하는 패턴이다. 이를 통해서 객체의 복잡한 생성 과정을 피하고, 기존 객체의 상태를 유지하며 새로운 객체를 생성할 수 있게 된다. 프로그래밍에서 변경이 일어나는 부분을 캡슐화한다는 따른다. 왜 사용하나요? 객체 생성 과정이 복잡하거나 시간이 많이 걸릴 경우, 기존 객체를 복제하여 새로운 객체를 생성하는 것이 효율적이기 때문이다. 객체의 클래스에 종속되지 않고, 복제를 통해 동적으로 객체를 생성할 수 있다. 객체의 상태를 유지한 채 다양한 상태의 객체를 생성할 수 있다. 언제 사용하나요? 객체 생성 비용이 크고 유사한 객체를 자주 생성해야 할 때 객체의 클래스 계통이 복잡하고 변경이 빈번하게 일어날 때 문제점 .. 2023. 7. 11. [JPA] 생성일, 수정일 자동 기입 기능 추가하기 (AuditingEntityListener) 게시글과 같은 기능을 구현하다 보면 생성일, 수정일을 관리해야 하는 경우가 흔하게 발생한다. 이럴 때 서비스로직에 직접 생성, 수정 시에 해당 날짜를 생성일, 수정일 컬럼에 직접 update 하는 방식으로 구현할 수 있다. 하지만 이렇게 되면 사람이 코드를 작성하다 보니 까먹고 추가를 안 하는 경우가 생겨 정상적으로 동작하지 않는 컬럼이 될 수 있다. 이러한 부분을 해결하기 위해서 엔티티에 리스너를 추가하여 엔티티를 조작할 때 추가적인 로직을 설정할 수 있다. 바로 AuditingEntityListener를 이용하는 것이다. EntityListener EntityListener는 엔티티에 이벤트가 발생하는 것을 감지하여 동작하는 로직을 구현할 수 있도록 해준다. JPA는 7가지의 이벤트를 감지할 수 있다.. 2023. 7. 9. [Docker] Dockerfile 작성하는 방법 도커파일 작성 방법에 대해 학습하기 위해서 공식문서를 참고하여 학습하는 시간을 가져보았다. https://docs.docker.com/engine/reference/builder/ Dockerfile reference docs.docker.com 도커파일(DockerFile)이란? 도커의 이미지를 생성할 때 수행할 코드들을 작성해 두는 텍스트 파일이다. 즉, 템플릿 같은 역할을 하게 된다. 예로 java 17 버전을 이용한 spring boot jar 파일을 실행시킬 이미지를 만드는 dockerfile이다. FROM openjdk:17 ARG JAR_FILE=./build/libs/*.jar COPY ${JAR_FILE} /app.jar ENTRYPOINT ["java","-jar","/app.jar"].. 2023. 6. 29. [JPA] 페이징 처리, Paging (Pagination, Infinite Scroll) 페이징 처리 페이지네이션? 무한 스크롤? 페이징 처리는 한 번에 모든 데이터를 가져오면 많은 시간이 걸리기 때문에 단위를 나눠서 데이터를 가져올 수 있도록 단편화시키는 것을 의미한다. 구글만 보더라도 아래와 같이 페이지네이션을 처리해 두었다. 위와 같이 페이지를 나누어 사용자가 골라 접근할 수 있도록 만든 것을 페이지네이션이라고 부른다. 웹페이지를 이용할 때 흔하게 볼 수 있는 모습이다. 반면 요즘에는 SNS 같은 곳을 보면 이러한 숫자방식의 페이지네이션이 아닌 스크롤을 모두 내리면 추가적인 콘텐츠를 불러오는 방식의 무한 스크롤(infinite scroll) 방식도 많이 사용한다. 하지만 이러한 방식의 차이는 어떻게 보여주냐의 차이일 뿐 내부적인 로직은 거의 흡사하다. 기본적인 동작 원리는 조회할 때 얼.. 2023. 6. 21. Builder Pattern, 빌더 패턴 빌더 패턴 (Builder Pattern) 빌더 패턴이란? 객체를 단계별로 생성할 수 있게 만들어주는 패턴이다. 왜 사용하나요? 생성자의 의미가 좀 더 명확해진다. 재사용을 높인다. 단일 책임의 원칙 (생성만을 담당하는 빌더가 생김) 클래스에 여러 필드들이 있고 생성자에 너무 많은 파라미터를 두게 되면 호출 시에 매우 지저분한 코드가 될 것이다. 또한 파라미터를 부분적으로 사용하지 않는 경우 오버로딩을 통해서 해결할 수 있지만 생성자의 수가 기하급수적으로 늘어나게 될것이다. 빌더 패턴은 이러한 경우에 사용하면 좋은 효과를 볼 수 있다. 예를 들어 집을 만든다고 했을 때 창문의 형태, 수영장 여부, 크기, 주변 나무 개수, 지붕의 형태, 집의 형태 등등 다양한 조건이 올 수 있다. 이 것을 한 번에 만든다.. 2023. 6. 20. Gradle을 이용한 순수 자바 Jar 만들기 스프링 부트에서는 간단하게 bootJar 커맨드를 이용해서 Jar파일로 만드는 것이 간편했지만 자바만 사용했을 때에는 몇 가지 작업을 해주어야 한다. 1. Gradle plugin 설정 그래들에는 Java에 관련된 Task들을 작업해 둔 기본 plugin이 존재한다. 이를 이용하면 빌드와 같은 작업들을 간단하게 할 수 있다. build.gradle에 다음 구문을 추가해주면 된다. plugins { id 'java' } 이와 같이 추가해주고 gradle build gradle jar 명령어를 실행해 주거나 인텔리제이에서 가장 우측에 보면 Gradle 탭이 있는데 거기에서 Tasks - build에 들어가서 build와 jar를 순서대로 작동시켜 주면 된다. 이렇게 하면 프로젝트 최상위 디렉터리에 build.. 2023. 6. 20. 성격 검사 페이지 구현 회고 2 - 리액트에서 동적 비디오 로딩화면 구현하기 (복병 IOS혼내주기) 로딩화면? 성격 검사에 모두 응답을 하고 결과를 계산하기 위해 서버와 통신하는 사이 귀여운 캐릭터가 빙글빙글 도는 영상을 제공하려고 하였다. 기존에는 컴포넌트를 한 개씩 순서대로 보여주며 결과를 서버로부터 내려받을 때까지 로딩 애니메이션을 보여주다가 서버와 통신을 마치면 결과에 해당하는 캐릭터로 변신하는 애니메이션을 보여주고 끝나면 폭죽을 터트리며 결과화면으로 이어지는 하나의 애니메이션처럼 보이도록 단순하게 만들었다. 근데 단순히 컴포넌트를 변경하는 방법으로 구현했을 경우 네트워크 속도에 따라서 아직 영상 메타데이터들 조차 다운로드 되지 않아 빈화면으로 바뀌었다가 다시 변신 영상이 로드되는 모습이 보이게 되어 매끄럽지 않고 중간에 한번 끊기는 모습을 보여주었다. 또한 로딩 애니메이션이 끝난 뒤에 변신 애.. 2023. 6. 16. 이전 1 2 3 4 5 6 7 8 ··· 21 다음 반응형