@ResponseBody: HTTP 응답 처리 과정 분석
·
Spring
본격적인 응답 과정을 알아보기 이전에, @ResponseBody 어노테이션에 대해서 알아보자.하지만 API를 구현할 때, 보통 @ResponseBody 보다는 @RestController를 클래스 레벨에서 사용하는 경우가 많다. @RestController란?@RestController 는 @Controller 를 기반으로 하는 어노테이션으로, @RestController 컨트롤러에 존재하는 모든 메서드에 @ResponseBody  를 적용한다.즉, @RestController 는 @Controller  와 @ResponseBody 를 합친 어노테이션이라고 할 수 있다. 그렇다면 @ResponseBody는 무엇일까? @ResponseBody의 역할@Controller 어노테이션이 있는 컨트롤러(핸들러) ..
ServletResponse와 HttpOutputMessage 비교
·
Spring
ServletResponse와 HttpOutputMessage 의 차이점을 알아보자.ServletResponseServlet에서 제공하는 인터페이스이다.서블릿에서 클라이언트에게 응답을 제공할 때 사용하는 용도로 ServletResponse interface를 정의해두었는데, 특히 Http 요청과 응답을 처리하기 위해서는 HttpServletResponse interface를 사용한다.HttpOutputMessageSpring 에서 Http '요청과 응답'을 위한 기본 인터페이스로 정의해둔 것이 HttpMessage interface 이다.이전에 언급한 ServletResponse는 '응답'을 할 때 사용하는 용도라고 하였다. 따라서 자연스럽게 HttpMessage interface도 요청과 응답에 따라 ..
서블릿에서 원하는 HTTP Response 보내기
·
Spring
서블릿에서 원하는 HTTP 응답을 보내기 위해서는 HttpServletResponse 을 설정하면 된다.TMI ✨이렇게 서블릿 중에서도 HTTP 요청과 응답을 다루는 서블릿을 HTTP servlet 이라고 부른다.서블릿은 웹 서버에서 동작하는 작은 자바 프로그램이다. 서블릿은 웹 클라이언트로부터 요청을 받고, 이에 응답하는데 다들 알다시피 일반적으로 HTTP 요청/응답을 처리하는데 사용된다. 1. setContentType()을 통해 응답할 response의 content type을 정해주자. 이때 옵션으로 인코딩 방식도 정해줄 수 있다. res.setContentType("text/html;ISO-88859-4"); 2. 응답 헤더를 지정하자. setHeader()를 이용하면 된다. res.setHea..
@JoinColumn의 name과 referencedColumnName 속성
·
Spring/스프링 Data JPA
@JoinColumn은 왜 사용할까요? 외래키 만드려고 사용해줍니다. 그런데 테이블과는 다르게 객체에서는 참조하는 테이블의 pk가 아닌, 참조 객체 그 잡채를 외래키로 작성하잖아요? 즉 DB와 다른 방식을 사용하는 것이므로 무언가 처리가 필요합니다. 그리고 그 처리를 해주는게 JPA 인데,JPA는 우리가 참조 객체를 써주면 자동으로 해당 객체의 pk를 찾아서 DB에 외래키로 작성해줍니다. (그래서 JPA를 ORM 기술이라고도 부르죵.) 기본적으로, JPA가 생성해주는 외래키 이름(name)은 "참조 필드 이름_참조하는 객체의 pk"예요. 근데 우리가 기본으로 생성해주는 외래키 이름말고, 다른 이름으로 바꿔서 테이블에 저장하고 싶을 수 있져? 그때 쓰라고 나온게 name 속성입니다. name 속성 알아보기..
스프링 시큐리티 6.2 : 필터를 통한 인가 과정 살펴보기
·
Spring/스프링 시큐리티
보호되어 있는 글입니다.
연관관계 편의 메서드는 왜 작성해야할까?
·
Spring/스프링 Data JPA
탐색 Comment와 Post 사이의 관계를 생각해보자. 당연하게도 다대일 관계를 가지고 있을 것이고, 각각의 클래스는 아래와 같이 작성될 것이다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = "content") @Builder @AllArgsConstructor @DynamicUpdate @DynamicInsert public class Comment extends BaseTimeEntity{ @Id @GeneratedValue @Column(name = "comment_id") private Long id; private String content; @ManyToOne(fetch = FetchType..
@Builder,@NoArgsConstructor(AccessLevel.PROTECTED),@AllArgsConstructor
·
Spring/스프링 Data JPA
https://velog.io/@maketheworldwise/Builder-AllNoArgsConstructor-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%95%8C%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EC%9E%90 @Builder, @All/NoArgsConstructor 제대로 알고 사용하자! USE BUILDER ANNOTATION PROPERLY velog.io https://hyeonic.tistory.com/191 [JPA] 왜 JPA의 Entity는 기본 생성자를 가져야 하는가? 왜 JPA의 Entity는 기본 생성자를 가져야 하는가? 정확히 이야기하면 Entity는 반드시 파라미터가 없는 생성자가 있어야 하고, 이것은 public 또는 pro..
실전! Querydsl - 프로젝트 환경 설정
·
Spring/QueryDSL
초기 setting 문제 1 💥 Gradle - other 패키지에 compileQuerydsl파일이 안보임💥 해결 Gradle-build에 있는 build를 하니 생성된 Q파일을 볼 수 있었다. Gradle-build해도 빌드 프로세스 안에 ComplieQueryDSL이 자동으로 포함되어 있으므로 Q파일이 생긴다고 한다. 🔽 🤔 왜 안보였던 것일까? ₍ ꜆. ̫.₎. ̫.꜀ ₎ 논의 중 ₍ ꜆. ̫.₎. ̫.꜀ ₎ 문제 2 현재 내가 9.0 Gradle에서는 deprecated될 기능을 사용하여 빌드하고 있다고 한다.(Gradle 8.5 사용) 알림 기능이라 빌드 자체에는 문제는 없다. 해결 https://sunghs.tistory.com/118 [[Gradle] Deprecated Gradle fea..