[Spring] MessageConverter
·
Dev Framework/Spring
HTTP 메시지 컨버터란?HTTP 메시지 컨버터는 뷰 템플릿 없이, JSON 같은 데이터를 HTTP 바디에 직접 읽고 쓰고자 할 때 사용하는 도구입니다. 언제 사용되나요?@RequestBody, @ResponseBodyHttpEntity, RequestEntity, ResponseEntity등을 사용할 때 스프링 MVC가 자동으로 메시지 컨버터를 적용합니다. @ResponseBody 사용 원리 @ResponseBody 를 사용할 경우HTTP의 BODY에 문자 내용을 직접 반환viewResolver 대신에 HttpMessageConverter가 동작기본 문자처리: StringHttpMessageConverter기본 객체처리: MappingJackson2HttpMessageConverterbyte 처리 등등..
[Spring] @Configuration과 CGLIB 프록시 마법
·
Dev Framework/Spring
@Configuration@Configuration은 단순히 설정 클래스를 나타내는 게 아니라, Spring이 내부에서 CGLIB 프록시를 적용할 수 있도록 의도적으로 명시하는 어노테이션입니다. 이 덕분에 Spring은 Java 코드로도 안전하게 싱글톤 빈을 구성할 수 있습니다. 읽기 전에 알아두면 좋은 점Spring은 기본적으로 모든 빈을 싱글톤으로 관리합니다.이를 통해 메모리 낭비를 줄이고, 같은 객체를 재사용함으로써 성능과 일관성을 확보할 수 있습니다.@Bean 메서드는 Spring 컨테이너에 객체를 등록하는 방법이지만, @Bean만으로는 메서드 간 호출 시 싱글톤 보장이 어렵습니다.@Configuration은 메서드 단위가 아니라 클래스 단위로 적용됩니다.@Configuration을 클래스에 붙여..
[Spring] HttpServlet 완벽 정리
·
Dev Framework/Spring
📘 HttpServlet 정리 - 요청/응답 방식과 한계웹 개발에서 HttpServlet은 클라이언트 요청을 처리하고, 적절한 응답을 돌려주는 기본적인 서블릿 기반 기술입니다. 이 문서에서는 요청 처리 방식(GET, POST, JSON)과 응답 방식(HTML, TEXT, JSON), 그리고 서블릿 방식의 한계점까지 정리합니다.  📥 요청 데이터 처리HTTP 요청 메시지를 개발자가 직접 파싱할 수도 있지만, 매우 불편하고 오류가 발생하기 쉽습니다. Servlet은 이를 대신 처리하여 HttpServletRequest 객체에 파싱된 정보를 담아 제공합니다. 1. 쿼리 파라미터 (GET 요청에서만 사용 가능)GET 방식에서는 URL에 ?key=value 형태로 데이터를 전송하며, HttpServletReq..
[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..
[JPA] JPA 영속성 컨텍스트 with 프록시 - 2
·
Dev Framework/Spring
프록시프록시란?JPA에서 말하는 **프록시(Proxy)**는 실제 엔티티 객체를 감싸고 있는 가짜 객체(대리 객체)입니다.이 프록시는 실제 객체처럼 행동하지만, 내부적으로는 실제 객체를 참조하지 않은 상태로 존재합니다.실제 객체가 필요한 순간(=속성 접근)까지는 DB에 접근하지 않고 대기하다가,속성이 호출되는 시점에 DB에서 데이터를 조회해서 영속성 컨텍스트에 등록하고, 실제 객체처럼 행동합니다.Member member = entityManager.getReference(Member.class, 1L);System.out.println(member.getClass());// class com.example.Member$HibernateProxy$...System.out.println(member.getN..
[JPA] JPA 영속성 컨텍스트 완전 정복 - 1
·
Dev Framework/Spring
영속성 컨텍스트1. 영속성 컨텍스트 정의영속성 컨텍스트란, 엔티티(Entity)를 저장하는 가상의 메모리 공간(1차 캐시)입니다.Java Persistence API(JPA)에서 엔티티 객체를 영구 저장소(데이터베이스)에 저장하거나 조회할 때, 직접 DB와 바로 통신하는 것이 아니라, 중간에 있는 영속성 컨텍스트를 통해 처리합니다. 2. 영속성 컨텍스트의 역할역할설명1차 캐시엔티티를 메모리에 저장해두고 동일한 엔티티 재조회 시 캐시에서 반환동일성 보장같은 트랜잭션 내에서는 같은 엔티티 인스턴스를 보장 (== 비교 가능)변경 감지 (Dirty Checking)엔티티 값이 변경되면 트랜잭션 종료 시 자동으로 UPDATE 쿼리 생성지연 로딩 (Lazy Loading)연관 엔티티는 실제 사용할 때까지 SQL을 ..
[SpringBoot] Lombok 사용 시 부모 생성자 호출 문제와 해결 방안
·
Dev Framework/Spring
Lombok과 상속: 부모 생성자 호출의 제약사항Lombok은 Java에서 보일러플레이트 코드를 줄여주는 유용한 라이브러리입니다. Lombok을 사용하면, 간단한 어노테이션으로 getter, setter, 생성자 등을 자동으로 생성할 수 있습니다. 그러나 Lombok을 사용할 때, 특히 상속 관계에서 부모 클래스의 생성자를 호출하는 데 몇 가지 제약이 따릅니다. 이 글에서는 이러한 제약 사항과 그 이유에 대해 설명하겠습니다.Lombok의 생성자 어노테이션먼저 Lombok의 주요 생성자 어노테이션에 대해 간단히 살펴보겠습니다.@AllArgsConstructor: 모든 필드를 인자로 받는 생성자를 생성합니다.@NoArgsConstructor: 인자가 없는 기본 생성자를 생성합니다.@RequiredArgsCo..
[Spring Security] 02. Http Basic이 아닌 OAuth2를 사용하는 이유
·
Dev Framework/Spring
HTTP Basic 인증 방식의 주요 취약점 중 하나는 클라이언트가 서버에 요청을 할 때마다 사용자의 자격증명(사용자 이름과 비밀번호)을 인코딩된 형태로 전송해야 한다는 것입니다. 이 방식은 사용자의 자격증명을 매 요청마다 Authorization 헤더에 포함시켜 전송합니다. HTTP Basic 인증은 인증 정보를 Base64 형식으로 인코딩하여 전송하지만, 이는 암호화 방식이 아니라 단순 인코딩에 불과하기 때문에, 인증 정보가 인터넷을 통해 전송될 때 쉽게 노출될 수 있습니다. HTTP Basic 인증의 취약점 평문 전송 위험: Base64 인코딩은 단순한 인코딩 방식이므로, 네트워크 스니핑을 통해 쉽게 디코딩되어 자격 증명 정보가 노출될 수 있습니다. 이는 특히 암호화되지 않은 HTTP 연결에서 문제..
개발자 성현