전체 글71 스프링 캐시 추상화 Spring Cache 추상화1. Spring Cache 추상화란?Spring에서 제공하는 캐시 추상화(Cache Abstraction) 를 사용하면 캐시 로직을 직접 작성하지 않고 애너테이션 기반으로 캐싱 기능을 적용할 수 있다.Spring Cache는 실제 캐시 저장소를 직접 구현하는 것이 아니라, 여러 캐시 구현체를 동일한 방식으로 사용할 수 있도록 추상화 계층을 제공한다.따라서 실제 데이터를 저장할 캐시 구현체는 별도로 필요하다.예를 들어 다음과 같은 캐시를 사용할 수 있다.ConcurrentMapCaffeineRedisMongoDB 기반 커스텀 캐시직접 구현한 캐시핵심 인터페이스org.springframework.cache.Cacheorg.springframework.cache.CacheMana.. 카테고리 없음 2026. 8. 20. 방화벽, 알고 신청하자 1. 방화벽이란? 왜 신청해야 하는가?방화벽이란?네트워크 트래픽을 허용하거나 차단하는 보안 관문입니다.쉽게 말하면, 아파트 입구의 경비원 같은 역할입니다.허가된 사람(트래픽)만 들어오게 하고허가되지 않은 사람은 막습니다왜 방화벽 오픈이 필요한가보안상의 이유로, 기본적으로 모든 트래픽은 차단되어 있습니다.새로운 서비스를 연결하거나, 서버 간 통신이 필요할 때 "이 경로는 열어주세요" 라고 명시적으로 요청하는 것이 방화벽 신청입니다.예를 들어:우리 서버 → 외부 API 호출이 필요할 때A 시스템 → B 시스템으로 데이터를 보내야 할 때클라우드(AWS) ↔ 사내 네트워크를 연결해야 할 때2. 방화벽 신청 시 알면 좋은 용어들DMZ (DeMilitarized Zone)내부망과 외부 인터넷 사이의 중간 구역. 외.. infra 2026. 8. 12. 트랜잭션 아웃박스 패턴 서로 다른 시스템 간에 비동기로 연동 시 메세징 시스템을 사용할 수 있다.메세징 시스템은 연동이 필요한 시스템들 사이에 위치한다.이 때 메세지 생성자 입장에서는 메세지 유실, 트랜잭션 연동 등을 고려해야 한다. 이에 대해 알아보자.DB 트랜잭션과 메세지 연동메세지 생산자는 db 트랜잭션과 연동을 고려해야 한다.메세징 시스템에 메세지를 전송하는 작업은 트랜잭션 내에서 해야 할까?주문 서비스와 알림 서비스를 메세징 시스템으로 연동하는 상황을 생각해보자.시나리오 1: 트랜잭션 내에서 메세지 전송고객(User) 주문 서비스 DB 메시징 시스템 알림 서비스 │ │ │ │ .. 카테고리 없음 2026. 2. 10. 사이드프로젝트에 jenkins를 통한 ci/cd 적용하기 동기실무에서 jenkins + github actions를 통해 ci/cd가 이루어지는데, 굉장히 편리하다고 생각했다.관리자가 따로 있어서 나는 사용하는 입장이므로 사이드프로젝트에 직접 적용하여 경험해보고 싶었다. 적용 방법 jenkins 설치먼저 gcp 인스턴스에 jenkins를 설치해주었다. jenkins를 설치하면 jenkins 계정이 생기고 이 계정에 의해 jenkins가 데몬 프로세스로 동작한다.http://서버ip:젠킨스포트번호/ 로 접속하면 젠킨스 web을 확인할 수 있다. jenkins web 에서는 작업을 생성하고 관리할 수 있다. github 연동 나는 github에 push -> jenkins 에 의한 빌드 및 배포 를 원하기 때문에 jenkins - github을 연동해야.. devops 2025. 7. 27. Thread 출처https://jongwoon.tistory.com/9https://ittrue.tistory.com/173Thread 란 ?프로세스 내에서 실제 작업을 수행하는 실행단위 , 즉 프로세스 > 스레드java 에서는 main 스레드에서 시작, 추가로 생성하면 멀티 스레드 환경OS 레벨에서의 보편적 개념하나의 java 프로세스는 기본적으로 하나의 main thread 로 실행됨필요 시 여러 thread 를 만들어 병렬 작업 가능스레드는 프로세스의 힙 메모리 자원을 공유하기 때문에 공유 자원 사용에 각별한 주의 필요MultiThreading여러 스레드를 동시에 실행시키는 프로그래밍 기법프로세스를 생성하는 것보다 스레드를 생성하는 것이 비용이 적다멀티 프로세스보다 멀티 스레드가 비용이 적게 든다동기화를 고려한.. Java 2025. 6. 22. Pageable 커스텀 예외처리 siso 사이드프로젝트를 진행하면서 스프링에서 페이징 처리를 위해 제공하는 Pageable 인터페이스의 예외처리를 적용한 방법을 정리해보자. 커스텀 예외처리를 적용한 이유 siso는 @RestControllerAdvice 에서 예외를 처리한다. Pageable 기본 예외처리 말고 내가 원하는 예외 타입을 던지고 정해놓은 형식에 맞게 처리되길 원했다. 예를 들어 page size -1 요청에 대해서 IllegalArgumentException: Page size must not be less than one! 가 발생하는데, 나는 내가 정의한 예외 타입 - 예외 코드에 의해 처리되길 바란다. Pageable은 page size가 -1 이라던가 하는 일반적으로 잘못된 요청에 대해서는 예외처리를 하지만, 더 .. 스프링 2025. 6. 7. 테스트에서 @CreatedDate 정렬 문제 해결하기 문제상황테스트 코드 작성 중 @CreatedDate 필드가 자동으로 현재 시간을 설정하면서, 데이터 정렬이 일정하지 않아 테스트가 실패하는 문제를 겪었다. Rating rating = saveRating(다미, 이준석, 3.5, 1); Rating rating1 = saveRating(레온이, 이준석, 3.5, 2); Rating rating2 = saveRating(장몽이, 이준석, 3.5, 3); Rating rating3 = saveRating(멍청이, 이준석, 3.5, 4); log.info("rating createdDate : {}",rating.getCreatedDate()); log.info("rating 1 cre.. 테스트 2025. 2. 11. 트랜잭션 내부에서 외부 api 호출하지 말자 // CongressmanService @Transactional public NewsListDTO findNewsList(String encryptedCongressmanId, Pageable pageable) { final Long congressmanId = aesUtil.decrypt(encryptedCongressmanId); final Congressman congressman = findById(congressmanId); // 외부 api 호출 final String response = getApiResponse(buildUrlStringForNews(pageable, congressman)); .. 스프링 2025. 2. 3. spring 요청 Validation 검증, 예외 처리 서론최근 tdd 방식으로 사이드프로젝트를 진행중이다.tdd 방식은 시간도 더 걸리고 귀찮지만 이미 테스트코드가 있으니까 리팩터링 시 chat gpt를 적극 활용할 수 있다. 코드를 수정할 때도 테스트 딸깍으로 사이드 이펙트를 확인할 수 있어서 좋다. 또, 실패 테스트 작성 과정에서 예외 처리에 대해 신경쓰게 되어 꼼꼼한 예외처리가 가능해지는 것 같다. 컨트롤러에서 요청값을 받을 때 적용한 예외처리에 대해 간단하게 정리해보고자 한다. Bean Validation @GetMapping("/{encryptedCongressmanId}") public ResponseEntity ratingList( @PathVariable String encryptedCongressmanId, .. 스프링 2025. 1. 16. L4 스위치 회사에서 L4 스위치 관련해 이슈가 있었는데 관련 지식이 부족해 찾아보던 중 잘 정리된 포스팅이 있어 읽고 간단하게 정리해보았다. L4 스위치란?L4 스위치는 서버 부하 분산=로드빌런싱 을 처리하는 장치다뿐만 아니라 프로토콜(TCP, UDP, HTTP 등)의 헤더를 분석한 정보를 토대로 부하 분산을 실시하고, source ip, destination ip를 NAT 해서 보낼 수 있다.관련 용어L4 스위치는 외부 접속용 공인 IP(NAT IP)와 서버와 통신하기 위한 사설 IP를 갖게된다모든 요청은 L4스위치를 통해 서버로 들어오므로, 서버는 공인 ip가 필요없고 사설 ip만 갖는다.외부에서 서버 ip를 알 수 없고 악의적 공격이 제한된다.Virtual ServerL4 스위치의 Virtual Server.. infra 2024. 12. 31. 컨트롤러 단위 테스트 시 mock 객체 stubbing을 해야할까 컨트롤러 단위 테스트를 작성할 때는 @WebMvcTest 등으로 웹 계층의 빈만 주입받는다.이 때 컨트롤러가 의존하는 객체(서비스 등)는 @MockBean 등으로 만들어준다.mock 객체 stubbing을 해야한다나는 이제까지 mock 객체의 메서드가 호출된다면 stubbing을 해줘야 한다고 생각했다.예를 들어 컨트롤러 단위 테스트 시에 서비스는 stubbing을 통해 정상작동하는 것을 보장해야 컨트롤러에 대해서만 테스트 할 수 있다고 생각했다.@WebMvcTest(MessageController.class)class MessageControllerTest { @Autowired private MockMvc mockMvc; @MockBean private MessageService.. 테스트 2024. 12. 17. 개발보안 취약 사례 및 대응방안 - 2 지난 글에 이어서 sql injection과 xxs등 이외 최약 사례에 대해 알아보자. sql injectionsql injection은 db 질의와 관련된 웹 파라미터에 악성 sql을 주입해 db, 서버를 공격하는 것이다. 여러가지 종류가 있는데, 하나씩 확인하며 이해해보자.sql injection 종류error based sql injection웹 페이지 응답 데이터에 dbms error message가 응답될 때 할 수 있는 공격 기법이다. dbms 에러를 유발할 수 있는 입력값을 입력하고 에러 메세지를 통해 정보를 탈취한다. blind sqlsql where 절 조건이 true일때와 false 일 때 응답값 유무를 확인해 취약점을 찾고 추가적인 공격을 통해 데이터를 얻는 방식이다. select *.. 시큐어코딩 2024. 12. 4. 이전 1 2 3 4 ··· 6 다음