Spring - @Controller 와 @RestController 차이
·
[Spring]
✅ @RestController vs @Controller 차이점Spring Boot에서 @RestController와 @Controller는 둘 다 컨트롤러 클래스에 붙이는 어노테이션이지만,주된 차이점은 응답 방식에 있습니다. 🔍 @Controller (웹 애플리케이션 용도)@Controller는 주로 HTML 같은 서버에 있는 뷰 페이지를 반환하는 경우에 사용됩니다.📌 @Controller를 사용하여 View 반환@Controllerpublic class PageController { @GetMapping("/home") public String home() { return "home"; // "home.html" (Thymeleaf 템플릿) 반환 }}return "h..
다양한 Lock 기법을 활용한 동시성 제어 방법 ( Synchronized , Database , Redis )
·
[Spring]
📌 개요이번 포스팅에서는 다양한 Lock 기법을 활용하여 동시성을 제어하는 방법들에 대해 다뤄보고자 합니다. 순서는 다음과 같습니다.   1. Java (Server) 수준에서 동시성을 제어하는 방법2. Database 수준에서 동시성을 제어하는 방법3. Redis 로 동시성을 제어하는 방법 ❓ Race Condition 이란동시성을 제어하기 위한 이유로는 Race Condition을 방지하기 위함임을 먼저 인지 해야 합니다. Race Condition이란 2개 이상의 스레드가 하나의 공유 자원을 가져갈 수 있고, 동시에 변경을 하려 할 때 발생하는 문제입니다.  예를들어, 100개라는 자원이 존재하고 두 개의 스레드가 하나씩 가져가는 상황이 된다면 총 98 이라는 결과를 기대하지만, 100 일 때의 ..
Spring Boot JPA : @Entity를 사용할 때 @NoArgsConstructor를 하지 않으면 에러가 나는 이유
·
[Spring]
📌 개요혹시 Spring boot Data JPA 를 사용하면서, @Entity 어노테이션을 활용하여 엔티티를 생성할 때, 기본생성자 직접 명시, 혹은 @NoArgsConstructor 를 명시하지 않은 경우,다음과 같은 에러를 마주하신 적이 있으실 것 입니다. 그렇다면,  JPA가 Entity 를 생성할 때 기본생성자를 명시하지 않으면 경고/에러가 발생하는지, 알아보겠습니다!  📌 JPA는 Entity를 생성 할 때 Reflection 기법을 사용한다. 해당 포스팅에선 Reflection에 대해선 자세하게 다루지 않고 간단하게 설명하고 넘어가겠습니다! 즉, 리플렉션은 해당 클래스에 대해서 타입을 알지 못하더라도, 해당 클래스의 메서드, 타입, 생성자, 변수들에 접근할 수 있도록 해주는 기법입니다.컴..
Bean을 등록하는 2가지 방법 (@Component / @Bean + @Configuration)
·
[Spring]
개요Spring boot를 쓰다보면 필연적으로 접하는 개념이 있습니다.그 중, 대표적으로 Spring이 관리하는 객체를 뜻하는 Componenet 와  Bean 을 예로 들 수 있겠습니다. 그렇다면 컴포넌트와 빈은 과연 무엇이며, Spring 에게 객체를 관리하도록 등록시키는 방법은 무엇일까요?  첫 번째 방법 : Component Scan 을 통한 빈 등록 ( @Component )첫 번째 방법으로는 컴포넌트 스캔 기술을 이용해 빈으로 등록하는 방법이 있습니다. 스프링은 기본적으로 클래스 위에 @Component 어노테이션이 붙은 객체를 빈으로 등록시킵니다.  @Controller , @Service , @Repository , @Configuration 등 모두 Ctrl + 클릭을 통해 들어가보면 @..
Spring Security로 로그인 구현해보기
·
[Spring]
📌개요로그인 구현과 JWT를 사용하고자 하면 Spring Security 라는 개념이 종종 나타나곤 합니다.이번 포스팅에는 Spring Security를 통해 로그인을 구현하는 과정을 알아보겠습니다!  📃 Spring Security의 동작구조 Spring Security를 사용하고 싶다면 내부 동작구조를 반드시 파악해야만 구현할 수 있습니다!실제로 Filter라는 눈에 보이지 않는 곳에서 데이터가 오고가기 때문에 내부 구조를 알아야 흐름을 이해할 수 있기 때문입니다.해당 내부구조는 Spring Security 라이브러리를 가져오는 순간 바로 생기게 되는데요.수많은 Filter 라는 단위를 통해, Filter Chain 과정으로 순차적인 흐름이 가능하게 됩니다.이 동작 과정을 반드시 기억해야 합니다...
Lombok 롬복의 @Builder, @NoArgsConstructor 와의 충돌 이유
·
[Spring]
📌 개요 Lombok 기능중 객체 생성 기능인 @Builder 와 기본 생성자 기능인 @NoArgsConstructor 를 함께쓰면 에러를 자주 만나볼 수 있었습니다. (직접 생성자를 정의할 때에도)가장 간단한 해결 방법으로는 전체 매개변수를 갖는 @AllArgsConstructor 를 함께 사용하면 해결된다 이지만, 본질적으로 왜 해당 에러가 발생하는지, 해당 해결 방법은 옳은 방법인지 궁금하여, 해당 포스팅을 하게 되었습니다. 도대체 왜 빌더 어노테이션은 (모든 매개변수를 갖지 않는) 또 다른 생성자들과 마주하면 하면 컴파일 에러가 발생할까요?   🔍 @Builder 의 동작 원리사실 이는 빌더 어노테이션의 동작 원리를 파악해보면 알 수 있었습니다.@Builder 의 동작 원리는 아래와 같습니다...
ORM, JPA, Hibernate 그리고 Spring Data JPA
·
[Spring]
📌 개요JPA를 학습한다면 필연적으로 따라오는 용어들이 있습니다.ORM 부터 시작하여, Hibernate.. 그리고 Spring Data JPA 까지.. 학습하면서 해당 3개의 각각의 역할과 차이점에 대해 굉장히 어려움을 가지고 있었습니다.  이에 따라, 이참에 한 번 명확하게 세가지의 역할과 차이점을 분명히 하고자 해당 주제를 포스팅 하게 되었습니다.   ORM Object-Relational Mapping 이라고 알려져있는 해당 용어는 과연 무엇일까요?용어를 그대로 따라가보자면, 객체 와 관계의 연결 이라고 번역해 볼 수 있을 것 같습니다. 그렇다면 객체와 관계의 연결? 이게 과연 무엇일까요?생각해봅시다! "객체지향 프로그래밍" 에서는 늘상 사용하던 "객체" 로 데이터를 관리하고 있으며,"관계형 데..