개요 Kotlin의 프로퍼티(Property)는 Java의 필드(Field)와 getter/setter를 통합한 개념임 접근 제어자는 Java와 유사하지만 몇 가지 중요한 차이가 있음 프로퍼티 위임을 통해 강력한 기능 확장이 가능함 프로퍼티와 필드 Java의 접근 방식 Java는 필드를 선언한 후 접근 제어를 위해 get...
Kotlin은 어떻게 Kotlin으로 개발되었는가?
개요 프로그래밍 언어의 컴파일러를 그 언어 자신으로 작성하는 과정을 부트스트래핑(Bootstrapping)이라고 함 Kotlin은 처음에는 Java로 컴파일러를 개발했으나, 현재는 Kotlin으로 작성된 컴파일러가 자기 자신을 컴파일하는 자가 호스팅(Self-Hosting) 시스템을 완성함 이 과정은 언어의 실용성과 성숙도를 증명하는 중...
코틀린의 탄생 배경과 특징
개요 코틀린은 JetBrains가 자신들의 IDE 제품 개발을 위해 Java와 Scala의 문제점을 해결하기 위해 개발한 프로그래밍 언어 2011년 7월 19일 JVM Language Summit에서 Dmitry Jemerov가 처음 공개 2012년 2월에 Apache 2 License 하에 오픈소스로 전환 2017년 Google I...
AWS S3 Presigned URL
개요 Presigned URL은 AWS 서명 V4 알고리즘으로 서명된 URL임 서버의 비밀 키로 생성된 보안 토큰으로 클라이언트가 직접 S3에 접근할 수 있게 해줌 서버 부하 없이 대용량 파일을 안전하게 업로드하거나 다운로드할 수 있음 개념 Presigned URL AWS 서명 V4로 서명된 URL로 다음 요소들을 조합해...
LocalStack으로 AWS 서비스 로컬 개발하기
개요 LocalStack은 AWS 전체 클라우드 인프라를 에뮬레이션하는 소프트웨어임 단일 Docker 컨테이너로 실행되며 개발자 머신이나 CI 환경에서 AWS SDK와 AWS CLI를 그대로 사용하되 실제 AWS 서버 대신 로컬에서 모든 요청을 처리함 실제 AWS와 동일한 방식으로 개발하면서 비용 없이 로컬에서 테스트할 수 있음 ...
전략 패턴(Strategy Pattern)
개요 전략 패턴은 행위를 클래스로 추상화하여 런타임에 알고리즘을 자유롭게 교체할 수 있게 해주는 객체 지향 디자인 패턴임 동일한 문제에 대해 다양한 알고리즘이 적용될 수 있을 때 코드 구조를 유지하고 새로운 전략의 추가나 변환을 유연하게 처리할 수 있도록 설계됨 패턴의 목적과 개념 정의 전략 패턴은 행동을 별도의 전략 객체로...
[스프링 핵심 원리 - 고급편] 스프링 AOP 실무 주의사항
스프링 AOP - 실무 주의사항 김영한님의 스프링 핵심 원리 - 고급편 강의를 바탕으로 스프링 AOP 적용 시 마주할 수 있는 프록시 내부 호출 한계점과 해결책, 그리고 프록시 적용 기술(JDK 동적 프록시, CGLIB)의 발전 과정 및 차이를 정리함 프록시와 내부 호출 - 문제 주요 원칙 스프링 AOP는 프록시 방식으로 동작함...
[스프링 핵심 원리 - 고급편] 스프링 AOP 실전 예제
스프링 AOP - 실전 예제 김영한님의 스프링 핵심 원리 - 고급편 강의를 바탕으로 유용하게 쓰일 수 있는 로그 출력 AOP(@Trace)와 재시도 AOP(@Retry)를 직접 구현해보고 전체적인 코드 구조와 흐름을 정리함 예제 구조 전체 패키지 아키텍처 애노테이션, 애스펙트, 그리고 실제 비즈니스 로직 클래스들로 분리...
[스프링 핵심 원리 - 고급편] 스프링 AOP 포인트컷
스프링 AOP 포인트컷의 이해 김영한님의 스프링 원리 - 고급편 강의를 바탕으로 스프링 AOP의 포인트컷 지시자의 종류와 사용법을 정리함 포인트컷 지시자 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작함 execution ...
[스프링 핵심 원리 - 고급편] 스프링 AOP 구현
스프링 AOP 구현 김영한님의 스프링 원리 - 고급편 강의를 바탕으로 스프링 AOP의 구현 방법과 단계별 진화 과정, 그리고 다양한 어드바이스 종류를 정리함 프로젝트 설정 build.gradle implementation 'org.springframework.boot:spring-boot-starter-aspectj' ...