분류 전체보기
-
[Spring Batch] ItemReader개발/Spring 2024. 12. 1. 23:00
Spring Batch에서 ItemReader는 데이터를 읽어오는 역할을 담당하며, 데이터 읽기 방식에는 Cursor 기반과 Page 기반의 두 가지 주요 옵션이 있습니다. 이 두 방식은 데이터 접근과 메모리 사용 방식에서 차이가 있으며, 각각의 특징과 사용 사례가 있습니다. 1. Cursor 기반Cursor 기반 접근은 데이터베이스 커서를 열어 한 번에 한 개의 레코드를 순차적으로 읽어옵니다.순차적 읽기데이터를 하나씩 읽기 때문에 메모리 소비가 적습니다.데이터베이스 커서가 열려 있는 상태에서 작업을 진행한다지속적인 연결데이터베이스와의 연결이 작업이 완료될 때까지 유지됩니다. 커밋 주기에 따라 트랜잭션이 갱신될 수 있다. 장점메모리 효율적: 한 번에 한 레코드만 처리간단한 설정: 대부분의 경우 기본적인 ..
-
[React] Life Cycle카테고리 없음 2024. 11. 24. 23:25
라이프 사이클 메서드의 종류는 크게 마운트, 업데이트, 언마운트 종류로 나눌 수 있습니다. 1. 마운트마운트는 컴포넌트가 페이지에 새로 추가될 때 발생하는 단계이다. 이 단계에서는 다음과 같은 메서드가 호출된다.constructor : 컴포넌트가 생성될 때 호출getDerivedStateFromProps : props에 있는 값을 state에 넣을 때 사용하는 메서드이다. 컴포넌트가 생성될 때와 새로운 props를 받았을 때 호출된다.render : 컴포넌트가 렌더링될 때 호출된다. 즉, 우리가 준비한 UI를 렌더링해주는 메서드이다.componentDidMount : 컴포넌트가 웹 브라우저상에 나타난 후 호출하는 메서드이다.2. 업데이트컴포넌트는 다음과 같은 총 네 가지 경우에 업데이트된다.props의 ..
-
[Spring] SELF_INTRODUCTION CHARACTER VARYING(255) 에러 수정개발/Spring 2024. 11. 16. 23:45
에러내용Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.DataIntegrityViolationException: could not execute statement [Value too long for column "SELF_INTRODUCTION CHARACTER VARYING(255)": 원인string을 JPA에서 쿼리문으로 변환할 때 VARCHAR(255)로 변환하는데 255자가 넘어가게 저장하면서 발생하는 에러 해결방법@Lobprivate String textStorage;에러 발생했던 필드에 ..
-
진짜 중복과 가짜 중복을 구분하는 기준에 대한 고민카테고리 없음 2024. 11. 10. 00:19
개발하다가 고민했던 적이 있던걸 타 블로그에서 잘 풀어 설명해주었어서 생각날 때마다 편하게 보기 위해 제 블로그에 적었습니다.개발을 하다 보면 특정 기능에 대한 변경이 다른 기능에도 영향을 주게 되고, 이러한 사이드이펙트로 인해 시스템에 문제가 발생하는 경우가 자주 있다. 당연하게도 문제가 생긴 기능을 빠르게 복구하는 것이 가장 중요하겠지만, 이러한 문제가 생긴 근본적인 원인을 찾는 것 또한 중요하다. 대게 어떠한 기능에 대한 변경이 의도하지 않은 사이드이펙트를 유발하는 것은 단일 책임 원칙(SRP, Single Responsibility Principle)을 위반하기 때문일 것이다. 예를 들어 다음과 같이 배송 주소를 저장하는 ShippingAddress 라는 클래스가 존재하며, ShippingAddr..
-
[Spring] 가상 스레드를 이용한 부하테스트카테고리 없음 2024. 10. 27. 23:00
Spring Property 설정spring.threads.virtual.enabled=trueserver.tomcat.threads.max=1server.tomcat.threads.min-spare=1Spring에서 JDK 21을 이용할 때 가상 스레드를 활용하기 위해서는 spring.threads.virtual.enabled=true를 활성화해줍니다.부하테스트를 위해 Thread는 1개로 유지합니다.코드 작성@GetMapping("/test")public String test() throws InterruptedException { Thread.sleep(50); return "test";}간단히 위와 같은 Controller Method 하나를 작성해보고 Gatling에 Scala 코드로 동시 ..
-
[Nginx] 특정 ip 허용/차단카테고리 없음 2024. 10. 13. 23:00
서버에서 허용된 ip만 접속에 권한을 주려면 /etc/nginx 폴더 하위에 default.conf 를 열어 아래와 같이 ip를 허용하거나 차단하면된다.server { ... location / { ... include 111.222.333.444; deny 444.333.222.111; } ...}include 나 deny 를 사용해서 허용/차단을 할 수 있고 all 을 쓰면 모든 접근을 허용/차단 을 할 수 있다. 허용 또는 차단해야 할 ip 가 많을 경우 따로 파일로 빼서 관리를 해도 된다.vi allow_ipallow 123.123.123.123;allow 321.321.321.321; server { ... location / { ... ..
-
[JavaScript] Event 버블링과 캡처링카테고리 없음 2024. 10. 6. 23:00
이벤트 버블링이란 자바스크립트에서 이벤트가 발생한 자식 요소에서 시작해 부모 요소로 전파되는 방식이다. 물 속에서 발생한 기포 방울(Bubble)이 아래에서 위로 올라가는 이미지를 연상하면 쉽다. 즉, 가장 구체적인 요소에서 이벤트가 발생하면 그 이벤트가 상위 요소들로 차례차례 전달된다. 예를 들어, 안에 있는 을 클릭하면, 해당 버튼에 연결된 이벤트가 먼저 실행되고, 그 이벤트는 부모 요소인 로 전파된다. Click Me이 코드를 실행하면 버튼을 클릭할 때, "버튼 클릭됨"과 "부모 div 클릭됨"이 차례대로 출력된다. 이는 이벤트가 자식 요소에서 부모 요소로 전파되기 때문이다. 이벤트 캡처링이란 이벤트 캡처링(Event Capturing)은 버블링과 반대되는 개념이다. 이벤트가 부모 요소에서 시..
-
[Mysql] Prepared Statement개발/데이터베이스 2024. 9. 29. 23:00
Prepared statement는 orm 도구에서 많이 사용되는 것으로 binding query라고도 불린다. 이는 하기와 같이 값이 바인딩 되는 변수에 물음표를 사용해서 SQL 문장을 작성하고 prepare 단계를 먼저 수행한 후 변수의 값을 바인딩해서 쿼리를 실행하는 형태이다.pstmt = connection.prepareStatement( "select * from exam_tab where id = ?");pstmt.setInt(1, 1234);rs = pstmt.executeQuery();이처럼 prepared statement를 사용하여 쿼리를 작성하는 경우 빠르고 간단하게 sql injection 방지 처리를 구현할 수 있다. 그리고 쿼리 파싱 비용을 줄인다. 예를 들어 동일한 prepa..