본문 바로가기

Spring

테스트 주도 개발 시작하기 - TDD 시작, TDD 암호 검사기 2 1. 네 번째 테스트 값이 없는 경우 - 예외상황을 고려하지 않으면 비정상 작동 - 값이 없는 경우에 대해서 알맞은 동작이 되도록 테스트 해야함 - 값이 없는 경우에는 어떻게 작동해야 할 지 고민 필요, IllegalArgumentException 발생 시키거나, 유효하지 않은 암호를 의미하는 PasswordStrength.INVALID를 리턴하게 할 수 있음(코드는 후자의 방법으로 진행) 1) 테스트 코드 추가 import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class PasswordStreng.. 더보기
테스트 주도 개발 시작하기 - TDD 시작, TDD 암호 검사기 1 구현할 기능: 암호 검사기 검사 규칙 길이가 8자 이상 0 ~9 숫자를 포함 대문자 포함 암호 강도 3개 규칙 모두 충족 시 암호는 강함 2개 규칙 충족 시 암호는 보통 1개 규칙 충족 시 암호는 약함 1. 첫 번째 테스트 가장 쉽거나 가장 예외적인 상황을 선택해야 함 모든 규칙을 충족하는 경우, 모든 조건을 충족하지 않은 경우 중 모든 규칙을 충족하는 경우를 먼저 테스트 왜? 모든 규칙을 충족시키지 않는 경우 테스트를 통과시키려면 각 조건을 검사하는 코드를 모두 구현해야 하므로 한 번에 만들어야 할 코드가 많아지고 시간이 길어짐 -> 사실상 구현을 다 하고 테스트 하는 방식과 큰 차별점이 없음 1) 테스트 코드 구현 import org.junit.jupiter.api.DisplayName; import.. 더보기
테스트 주도 개발 시작하기 - TDD 시작, TDD란 1. 기능을 검증하는 테스트 코드 작성 import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class CalculatorTest { @Test // @Test어노테이션을 붙인 plus()메소드를 테스트 메소드로 인식 void plus() { // 기능을 검증 할 plus()메소드 int sum = Calculator.plus(1, 2); // 계산 기능을 실행하는 코드 작성 assertEquals(3, sum); // 결과가 기대한 값인지 검증, assertEquals(기대값, 실제값) 두 값이 같지 않으면 AssertionFailedError 발생 } } Caculator.. 더보기
📝 스프링(Spring) 예외(Exception)처리 2 Spring 기본적으로 BasicErrorController 에서 에러 처리 /error: 에러 요청 다시 전달(Redirect)하도록 WAS 설정되어 있음 오류(Error)페이지 HTTP Status 에러 HTTP 200, Error Message -> 별도 설정 없으면 BasicErrorController가 에러를 처리함(기본적으로 WebMVCAutoConfiguration을 통해 WAS 자동 설정) 스프링 일반적 흐름 WAS(톰캣) -> Filter -> 디스패치 서블릿 -> 인터셉터 -> 컨트롤러 컨트롤러에서 에러 발생 시 흐름(예외처리 따로 없는 경우) WAS(톰캣) -> Filter -> 디스패치 서블릿 -> 인터셉터 -> 컨트롤러 -> WAS는 application에서 예외처리 안되서 온거로.. 더보기
📝 Spring Security란? Spring Security 란? spring 기반의 어플리케이션의 보안을 담당하는 프레임 워크이다. ‘인증’ 과 ‘권한 ‘에 대한 부분을 filter 흐름에 따라 처리하며 filter는 Servlet으로 가기 전 가장 먼저 url 요청을 받는다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. 인증**(Authentication)과 권한(Authorization)** 인증 사이트에 접속하려는 자가 누구인지 확인하는 절차 usernamepassword를 통해 인증(session, token 관리) sns로그인을 통한 인증 위임을 할 수도 있다 권한 사용자가 어떤 일을 할 수 있는지 권한 설정하는 절차 특정 페이지/리소.. 더보기
📝 트랜잭션(Transacction)이란? 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계 특징 원자성(Atomicity): 트랜잭션은 All or Noting의 실행만 가능(일부 실행 불가) 일관성(Consistency): 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관된 데이터베이스 상태가 됨 독립성/고립성(Isolation): 트랜잭션 작업 수행 중에는 다른 트랜잭션에 영향을 주어서도 안되고, 간섭을 받아서도 안됨. 예를들어 다수의 트랜잭션이 동시에 수행중인 상황에서 하나의 트랜잭션이 완료될 때까지 현재 실행중인 트랜잭션의 중간 수행결과를 다른 트랜잭션에서 참조 불가 영구성/지속성(Durability): 트랜잭션이 실행을 성공적으로 끝내면 그 결과를 어떠한 경우라도 보장 받음 트랜잭션을 사용한 폴더 생성 예시 public List.. 더보기
📝 OAuth란? OAuth를 사용하는 이유 보안의 수준을 알 수 없는 애플리케이션에서 일일히 계정을 만들어 사용하면 ID/PW 관리가 어렵고 개인정보가 유출되면 연쇄적으로 피해가 심각하기에, 보안 수준이 어느정도 검증된 사이트(ex, google, facebook)의 API를 이용해서 인증을 받는 방법이 보안상 좋기 때문이다. OAuth2 동장 방식 OAuth 인증 방식은 인증의 과정을 '타 서비스에게 위임'하는 인증방식. 예를 들어 내 사이트에 구글 로그인 인증을 넣었다고 해서 사용자가 구글 웹사이트에 직접 로그인하는 것이 아니라, 사용자의 정보는 내 사이트에서 관리하고, 구글 로그인 기능을 통해 구글에게 전송한 구글 계정 정보가 유효한지 확인한 후, 유효하다면 해당하는 구글 유저 정보 중 일부를 내 사이트에 제공해 .. 더보기
📝 JWT 토큰(JSON Web Token) 1. JWT(JSON Web Token) JSON 객체를 통해 안전한게 정보를 전송할 수 있는 웹 표준(RFC7519) 2. JWT의 구조 '.(마침표)'를 구분자로 암호화된 세 가지 데이터가 붙어있는 구조 1) 헤더(Header) alg: Verify Signature를 만드는 데 사용된 알고리즘 typ: 토큰의 타입. 이 부분은 언제나 고정값 'JWT' 2) Payload: DATA - 실제로 전달할 정보 - payload는 Base 64로 디코딩 하면 JSON 형식으로 여러 정보들을 포함하고 있음 (이 토큰을 누가 누구에게 발급했는지, 이 토큰이 언제까지 유효한지, 서비스가 사용자에게 이 토큰을 통해 공개하기를 원하는 내용 등) - 특히 토큰에 담긴 사용자 정보 등의 데이터를 claim이라고 하는데.. 더보기