[Spring] @Configuration과 CGLIB 프록시 마법
·
Dev Framework/Spring
@Configuration@Configuration은 단순히 설정 클래스를 나타내는 게 아니라, Spring이 내부에서 CGLIB 프록시를 적용할 수 있도록 의도적으로 명시하는 어노테이션입니다. 이 덕분에 Spring은 Java 코드로도 안전하게 싱글톤 빈을 구성할 수 있습니다. 읽기 전에 알아두면 좋은 점Spring은 기본적으로 모든 빈을 싱글톤으로 관리합니다.이를 통해 메모리 낭비를 줄이고, 같은 객체를 재사용함으로써 성능과 일관성을 확보할 수 있습니다.@Bean 메서드는 Spring 컨테이너에 객체를 등록하는 방법이지만, @Bean만으로는 메서드 간 호출 시 싱글톤 보장이 어렵습니다.@Configuration은 메서드 단위가 아니라 클래스 단위로 적용됩니다.@Configuration을 클래스에 붙여..
[Spring] 스프링 AOP - 1
·
Dev Framework/Spring
스프링 AOP(Aspect Oriented Programing)스프링의 핵심 철학 '비침투성'스프링은 EJB 같은 무거운 프레임워크가 주류이던 시절에 등장했습니다. 여기서 말하는 EJB는 Spring 이전에 주로 사용되던 자바 엔터프라이즈 애플리케이션 프레임워크입니다.그때의 프레임워크들은 다음과 같은 문제가 있었습니다.도메인 로직이 프레임워크 코드와 강하게 결합비즈니스 로직을 작성하려 해도, 상속 구조나 라이프사이클에 제약을 받아야 했음테스트하려면 컨테이너를 띄워야만 가능스프링 창시자인 Rod Johnson은 이 문제를 해결하고자 스프링을 설계하면서 이런 철학을 전면에 내세웠습니다."J2EE should not invade your domain model. Your domain model should b..
[NestJS] NestJS는 Spring에서 많은 영감을 받았다.
·
Dev Framework/Node.js
1. NestJS와 Spring 프레임워크의 유사성NestJS는 Java 생태계의 Spring 프레임워크에서 많은 영감을 받았습니다. 이 두 프레임워크 간의 유사성은 다음과 같습니다:1.1. 모듈 구조Spring과 NestJS 모두 모듈화된 구조를 채택하고 있습니다. Spring의 `@Configuration`과 `@ComponentScan`은 NestJS의 `@Module` 데코레이터와 유사한 역할을 합니다. 두 프레임워크 모두 관련 기능을 논리적 단위로 그룹화하여 애플리케이션의 구조를 개선합니다.1.2. 의존성 주입 시스템Spring의 핵심 기능 중 하나인 의존성 주입(DI)은 NestJS에서도 중요한 역할을 합니다. Spring의 `@Autowired`와 유사하게, NestJS는 생성자 주입을 통해..
[NestJS] NestJS는 처음이지? 어서와.
·
Dev Framework/Node.js
1. NestJS 너 대체 정체가 뭐야?NestJS는 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 혁신적인 프레임워크입니다. 2017년 Kamil Myśliwiec에 의해 개발된 이 프레임워크는 Angular의 아키텍처에서 영감을 받아, TypeScript를 기반으로 한 견고하고 모듈화된 구조를 제공합니다.현대적인 서버 애플리케이션 개발에서 마주치는 많은 과제들, 예를 들어 코드의 구조화, 확장성, 유지보수성 등의 문제를 NestJS는 효과적으로 해결합니다. 이 프레임워크는 Express.js를 기본 HTTP 서버 프레임워크로 사용하지만, 필요에 따라 Fastify로 전환할 수 있는 유연성도 제공합니다.Fastify: Node.js 환경에서 사용되는 웹 프레임워크로, 성능이..
[Spring Security] 01. Spring Security에 대해서
·
Dev Framework/Spring
Spring Security: 스프링 애플리케이션의 보안 강화 Spring Security는 Java 기반의 애플리케이션, 특히 Spring 기반의 애플리케이션에 보안 기능을 추가하는데 사용되는 강력한 인증 및 권한 부여 프레임워크입니다. 웹 보안 및 엔터프라이즈 애플리케이션의 보안을 위해 설계된 이 프레임워크는 스프링 애플리케이션의 보안을 적용하는 과정을 크게 간소화합니다. 주요 기능 Spring Security는 다음과 같은 다양한 보안 기능을 제공합니다: 인증(Authentication): 다양한 인증 메커니즘 지원 (폼 기반 로그인, LDAP, JWT, OAuth2 등). 권한 부여(Authorization): 인증된 사용자의 자원 접근 권한 결정. 보안 헤더(Secure Headers): HTT..
[Spring]Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed 해결 방법
·
Dev Framework/Spring
UnableToConnectException: Public Key Retrieval is not allowed오류는 MySQL에 연결할 때 발생하는 보안 관련 오류입니다. 이 오류는 MySQL 서버가 클라이언트에게 RSA 공개 키를 전송하는 방식으로 비밀번호를 인증하려고 할 때, 클라이언트(여기서는 Spring Boot 애플리케이션)가 이러한 방식의 인증을 허용하지 않을 때 발생합니다. 문제 해결 방법: 이 문제를 해결하는 가장 간단한 방법은 application.properties 파일에 있는 데이터베이스 연결 URL에 allowPublicKeyRetrieval=true 설정을 추가하는 것입니다. 그러나 보안상의 이유로, 이 옵션을 사용할 때는 useSSL=false 옵션과 함께 사용하지 않도록 주의해..
[Spring][MAC] Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid' 해결 방법
·
Dev Framework/Spring
오늘 lombok(롬복)을 사용하여 코드 간소화를 하기 위해 @ToString, @AllArgsConstructor 어노테이션을 사용하였으나, 다음과 같은 오류가 발생하였다. 이는 프로젝트에서 사용하고 있는 JDK가 21버전 이상이기에 발생하는 오류인데 JDK를 17로 수정해주면 해결된다. 이 글은 Mac 기준으로 작성되었으니 참고바란다. 오류 발생 오류 해결방법 1. File -> Project Structure 이동 2. SDK가 현재 JDK21 버전으로 설정되어있다. SDK를 JDK 17버전으로 수정해주자. 2-1 만일 JDK 17버전이 존재하지 않는다면 JDK17 버전을 다운로드 한 뒤 적용을 해주면 해결이 된다. 3. 성공적으로 실행이 된다.
[Spring Boot] 스프링 부트란
·
Dev Framework/Spring
Spring Boot Spring Boot는 Java 개발자들이 더 빠르고 쉽게 애플리케이션을 개발할 수 있도록 돕는 오픈 소스 프레임워크입니다. Spring Boot는 Spring 프레임워크의 일부이며, "convention over configuration"의 원칙을 따릅니다. 이는 개발자가 복잡한 설정 작업 없이도 애플리케이션을 빠르게 구축할 수 있도록 지원한다는 의미입니다. Spring Boot는 내장 서버, 보안, 데이터 액세스, 그리고 다양한 'starter' 종속성을 제공하여, 개발자가 필요한 컴포넌트를 쉽게 추가할 수 있게 합니다. 주요 특징 - 자동 구성(Auto-configuration): Spring Boot는 애플리케이션의 클래스패스에 기반하여 적절한 설정을 자동으로 제공합니다. 예..
개발자 성현