[개발 일기] 2025.01.01 - 도커 컨테이너 네트워크 (Feat : ports)
·
개발 일기
개요 SSAFY 시절부터 docker-compose를 작성할 때, 저 ports가 뭘 의미하는지 항상 궁금했다.  검색해서 찾아보면 대부분 “호스트 포트:컨테이너 포트” 이런식으로 외웠다.  그런데 이런 식으로 단순하게 외우니까 저 포트를 볼 때마다 늘 까먹어서 제대로 공부해봤다.   호스트 포트와 도커 컨테이너 포트 위의 그림으로 확실하게 설명 가능하다.  사용자가 호스트의 특정 포트로 요청을 보내면, 해당 포트와 바인딩되어 있는 컨테이너를 찾은 뒤 해당 컨테이너에 요청을 전달하는 것이다.  위의 이미지는 도커 컨테이너를 실행시킨 뒤, 내부 네트워크를 확인한 로그이다. 노란색 네모를 보면 각각의 컨테이너가 서로 다른 IP를 사용중인 것을 알 수 있다.  호스트 포트는 내가 사용중인 로컬의 포트번호를 의..
[JPA] Spring JPA 페이징 성능 향상
·
Spring/JPA
게시판의 하단에는 위의 이미지와 같이 몇 페이지부터 몇 페이지까지 있는지 볼 수 있다.  그렇다면 이러한 페이징을 하기 위해선 어떤 것을 알아야 할까? 바로 현재 페이지의 위치, 총 페이지 수이다.  총 페이지 수란, 보통 (조회된 모든 데이터 수) / (한 페이지에서 보여줄 글 수) 를 말한다.  그 말은, 위의 이미지처럼 1페이지에서 2페이지, 3, 4, 5 넘어갈 때 마다, 이전에 조회되었던 데이터를 함께 조회해야하는 것이다. 하지만 이전에 조회된 데이터는 사용하지도 않는다.  그냥 뒤에 있는 데이터를 탐색하기 위해 어쩔 수 없이 조회되는 데이터인 것이다.  보통 내가 진행했던 프로젝트는 뭐 게시글이 천만개~1억개 정도는 되는 것이 아니라서 매번 총 데이터의 수를 조회해도 상관없었지만, 실제 현업에..
[Spring] Spring Batch를 사용한 대량 데이터 저장 (2)
·
Spring
이제 Spring Batch를 내가 개발중인 프로젝트에 구현해봅시다.  구현하기 전에 필요한 건 프로젝트에 의존성을 설정하는 것과, 배치 관련 메타 테이블을 생성하는 것이다.   설정 build.gradleimplementation 'org.springframework.boot:spring-boot-starter-batch' build.gradle에 Spring Batch의 의존성을 추가한다.   메타 테이블 생성 메타 테이블을 생성하는 방법은 자동 생성, 수동 생성 두 가지 있다. 자동 생성spring: batch: jdbc: initialize-schema: always 메타 테이블 스키마를 자동으로 생성하는 설정 코드이다.  수동 생성-- Autogenerated: do not ed..
[Spring] Spring Batch를 사용한 대량 데이터 저장 (1)
·
Spring
개요이전까지 과부하 테스트를 위해 많은 양의 데이터가 필요할 때, 일일이 데이터를 INSERT 해주거나, 반복문, JMeter의 Loop를 사용해 데이터를 추가했다.  위의 이미지는 100,000개의 게시글 데이터를 JMeter의 Loop문을 사용해 테스트한 결과이다.  약 6분의 시간이 소요되었다. 생각보다 많은 시간이 소요되었다..  그래서 이 6분이라는 시간을 단축시킬 수 있는 방법이 있는지 찾아보다가 Spring Batch 라는 기술을 찾게되었다.  Spring 프레임워크에서 Spring Batch를 사용해 대용량 데이터를 처리하는 래퍼런스가 많은 것을 확인하고, 이번 기회에 Spring Batch를 사용해 데이터를 추가해보기로 했다.   Spring Batch란 Spring Batch란 대용량 ..
[Spring] Controller 테스트 코드 (Feat : Spring Security)
·
Spring
계층 별로 테스트를 진행할 때, Repository나 Service는 @DataJpaTest나 @SpringBootTest 어노테이션의 경우엔 실제 Bean 객체를 사용하는 것이기 때문에 별 문제없이 테스트를 진행할 수 있다.  하지만 Controller는 조금 다르다. Controller는 사용자의 요청을 전달받는 계층이기 때문에 말 그대로, 데이터를 잘 받을 수 있는지를 테스트하는 영역이다.  그렇다면 다른 계층과 Controller의 테스트 방식이 어떻게 다른지, 어떤 기술을 사용하는지 한번 알아보자.  @WebMvcTest @WebMvcTest는 Controller를 테스트할 때 가장 많이 사용하는 어노테이션이다.  아래는 Spring Framework 공식 홈페이지에 나와있는 @WebMvcTes..
[Java] 리플렉션
·
백엔드/Java
리플렉션 자바에서 리플렉션이란 런타임 시점에 동적으로 특정 클래스의 필드, 메서드, 생성자에 접근해 사용하는 자바 API이다.  가져오는 클래스의 정보는 모두 접근 제어자에 관계 없이 가져온다.  그리고 자바는 정적 언어이기 때문에 컴파일 시점에 객체 타입을 결정하지만, 자바 리플렉션 API를 사용한다면 런타임 시점에 타입을 동적으로 결정할 수 있다.  리플렉션 예제 코드public class Member { // 필드의 접근 제어자가 모두 다름 private String name; private int age; private String address; public String phone; // 기본 생성자는 필수 public Member() {} // 메서드..