본문 바로가기

반응형

분류 전체보기

(124)
로그인 테스트 (T-001) 폼 로그인 필터를 이용해 로그인 기능을 구현했다 이때 authentication 객체 안에는 유저 네임과 패스워드가 들어가 있다 일반적인 동작 방식은 다음과 같다 1. 유저는 서버에 로그인 페이지를 요청해 이에 해당하는 뷰정보를 받는다 2. 뷰에 담겨있는 폼에 알맞은 내용을 채우고 이를 서버에 전송한다 3. [post] login에 해당하는 핸들러가 이를 처리한다 이번 프로젝트의 경우 스프링 시큐리티가 알아서 해준다 하지만 우리 프로젝트에서는 프론트가 없어 아래와 같은 문제가 발생한다 1. 폼 정보가 없어 직접 프론트에서 [post] login 요청을 보낼 수 없다 2. swagger에 [post ]login 요청이 노출되지 않아 이를 확인 할 수 없다 이를 해결하기 위해 생각한 방법은 2가지가 있다 1..
이메일 회원가입 기능 - 3 (T-001) 이번 포스팅에서는 메일 전송에 대해 알아보겠습니다 실제 메일을 전송하기 위해서는 smtp를 지원해주는 혹은 직접 구현해서 설정을 잡아 주어야 합니다 저는 제가 사용하고 있는 지메일 계정을 이용해서 설정했습니다 이렇게 설정을 잡아두면 javaMailsender 라는 객체에 스프링이 알아서 의존성을 주입해 줍니다 따로 구현할 내용도 없고 그냥 이미 존재하는 메소드를 이용하여 이메일을 전송 할 수 있습니다
2022년 2월 23일 T-001 개발 일기 오늘로 T-001 프로젝트 시작한지 3일차 아마 오늘은 프로젝트 시작 이후 코드 생산에 사용한 시간이 제일 적은 날이다 노느라 그런건 아니구, 몇가지 이슈가 있었다 1. 체력 문제 3일 총 수면 시간이 8시간으로 매우 적었다(만 2일?) 보통 졸리면 커피를 들이부어 버텼는데 오늘은 정말 너무 졸렸다 원두를 다 갈아서 직접 드립으로 내려 마시는데(우리 집에는 장비가 다 있다) 원두 한 봉지를 거의 다 마셔간다... 5시쯤에는 너무 졸려서 그냥 잤다 2. 구현 난이도 오늘 메인은 로그인이었다 이 기능은 하나만 된다고 동작하는게 아니라 이 뒤로도 뭔가 쭉쭉 나와야하는 기능들이 있고, 구현 방법도 다양해서 구상에 시간이 많이 필요했다 그냥 강의 들으면서 코드 복붙하는건데 무슨 난이도가 있냐 할 수 있는데, 나도..
이메일 회원가입 기능 - 2 (T-001) 폼을 유저에게 내려주는 부분은 스킵하도록 하겠습니다 유저가 폼에 정보를 채워서 post요청을 보냈을때의 구현을 해보겠습니다 파라미터에 @valid 어노테이션을 활용하여 먼저 유효한 입력인지 확인해줍니다 이후 올바른 정보라면 서비스 레이어로 데이터를 내려줍니다 서비스 레이어에서는 엔티티 객체의 빌더 메소드를 활용하여 해당 객체로 빌드합니다 다음으로 레포지토리의 save 메소드를 호출하여 객체를 저장합니다 일련의 과정은 모두 트랙잭션으로 처리되어 올바르게 디비에 반영됩니다 이제 토큰을 생성하여 유효한 계정인지 체크해주어야 합니다 이 과정 역시 서비스 레이어에서 해결하겠습니다 저의 경우 엔티티 객체 안에 토큰을 발행하는 메소드를 제작하여 해당 메소드를 호출해서 스트링 형태의 토큰을 만들었습니다 하지만 이 경우..
이메일 회원가입 기능 - 1 (T-001) 이메일을 이용해 회원가입 기능을 구현하겠습니다 먼저 회원 가입 기능은 아래와 같은 순서로 진행됩니다 1. 유저가 회원가입을 요청하면 회원가입 폼을 내려줍니다 2. 유저는 내려받은 회원가입 폼에 정보를 입력하고 해당 폼정보를 리턴합니다 3. 리턴받은 폼정보를 validate합니다 4. 만약 유효한 폼정보라면 이를 바탕으로 회원가입을 진행합니다 4-1. 폼정보를 이용하여 디비에 유저를 등록합니다 4-2. 디비 데이터에 토큰정보를 발행합니다 4-3. 유저가 입력한 이메일로 메일을 전송합니다 이때 발행한 토큰 정보와 함께 서버에 접속 할 수 있는 링크를 유저에게 보냅니다 4-4. 유저가 메일로 받은 링크를 클릭하게 되면, 링크에 포함된 토큰값과 디비에 저장된 값이 일치하는지 확인하여 검증합니다
swagger 도입 (T-001) T-001 프로젝트는 단기간에 완성을 해야하는 관계로 프론트까지 개발할 여력이 없습니다... 따라서 swagger를 도입하여 브라우저 단에서의 api 테스트를 해결하기로 결정하고 도입하였습니다 io.springfox springfox-boot-starter 3.0.0 위처럼 스타터 디펜던시를 추가해주면 되어 간편합니다 별도의 설정 없이 바로 swagger에서 제공해주는 api로 접속이 가능합니다 하지만... csrf에 막혀 post 메소드가 전부 리젝되는 문제가 발생합니다 이를 해결하기 위해 아래와 같은 class 하나를 제작합니다 public class CsrfRequireMatcher implements RequestMatcher { private static final Pattern ALLOWED_..
validation 구현하기 - 3 (T-001) 주의 이 시리즈는 일주일 조금 넘는 기간 동안 블로그 주인이 밤새 작업하면서 쓰는 글입니다 정확하지 않은 내용이 포함 될 수 있고, 끝내지 못 할 수 있습니다 이전 포스팅에서는 직접 제작한 폼 객체에 어노테이션을 활용하여 validation을 구현하였습니다 이후 컨트롤러에서 파라미터로 해당 객체로 데이터를 받을 때, @valid 등의 어노테이션을 활용하여 validate이 동작해야 하지만 그렇지 않는 상황입니다... 현재 상황 파악 중 입니다... 2/22일 현재 정상적으로 동작하는 것을 swagger를 통해 확인하였습니다 단위 테스트에서 정상적으로 동작하는지 다시한번 확인해보고 상태를 업데이트 하겠습니다
isassignablefrom vs instance (T-001) 하이버네이트 TypeDescritor를 제작할 때 특이했던 부분이라 이렇게 포스팅합니다 TypeDescritor에서 unwrap시에는 isassignablefrom을 사용하고, wrap할때는 instance를 이용합니다(예시) 이때 unwrap은 자바 객체를 데이터로 변활 할 때 사용되고, wrap은 그 반대의 경우 사용됩니다 인터넷 서칭 결과 instance는 컴파일 타임에, isassignablefrom은 런타임에 동적으로 사용 될 수 있다고 합니다 아무튼 예시의 소스코드에서는 메소드 파라미터로 class를 받는지, 아닌지에 따라 용도를 구분하는 것 처럼 보였습니다 하지만... 까짓거 뭐 레포지토리에 save 한번 호출해서 객체를 데이터로 매핑 한번 해주고, find 한번 호출해서 데이터를 객체로 매..
validation 기능 구현 - 2 (T-001) 주의 이 시리즈는 일주일 조금 넘는 기간 동안 블로그 주인이 밤새 작업하면서 쓰는 글입니다 정확하지 않은 내용이 포함 될 수 있고, 끝내지 못 할 수 있습니다 이제 직접 제작한 validator 클래스를 테스트 해 보겠습니다 먼저 테스트 하려는 객체는 컴포넌트임으로 springBootTest 어노테이션을 활용하여 테스트 클래스를 제작합니다 이후 적당한 테스트 로직을 생성하고, validator 클래스의 validate 메소드를 호출하여 스프링 Errors안에 들어있는 에러 정보를 활용하여 결과를 확인합니다 하지만 validate 메소드에 넘겨주어야 하는 인터페이스는 직접 구현하기 정말 힘듭니다(너무 많은 메소드가 있습니다...) 따라서 아래와 같은 방법으로 구현하면 편리합니다 Errors errors =..
validation 기능 구현 - 1 (T-001) 주의 이 시리즈는 일주일 조금 넘는 기간 동안 블로그 주인이 밤새 작업하면서 쓰는 글입니다 정확하지 않은 내용이 포함 될 수 있고, 끝내지 못 할 수 있습니다 프론트쪽에서 입력한 폼정보가 백엔드로 넘어 왔을 때, 우리는 특정한 객체에 해당 정보를 담아 받아 볼 수 있습니다 이때 사용하는 객체를 커맨드 객체라 부르고 이번 시리즈에서는 이 커맨드 객체를 validation해보도록 하겠습니다 아래와 같은 작업을 진행하면 쉽게 문제를 해결 할 수 있습니다 1. 커맨드 객체를 제작 2. 해당 커맨드 객체를 validate할 validator 객체를 생성, 스프링 validator를 implements 합니다 이때 오버라이드하는 메소드는 총 2가지 입니다 1. supports 메소드 이미 우리는 바로 전 시리즈인 ..

반응형