본문 바로가기

개발중/Spring

(88)
[스프링] Intercepter 설정하는 법에 대해서 ✍ 구글링으로 'Intercepter 가 무엇인가 ?' 라는 물음에 대해 '공통관심사를 분리하여 API 가 호출될 때에 세 가지 시점에 맞춰 필요한 로직을 입맛대로 구현할 수 있는 기능이야' 까지는 대답을 할 수 있었다. 하지만 구현은 해본적이 없어 직접 설정을 해보았다. : ( 빈수 깃허브 >> https://github.com/soobinJung/Intercepter GitHub - soobinJung/Intercepter: Intercepter Test Intercepter Test. Contribute to soobinJung/Intercepter development by creating an account on GitHub. github.com 실행되지 않는 인터셉트 공부한 곧이곧대로 코드를 적었..
서블릿 필터와, 스프링 인터셉터 ( 면접단골질문 ) 🎹 공통 관심사 대부분 많은 웹 서비스는 로그인을 해야 서비스를 이용할 수 있다. 로그인을 하지 않은 사용자는 접근할 수 있는 페이지가 제한적이며 로그인이 필요한 페이지 접근이 허용되서는 안된다. 하지만, 그렇다고 로그인이 필요한 모든 컨트롤러 로직에 로그인 여부를 확인하는 코드를 작성하는 것은 너무 비효율적이다. 수정에도 취약하다. 이렇게 많은 로직에서 공통으로 관심이 있는 부분을 공통 관심사(cross-cutting concerns)라 한다. 여러 로직에서 공통으로 로그인에 관심을 가지고 있는데, 이러한 공통 관심사는 스프링에서 AOP로 처리할 수 있다. 하지만, 웹에 관련된 공통 관심사는 스프링 AOP 보다는 서블릿 필터, 스프링 인터셉터에서 처리하는게 좋다. 웹과 관련된 공통 관심사를 처리할 때는 H..
@NotNull, @NotEmpty, @NotBlank @NotNull @NotEmpty @NotBlank javax.validation.constraints package에 포함된 기능으로 api에서 값을 입력받을 때 validation 체크를 위해 사용되는 어노테이션입니다. 많이 사용하게 되는 어노테이션으로 한 번만 차이를 확실히 알고 나면 용도에 맞게 잘 사용할 수 있습니다. @NotNull The annotated element must not be null. Accepts any type. NotNull은 말 그대로 null 값만 허용하지 않습니다. 그렇기 때문에 "", " " 가 입력되었을 경우는 허용하게 됩니다. @NotEmpty @NotEmpty The annotatd element must not be null nor empty. Suppor..
@RestController, ResponseEntity, @PathVariable @RestController REST 방식에서 가장 먼저 기억해야 하는 점은 서버에서 전송하는 것이 순수한 데이터라는 점 입니다. 기존의 Controller 에서 Model 에 데이터를 담아서 JSP 등과 같은 View 로 전달하는 것은 아니므로 기존의 Controller 와는 조금 다르게 동작합니다. 스프링4 에서는 @Controller 외에 @RestController 라는 어노테이션을 추가해서 해당 Controller 에서의 모든 메서드의 리턴 타입을 기존과 다르게 처리한다는 것을 명시합니다. @RestController 이전에는 @Controller 와 메서드 선언부에 @ResponseBody 를 이용해서 동일한 결과를 만들 수 있었습니다. @RestController 는 메서드의 리턴타입으로 사..
[스프링] DI / IOC 가 뭐냐면 ? 디펜던시인젝션 인벌션옵브컨드롤 ,,,,,,,, !!!!! 🌱DI(Dependency Injection) DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다. 첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접 생성하는 방법이고, 두번째 방법은 외부에서 생성 된 객체를 setter()를 통해 사용하는 방법이다. 이러한 두번째 방식이 의존성 주입의 예시인데, A 객체에서 B, C객체를 사용(의존)할 때 A 객체에서 직접 생성 하는 것이 아니라 외부(IOC컨테이너)에서 생성된 B, C객체를 조립(주입)시켜 setter 혹은 생성자를 통..
[스프링] 동시성에 대해 공부 좀 했습니다. 🌱동시성 동시성 문제는 멀티 쓰레드 환경에서 발생하는 문제다. 그림처럼 여러 쓰레드가 동시에 동일한 자원에 접근해서 수정을 하는 경우 발생한다. 왜냐하면 동시에 값을 수정했을 때, 각 쓰레드가 기대하던 값과는 다른 형태의 값이 들어올 가능성이 있기 때문이다. 멀티 쓰레드 환경이라고 하더라도 싱글톤 객체에 단순히 '조회'만 하는 것이라면 동시성 문제가 발생하지 않는다. 문제는 동시에 동일한 자원에 접근해서 수정을 했을 때 발생한다. 이런 동시성 문제는 지역 변수에서 발생하지 않는다. 지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당되기 때문이다. 동시성 문제가 발생하는 곳은 같은 인스턴스의 필드 또는 static 같은 공용 필드에 접근할 때 발생한다. 특히 스프링 빈 처럼 싱글톤 객체의 필드를 변경하여..
[스프링] 프로젝트 생성 (1) https://start.spring.io/ 에서 프로젝트를 생성한다. Gradle project Java 스냅션 없는 2.7.5 버전 Jar 로 Java 는 11 Dependencies Spring web Lombok Generate 선택시 생성 압축 풀기 인텔리제이 File > Open 후 압축을 푼 경로로 build.gradle 찾아 OK 선택하기 Open AS Project 기다리면 된다는데 아래와 같은 문구가 뜬다. (경로를 잘 안잡아줬나 ? ) Please fix JAVA_HOME environment variable. 실행을 누른다 실행 페이지가 떴다
[SpringBoot] Spring Validation 기록 끄적 📸 Spring Validation Spring Validation 에 대해서 알아보자. 오늘 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술의 Bean Validation 에 대해서 강의를 들었다. 사실 개발을 할 때 큰 고민중에 하나가 "검증" 부분이다. 풀스택으로 개발할 때는 검증에 대해 큰 고민이 없었던게 사실이다. '프론트에서 내가 값을 잘 보내면 되니까' 라는 생각이었던 것 같다. 그러다 백엔드와 프론트를 분리 후 협업하며 내가 API 를 제공하는 포지션에 서있다보니 검증에 대한 중요성에 대해 깊이 고민하게 되었던 것 같다. 예를 들어 User 라는 dto가 있을 때 각 컬럼에 대해서 유효성을 설정하고 @Getter @RequiredArgsConstructor public class User {..