분류 전체보기 23

[Spring] 필터와 인터셉터 (Filter vs Interceptor)

필터와 인터셉터 Filter vs Interceptor Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 필터와 인터셉터가 그 중 하나이다. 여기서 말하는 공통의 관심사란 무엇일까? 다음과 같은 상황을 가정해보자. 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있다. 상품관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 만일 등록, 수정, 삭제, 조회 등 컨트롤러가 늘어나면 어떻게 될까? 로그인 한 사용자인지 아닌지 체크하는 로직이 중복되어 들어갈 것이다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사라고 한다. 여기서 등록, 수정, 삭제, 조회 등 여러 로직에서 공통으로 인증에 대해서..

Spring 2022.11.16

[Spring] SpringBootTest 테스트 격리 방법

테스트 격리란? 마틴 파울러의 비결정적 테스트의 문제를 해결하기 위한 것. 비결정적 테스트란? 같은 입력값에 대해 항상 같은 결과를 출력하지 않는 테스트를 의미한다. 테스트 격리가 되지 않고 비결정적 테스트가 되는 근본적인 원인은? 각각의 테스트가 하나의 자원을 공유하기 때문이다. 그래서 스프링부트와 JUnit에서는 @BeforeEach, @AfterEach, @Transactional과 같은 어노테이션 기반의 격리를 지원한다. @SpringBootTest에서 테스트 격리하기 1. @Transactional 어노테이션 사용 @SpringBootTest를 사용한다면? 롤백되지 않는다. 만일 인수테스트를 할 때 @SpringBootTest 어노테이션을 사용한다면 문제가 생긴다. @SpringBootTest는..

Spring 2022.11.15

[Spring] Spring Bean Validation의 @Valid vs @Validated

Spring Bean을 검증하는 방법 Spring Bean을 검증하는 방법에는 어떤 것들이 있을까? 코드로 검증하기 Bean Validation 코드로 검증한다고 한다면? 다음과 같은 객체가 있다고 가정하자. public class Item { private final String itemName; private final int price; } 그리고 다음과 같은 검증이 필요하다고 가정해보자. itemName은 null값이 올 수 없다. itemName은 2자 이상, 30자 이하의 값이 와야한다. price는 null값이 올 수 없다. price 는 1000이상이어야한다…. 이러한 과정을 모두 코드로 작성한다면? 코드가 복잡해질 수 있다. Bean Validation을 활용한다면 어노테이션 하나로 검증..

Spring 2022.11.14

[Java] 자바의 final 키워드는 언제 어떻게 사용하는 것일까

세 줄 요약 자바의 final 키워드는 변수, 메소드, 클래스 앞에 사용된다. 자바의 final 키워드는 사용되는 곳에 따라 해석이 다르다. 그러나 공통적으로 가지는 의미는 앞에 final 키워드를 붙여 다른사람의 사용을 제한한다는 의미를 가지고 있다. final 키워드가 붙는 곳에 따라 제한하는 내용을 표로 간략히 정리하였다. Type Description Final Variable 재할당이 불가능하다. Final Method 자식클래스에서 override가 불가능하다. Final Class 상속이나 extend가 불가능하다. 그럼 final 키워드가 각각 변수, 메소드, 클래스 앞에 붙을 경우 어떤 의미를 갖는지 알아보자. final이 변수앞에 붙을 때 변수 앞에 final을 붙이면 변수는 재할당이 ..

Java 2022.02.21

RESTful API란?

세 줄 요약. 1. 최근 많은 서비스들의 client-side는 웹 하나로 정형화 되어있지 않고 다양한 웹 브라우저 환경과 모바일 환경에서 사용된다. 2. 각 client환경에 맞추어서 서버프로그램을 여러개 개발하는 것은 무리이므로 하나로 뭉치자 -> RESTful API의 등장! 3. REST의 원칙을 잘 지켜서 작성한 API가 RESTful API이다. REST의 등장배경 최근의 많은 서비스들은 다양한 웹 브라우저, 다양한 모바일 환경 (IOS, Android) 에서 사용되고 있다. 예전의 서버 프로그램은 단순히 하나의 브라우저에서 동작했다. 그러나 현재의 서버 프로그램은 다양한 환경에서의 통신에 대응해야 한다. 그래서 등장한게! REST라는 개념이다. 우리가 자주 사용하는 이 티스토리를 크롬에서도 ..

카테고리 없음 2022.01.04

[Breaking News!!!] 전세계 보안업계 비상으로 만든 이 "해킹법"은 무엇?

뉴스보다가 충격적인 기사를 보았습니다. 두둥 도대체 어디서 문제가 생긴걸까요? 바로 log4j라는 라이브러리에서 취약점이 발견되었다는 것입니다! log4j라이브러리는 서버나 프로그램의 유지 관리를 목표로 동작 상태를 기록으로 남기는 로깅 라이브러리입니다. 즉 사용자가 인터넷상에서 어떤 행동을 했는지 모든 정보를 log4j는 알고 있죠. 정말 안타까운 소식이 아닐 수 없습니다. 근데 제가 놀랐던 것은, 저 log4j 라는 라이브러리 이름이 익숙했다는 것입니다. 뭔가 써본 것 같은 이 느낌.. 그래서 찾아보니까 log4j가 아니라 Slf4j더라구요. 그래서 급 불안해졌죠 혹시 둘이 연관있는 라이브러리가 아닌가? 내 작지만 소중한 필터 로그를 해커가 쏘옥 가져간게 아닐까?? 그래서 함 이리저리 뒤적뒤적해봤습니..

카테고리 없음 2021.12.12

[진짜 꿀잼] 중국어로 코딩하기

https://dev-breathe.tistory.com/13 [꿀잼] 파이썬 한국어로 함수 이름 만들 수 있음 돌아갈까? ㅎㅎ 앞으로 한국어로 함수 많이 만들어야지! (물론.. 혼자 장난칠 때만....T.T) 한글 최고!! dev-breathe.tistory.com -> 한국어로 코드 짜는 이전 게시글 한국어로 코드를 영차영차 짜다가 어,,,? 다른나라 언어로도 짤 수 있겠는데...? 어느나라 언어까지 가능할까...? 하다가 아래와 같은 짤을 발견했다. 어...? 뭔가 이렇게 할 수 있을 것도 같은데? 일단 파이썬으로 해봤다. ㅋㅋㅋㅋㅋㅋ이거 진짜 재밌다. 저 def까지 중국어로 만들어보고 싶다. 아예 중국어로만 코드짜는 프로젝트 해봐야겠다. 중국어도 늘고 코딩실력도늘고..(?) 일석이조 예헤이!!!

개발꿀잼 2021.11.23

[Spring] Dto에서 toEntity쓰는 이유??????

DTO와 Entity를 분리하는 이유 Entity의 값이 변하면 Repository 클래스의 Entity Manager의 flush가 호출될 때 DB에 값이 반영되고, 이는 다른 로직들에도 영향을 미친다. 때문에 View와 통신하면서 필연적으로 데이터의 변경이 많은 DTO 클래스를 분리해주어야 한다. DTO랑 Entity분리해서 수정 못하게 한다면서요 ㅠㅠ!!!!! 근데 DTO로 분리해놓고 Dto에서 toEntity 왜!!! 씀???!?!?!?!?! 왜!! 엔티티로 다시 만들어주는거야!! 열받네 그래서 구글링 모든 페이지 싹싹 긁어모아서 해결해봄ㅋㅋ..;; 일단 빌더 패턴부터 다시 해보자. 빌더패턴이란? 디자인패턴중 하나로, 생성과 표현의 분리이다. 쉽게 말해 생성자에서 인자가 많을때 고려해볼수있는것이 ..

카테고리 없음 2021.11.18