본문 바로가기

Spring

Edge 케이스를 고려한 단위 테스트 다양한 Edge 케이스 고려해 보기 입력 가능한 모든 케이스를 고려해 보기 Edge 케이스 발견 후 처리방법 Edge 케이스에 대해 개발자가 독단적으로 방향을 결정하는 것보다는, 관련 담당자(들)과 협의 진행 후 결정합니다. 관련 담당자: 관련 개발팀, 기획자, 디자이너, QA 예를들면, 에러 발생으로 결정 정확한 에러문구 필요 (문구의 통일성, 글로벌 서비스의 경우 번역 고려) 부적절한 문구의 예: "헐.. 빈 문자열을 입력하시면 레알 멘붕!!" 빈 문자열 허용 DB 에는 빈 문자열 ("") UI 에 표시할 때는 "알 수 없음" 으로 표시 → 프론트엔드 개발 필요 빈 이미지 허용 UI 에 대체 이미지 표시 → 디자이너, 프론트엔드 개발 작업이 필요 Edge 케이스를 고려한 코드 수정 Edge 케이스 처.. 더보기
유닛 / 통합 / 기능 테스트 1. 유닛 테스트(Unit Test) == 단위 테스트 - 하나의 *모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트 👉🏻 메서드 같이 작은 단위를 테스트, 하나의 모듈을 기준으로 진행된다는 것은 하나의 클래스를 기준으로 독립적으로 진행할 수 있게하면 유닛 테스트로 볼 수 있는 거겠지? 모듈(module): 프로그램을 구성하는 구성 요소로, 관련된 데이터와 함수를 하나로 묶은 단위 특징 - 테스트 중심 개발(TDD) 시 작성하게 되는 테스트 코드가 유닛 테스트(=단위 테스트) 강점 - 어디에서 문제가 발생했는지 빨리 파악할 수 있어 디버깅 시간을 단축시켜줌 - 일부 의존 대상은 스텁이나 모의객체 등을 이용해서 대역으로 테스트함 2. 통합 테스트(Intergaration Test) - 단위 테스.. 더보기
JWT 로그인 구현 로그인 정보를 Server 에 저장하지 않고, Client 에 로그인정보를 JWT 로 암호화하여 저장 → JWT 통해 인증/인가 모든 서버에서 동일한 Secret Key 소유 Secret Key 통한 암호화 / 위조 검증 (복호화 시) JWT 장/단점 장점 클라이언트에 로그인 정보를 저장하기 때문에 동시 접속자가 많을 때 서버 측 부하 낮춤 Client, Sever 가 다른 도메인을 사용할 때(CORS 문제) 예) 카카오 OAuth2 로그인 시 JWT Token 사용 단점 구현의 복잡도 증가 JWT 에 담는 내용이 커질 수록 네트워크 비용 증가 (클라이언트 → 서버) 기생성된 JWT 를 일부만 만료시킬 방법이 없음 Secret key 유출 시 JWT 조작 가능 JWT 사용 흐름 Overview Clien.. 더보기
OAuth2를 이용한 소셜 로그인 - 카카오 API 1. 필요성 1) 모든 웹 사이트에서 회원 가입 과정을 거치며 웹사이트마다 다른 아이디와 비밀번호를 기억해하므로 사용자에게 부담이 됨 2) 웹사이트 운영측에서도 회원들의 개인정보를 지켜야 하기때문에 보안 강화를 위한 노력이 지속적으로 필요하게됨 3) 이런 문제를 해결하기 위해 OAuth를 사용한 소셜 로그인 등장!! 2. OAuth - 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준 - 사용자가 애플리케이션에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 프로토콜 OAuth를 사용하는 서비스 제공자는 대표적으로 .. 더보기
스프링 빈 생명 주기(Spring Bean Life Cycle) 보호되어 있는 글입니다. 더보기
스프링 빈 생명 주기(Spring Bean Life Cycle) 기본 개념 빈 (Bean): 스프링이 관리하는 객체 스프링 IoC 컨테이너: Bean(객체)을 모아둔 저장소이자 빈 관리 -> 객체의 생명주기(Life Cycle)인 생성과 소멸 관리, 객체 간 의존성 주입 등 @Bean 어노테이션의 주요 내용 @Configuration 설정된 클래스의 메소드에서 사용가능 메소드의 리턴 객체가 스프링 빈 객체임을 선언함 빈의 이름은 기본적으로 메소드의 이름 @Bean(name="name")으로 이름 변경 가능 @Scope를 통해 객체 생성을 조정할 수 있음 @Component 어노테이션을 통해 @Configuration 없이도 빈 객체를 생성할 수도 있음 빈 객체에 init(), destroy() 등 라이프사이클 메소드를 추가한 다음 @Bean에서 지정할 수 있음 // .. 더보기
Controller, Service, Repository의 역할 Controller 클라이언트의 요청을 받음 요청에 대한 처리는 서비스에게 전담 클라이언트에게 응답 Service 사용자의 요구사항 처리(비즈니스 로직) DB정보 필요 시 Repository에게 요청 Repository DB관리(연결, 해제, 자원 관리) DB CRUD 처리 더보기
Controller와 HTTP Request 메시지 Controller HTTP Sample Request 어노테이션 생략 Sample Code @PathVariable X GET http://localhost:8080/hello/request/star/BTS/age/28 @RequestParam O GET http://localhost:8080/hello/request/from/param?name=BTS&age=28 O POST http://localhost:8080/hello/request/form/param Header Content type: application/x-www.form-urlencoded Body name=BTS&age=28 @ModelAttribute O POST http://localhost:8080/hello/request/fo.. 더보기