Spring MVC에서 @ModelAttribute와 @RequestParam은 컨트롤러에서 요청 데이터를 바인딩하는 데 사용되지만, 사용 목적과 방식이 다릅니다. 각각의 차이점과 장단점을 정리해 보겠습니다. @ModelAttribute는 요청 데이터를 객체에 바인딩
최신 Spring 개발 실무에서 많이 사용되는 주요 어노테이션을 기능별로 정리하고, 예제 코드도 보강하여 설명해 드리겠습니다. Spring MVC에서 HTTP 요청을 처리하는 컨트롤러와 관련된 어노테이션입니다. Spring MVC에서 HTML을 반환하는 컨트롤러를
WebFlux와 코루틴을 같이 사용하는 것이 항상 좋은 것은 아닙니다. 하지만 특정 상황에서는 성능과 코드 가독성을 동시에 높일 수 있습니다. 이를 이해하기 위해 WebFlux와 코루틴의 특징을 비교하고, 언제 함께 사용하는 것이 좋은지 알아보겠습니다. WebFlux
Spring에서 Repository는 데이터베이스(DB)와 직접적인 상호작용을 담당하는 계층입니다. 일반적으로 DAO(Data Access Object) 패턴을 따르며, 데이터를 저장하고 불러오는 역할을 합니다. @Repository 어노테이션을 사용하여 Sprin
@Autowired는 Spring의 의존성 주입(DI, Dependency Injection)을 위한 어노테이션으로, Spring 컨테이너가 자동으로 빈(Bean)을 주입하도록 도와줍니다. 하지만 무조건 @Autowired를 사용하는 것이 아니라, 올바른 위치에서 사용
@Autowired는 Spring Framework에서 의존성 주입(Dependency Injection, DI)을 위한 어노테이션입니다. Spring 컨테이너가 애플리케이션의 객체들 간에 필요한 의존 관계를 자동으로 해결해주기 위해 사용됩니다. 쉽게 말해, @Auto
MyBatis에서 int 값을 두 개 이상 전달하려면, 일반적으로 Map, DTO (VO), @Param 어노테이션을 사용합니다. MyBatis에서 여러 개의 int 값을 XML에 전달하려면 @Param을 사용하는 것이 가장 간단하고 가독성이 좋습니다. \- @Pa
@Async와 WebFlux는 둘 다 비동기 처리를 지원하지만, 그 방식과 적용 범위에서 차이가 있습니다. 각각의 특성을 좀 더 자세히 비교해보겠습니다.@Async는 Spring에서 제공하는 어노테이션으로, 특정 메서드를 비동기적으로 실행하도록 처리합니다.주로 서버 내
Spring 기반의 RESTful API 문서를 자동으로 생성하는 방식에는 Swagger(OpenAPI)와 Spring REST Docs 두 가지 대표적인 방법이 있습니다. 각각의 방식은 서로 다른 목적과 장단점을 가지므로, 프로젝트의 성격에 따라 적절한 도구를 선택하
일단 서블릿 프로젝트를 먼저 몇번 해보는건 상당히 괜찮다는 생각이다.서블릿 프로젝트를 먼저 해보는 것은 Spring을 더 깊이 이해하는 데 매우 도움이 됩니다. Spring의 핵심 원리를 이해할 수 있음 Spring MVC는 결국 서블릿 기반으로 동작합니다. 서블
@RequestParam을 사용할 때, 파라미터 타입이 int인 경우에는 생략해도 자동으로 매핑됩니다. 하지만 몇 가지 조건이 있습니다. Spring MVC는 @RequestParam을 생략해도 URL의 쿼리 파라미터 값을 메서드의 매개변수에 자동으로 바인딩할 수 있
Spring WebFlux부터 바로 공부하는 것은 목적에 따라 장점과 단점이 있는 선택입니다. ✅ 비동기/논블로킹 프로그래밍을 주로 사용할 계획이라면 웹 서비스가 대량의 동시 요청을 처리해야 하거나, 응답 시간이 중요한 환경에서는 WebFlux가 유리합니다. Re
둘 다 클라이언트가 서버에 값을 전달할 때 사용되지만, URL 구조와 용도에서 차이가 있습니다. URL 경로에 값을 포함하여 전달할 때 사용123이 URL 경로의 일부로 전달됨 RESTful API에서 리소스를 식별할 때 주로 사용 (/user/{id} → 특정 사
프로그램의 흐름을 개발자가 직접 제어하는 것이 아니라, Spring Container가 대신 관리하는 개념 객체의 생성 및 생명주기를 Spring Framework가 관리 개발자가 직접 객체를 생성하고, 의존 관계를 설정해야 함UserRepository 객체의 생성
생성자 주입 방식에서는 final 키워드를 사용할 수 있음 객체가 생성된 이후에는 의존성이 변경될 수 없으므로, 안정성이 높아짐 final 필드로 선언된 userRepository는 한 번 할당된 이후 변경 불가능의존성이 변경되지 않아 예측 가능한 테스트 작성이 가
UserService가 UserRepository의 구체적인 구현체(JdbcUserRepository)를 직접 생성 구현체를 변경할 경우, UserService 내부 코드를 직접 수정해야 함 유지보수성 저하 UserRepository의 다른 구현체(MongoUse
AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 객체 지향 프로그래밍(OOP)으로 해결하기 어려운 공통 기능(횡단 관심사, Cross-Cutting Concern) 을 효과적으로 분리하여 모듈화하는 프로그래밍 패러다임입니다.횡단 관심
Spring AOP에서는 AspectJ 스타일의 어노테이션을 사용하여 AOP 기능을 간편하게 적용할 수 있습니다.다음은 주요 어노테이션과 그 역할에 대한 설명입니다. 클래스가 AOP 기능(횡단 관심사) 을 포함하는 Aspect(애스펙트) 임을 선언합니다.이 클래스는
@AfterReturning 어노테이션에서 value =를 사용하는 이유는 Spring AOP에서 여러 개의 속성(attribute)을 지정할 수 있기 때문입니다. @AfterReturning 어노테이션에는 다음과 같은 속성이 있습니다: 예제 코드에서 value =
포인트컷(Pointcut) 은 어드바이스(Advice, 부가 기능)를 적용할 대상 메서드를 선정하는 표현식입니다. 어떤 메서드에 AOP 기능을 적용할지 결정 execution(), within(), @annotation() 같은 표현식을 사용하여 대상 메서드를 필터
JoinPoint는 AOP에서 실행되는 메소드의 정보를 담고 있는 객체로, 두 가지 주요 타입이 있습니다: JoinPoint ProceedingJoinPoint 이들 각각의 특징과 사용 방법에 대해 예제와 함께 설명드리겠습니다.JoinPoint는 AOP에서 메소드
@Around 안에서 proceed 를 호출안하면, URL 로 접근된 메소드가 실행이 되지 않는다.네, @Around 어드바이스에서 proceed() 메서드를 실행하지 않으면, 해당 메소드가 실제로 실행되지 않습니다. 즉, 메소드 실행을 "차단"하거나 "취소"하는 효과
value = 이라고 해서 value 를 메소드 내부에서 뭔가 하는데 사용되는줄 알았다.하지만 찾을수 없어서 gpt 에게 계속 캐물었더니, 아래와 같은 답변.결국 스프링 내부에서 사용한다는 것이다. 개발자가 알 필요 없음.좋은 질문입니다! 정리하자면, 즉, 개발자가
@Scheduled은 Spring Framework에서 일정한 주기로 특정 메서드를 실행하도록 하는 어노테이션입니다.스케줄링을 활성화하면 별도의 쓰레드에서 작업을 수행하므로, 주기적인 작업을 실행할 때 유용합니다.먼저, @Scheduled을 사용하려면 스케줄링을 활성화
이 조합을 사용하면 단위 테스트를 효율적으로 작성할 수 있습니다.각 프레임워크의 역할은 다음과 같습니다. JUnit 5, Mockito, AssertJ를 사용하려면 아래 라이브러리를 추가해야 합니다. ✅ Mockito를 사용한 Mock 객체 생성UserReposit
Spring에서 @CrossOrigin 어노테이션을 사용하여 여러 개의 도메인을 지정하는 방법은 다음과 같습니다. @CrossOrigin 어노테이션의 origins 속성에 여러 개의 도메인을 배열로 지정할 수 있습니다. 📌 특징: 특정 컨트롤러에만 CORS 설정
Gradle의 dependencies 블록에서 사용되는 implementation, runtimeOnly 등의 키워드는 의존성의 범위(Scope)를 설정하는 것입니다. 각 설정에 따라 컴파일 시점과 런타임 시점에서 의존성이 어떻게 동작하는지가 달라집니다. 컴파일과 런
boolean 을 쓰면. delete, update 를 했을때 아무것도 갱신 or 삭제된 것이 없어도문제없이 쿼리가 실행되면 true 가 리턴되는 문제가 있다.사실상 삭제 or 수정이 이루어 지지 않았는데 프론트에서 성공 메시지가 출력될 것이다.리턴값은 int 를 써야
Spring Boot는 application.yml 또는 application.properties에서 미리 정해진 키워드(속성)들을 제공합니다.이 속성들은 Spring이 자동으로 인식하여 특정 기능을 활성화하거나 설정을 조정하는 역할을 합니다. 다음은 자주 사용하는
네, 맞습니다! Spring Boot의 @ConfigurationProperties를 사용하면, yml 파일에서 하이픈(-)을 사용하는 키는 자동으로 카멜 케이스로 변환되어 읽혀집니다.즉, download-path와 같이 하이픈을 사용하는 속성은 자동으로 downloa
네, @GetMapping과 같은 Spring MVC 컨트롤러 메서드는 기본적으로 Spring의 서블릿 컨테이너에서 관리하는 스레드에서 실행됩니다. 즉, 요청이 들어올 때마다 Spring이 관리하는 스레드 풀에서 작업이 처리됩니다.서블릿 컨테이너:@GetMapping
Spring에서는 @Configuration과 @Bean을 활용하여 여러 가지 컴포넌트를 커스텀 설정할 수 있습니다.대표적으로 데이터 소스, 캐시, HTTP 클라이언트, 메시지 컨버터 등을 설정할 수 있습니다. Spring Boot는 기본적으로 HikariCP를 사용
@Bean과 @Component는 둘 다 Spring Framework에서 빈(bean)을 등록하는 데 사용되지만, 그 사용 방식과 목적이 다릅니다. 각 어노테이션의 차이를 구체적으로 설명드리겠습니다.주로 설정 클래스에서 사용됩니다.메소드 레벨에 적용되어 메소드의 반환
jakarta.persistence 패키지를 사용하세요 (Spring Boot 3.0 이상에서는 필수).LocalDateTime을 직접 사용하면 되므로 @Temporal은 필요 없습니다.객체 매핑만 하려면 @Entity, @Table, @Id, @Column, @Man
좋은 질문입니다! "왜 @RequestBody로 모든 걸 처리하지 않고 @ModelAttribute도 필요할까?"라는 의문은 많은 분들이 갖는 질문이에요. 결론부터 말씀드리면:HTTP 스펙과 브라우저의 동작 방식, 그리고 Spring이 다양한 클라이언트를 지원해야 하기