프로그래밍
-
Axios Jwt RefreshToken 중복요청프로그래밍/Javascript 2024. 2. 4. 17:23
1. 문제 Client는 모든 Axios 요청에 대해서 Access Token을 Header에 추가하여 요청을 진행합니다. 만약 Access Token이 없거나 만료가 되었을 경우 Cookie에 저장되어 있는 Refresh Token을 이용하여 Access Token을 갱신받아 요청들을 다시 재요청하는 방법으로 구현되어 있습니다. Axios의 비동기 방식의 요청에서 문제가 발생하게 되었습니다. Access Token이 만료된 상태에서 Axios를 이용하여 3개의 요청을 보낼경우 Refresh Token 갱신 요청또한 3번이 발생하는 것입니다. 2. 문제 순서도 실재 동작하는 순서입니다. 우리가 생각한 순서는 1번요청을 하고 1번 요청에서 Access Token이 만료가 된다면 Refresh 토큰을 통해 ..
-
[Java] toString 메소드 재정의프로그래밍/Java 2022. 3. 3. 02:06
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. Object 클래스의 toString 메소드 toString 메소드는 Object 클래스에 정의되어 있는 메소드로 모든 Class는 toString 메소드를 정의되어 있습니다. toString의 Default 값은 위 이미지와 같이 '클래스 이름@16진수 해시코드'로 표시 됩니다. 2. toString 메소드 사용 toString 메소드의 경우 객체의 toString 메소드를 호출하는 경우도 사용이 되지만 프로그래머가 직접 호출하지 않는 곳에서도 많이 사용됩니다. println이나 printf와 같이 객체를 문자열로 출력하는 경우 객체를 문자열 연결자(+)를 이용..
-
[JPA] N+1 문제프로그래밍/JPA 2022. 3. 2. 15:39
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. N+1이란 조회하고자 하는 데이터를 조회하고 조회된 엔티티에 연관 엔티티를 추가로 JPA가 조회하여 특정 엔티티들을 조회하기 위 부가적으로 연관 엔티티 조회 쿼리가 추가로 실행되는 것을 의미합니다. 예를 들어 멤버 엔티티가 팀 엔티티와 연관 관계가 있는 상황에서 멤버의 이름이 '김'으로 시작하는 멤버를 조회하기 위해 1개의 쿼리를 실행합니다. 이 결과로 10명의 멤버가 조회되고 멤버 엔티티에 연관된 엔티티의 팀 엔티티를 조회하기 위해 추가로 10개의 쿼리가 수행되는 것입니다. 2. 즉시 로딩 N+1 PK를 이용한 조회 위 테스트의 경우 Repository의 fin..
-
[Junit] doReturn과 thenReturn프로그래밍/Junit 2022. 2. 21. 18:13
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. doReturn과 thenReturn 두 메소드는 Mockito 프레임워크의 메소드로 단위 테스트 중 발생할 수 있는 어려움을 Stub을 이용하여 극복할 수 있도록 해주는 메소드입니다. doReturn과 thenReturn은 모두 Stub을 만들어 Mock과 Spy의 특정 메소드 호출 시 반환 값을 Test에 코딩된 값으로 반환되도록 해주는 메소드입니다. 비슷한 기능을 하지만 2개의 메소드의 차이에 대하여 알아보도록 하겠습니다. 2. doReturn doReturn 메소드는 when의 Spy객체 또는 Mock객체의 실제 메소드를 호출하여 Stubbing을 하지 않..
-
[Junit] Test Double Spy 상세프로그래밍/Junit 2022. 2. 14. 23:37
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다.틀리거나 잘못된 정보가 있을 수 있습니다.댓글로 알려주시면 수정하도록 하겠습니다.1. Spy와 Mock 차이Spy는 Mock과 동일하게 Test를 위해 만들어진 객체입니다. 그러나 Mock과는 다른 점이 존재합니다. Mock의 경우는 Test를 위해 실 객체의 겉모양(Class)만 가지고 있으며 속(Method)의 경우 Stub을 통해 동작할 내용을 지정하여야 합니다. 그러나 Spy의 경우는 실제 객체와 동일한 겉모양(Class) 뿐만 아니라 구현 또한 동일하게 동작합니다. 또한 실제 구현된 내용 중 일부분을 Stub을 통해 Test 내용으로 변경 또한 가능합니다. 작성한 Class들을 확인해 보겠습니다. FileService Class를 보면 생성자로..
-
[Junit] Mock과 MockBean프로그래밍/Junit 2022. 2. 12. 03:07
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. Mock Mock은 Test를 위해 만들어진 가짜 객체입니다. mock객체는 실제 Class에 작성된 메소드를 수행하는 것이 아닌 stub으로 작성한 행위를 수행하여 해당 메소드가 수행된 것처럼 만들 수 있습니다. 작성한 Class들을 확인해 보겠습니다. MemberService Class를 보면 생성자로 MemberRepository를 주입받아 Service가 동작되도록 구현되어 있습니다. Repository는 DB와 Connection 하여 데이터를 입력 또는 조회하는 담당을 합니다. DB와 Connection 하여 데이터가 입력되고 조회되는 것은 Member..
-
[Junit] Test Double프로그래밍/Junit 2022. 2. 8. 01:37
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. Test Double 테스트 더블(Test Double)은 제라드 메스자로스에 의해서 탄생한 단어로 테스트 자동화 과정에서 테스트 진행이 어려운 경우 이를 대신하여 테스트 진행이 가능하도록 만들어 주는 객체를 말합니다. Test Double은 큰 의미에서 테스트 진행이 가능하도록 만들어주는 객체를 말하며 아래 5가지의 세부 종류로 나눌 수 있습니다. Test Double 종류 Test Spy Mock Dummy Object Test Stub Fake Object 2. Test Spy Test Stub 처럼 실제 동작을 수행하는 것이 아닌 미리 준비해둔 결과가 반환..
-
[JPA] Enum 사용프로그래밍/JPA 2022. 1. 14. 18:44
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. Enum이란 일정한 종류를 가지는 정보의 집합을 의미합니다. 예를 들어 상품의 종류로 책, CD, 연필 등 다양한 상품이 존재할 수 있습니다. 이때 책, CD, 연필 등은 일정한 종류 상품이라는 정보로 볼 수 있습니다. 그럼 이 상품 Enum에 책, CD, 연필 등 다양한 상품들을 상수 형태의 집합으로 만들어 관리할 수 있도록 합니다. 2. JPA에서 Enum 사용 먼저 Entity의 특정 속성으로 Enum을 사용하기 위해서는 @Enumerated라는 어노테이션을 사용해야 합니다. 이 어노테이션은 EnumType.String, EnumType.ORDINAL 2개의..