팀프로젝트를 하면 프로젝트 완성을 위해 작업에 대한 세분화된 계획과 개발 일정을 세우고 작업 진척도를 서로 공유하고 알 필요가 있다. 먼저 프로젝트 방법론을 정해야 하는데 프로젝트 방법론은 크게 애자일과 워터풀 방식이 있다. 애자일 방식은 짧은 기간내에 프로젝트를 빠르게 완성시킨 후 점진적으로 프로젝트를 개선시켜 고객의 니즈를 점진적으로 충족시켜 준다. 그러나 워터풀 방식은 정해진 기간 내에 완벽한 설계안으로 점진적으로 개발해 나아가서 프로젝트를 완성시킨다. [ 애자일 방식과 워터풀 방식 ] 팀프로젝트를 할 때 우리 팀은 애자일 방식으로 하였다. 왜냐하면 온라인 옷 쇼핑몰이라는 도메인을 처음 접했기 때문에 개발해 나가면서 언제든지 설계안을 수정할 수 있었기 때문이다. 그래서 철저한 계획을 세워 프로젝트를..
Git Branch 전략과 컨벤션을 정하고 팀 프로젝트를 진행했다. [Git Branch 전략] 기능 개발을 진행할 때 develop 브랜치를 기준으로 feature 브랜치를 만들어서 기능개발을 완료 기능 개발한 feature를 develop 브랜치에 Pull Request를 하고 코드리뷰를 진행한 후 develop 브랜치에 merge merge를 한사람씩 하여 업데이트된 develop 브랜치를 각각의 feature 브랜치에서 develop브랜치를 rebase하고, develop에 merge하여 깃 히스토리를 관리 [Git 컨벤션] 커밋 타입은 [태그: 제목] 형식 태그는 영어로 쓰되 첫 문자는 소문자 태그로는 feat, fix, docs, style, refactor, test, chore 를 사용 ..
JWT 인증 방식 적용1. SecurityConfiguration 수정시큐리티 Form Login 방식에서 JWT 인증방식으로 변경하려면 SecurityConfig에서 FormLogin방식과 HttpBasic 인증방식을 disable 해야 한다.그리고 JWT를 사용하는 이유 중 하나인 session 유지를 비활성화한다. [ httpBasic().disable 이유 ]HttpBasic 인증 방식은 request 헤더에 Authorization 키 값에 Basic 뒤에 사용자 아이디, 패스워드를 base64로 인코딩해서 전송하여 인증하는 방식이다. base64 방식은 누구나 쉽게 복호화할 수 있어서 HttpBasic 인증 방식을 사용하지 않는다. 사용하더라도 아이디 패스워드를 암호화해서 전송되도록 HTTPS..
코드 리팩토링 전 아래 코드는 회원가입시 email 중복 체크를 하는 서비스 기능이다. email 파라미터로 member 객체를 가져오지 못하면 "사용 가능한 이메일 입니다." 메시지와 success 필드에 true를 넣어서 프론트에서 분기 처리를 하였다. 만약 member 객체를 가져오면 "이미 사용중인 이메일 입니다." 라는 메시지와 success 필드에는 false를 넣어 응답한다. 위 코드가 지저분한 이유는 try catch 로 인한 에러 처리와 emailCheckResponse를 3군데서 build() 하기 때문이다. try catch를 서비스 에서 사용하지 않으려면 GlobalException을 사용해야 한다. GlobalException은 @ExceptionHandler와 @Controlle..
Build Tool : Gradle Spring Booot Version : 2.7.6 Spring Security Version : 5.7 DB Version : MySQL 5.7 DB 연동 : MyBatis Gradle 빌드툴 사용하였고 SpringBoot 2.7.6으로 스프링 시큐리티5 버전의 세팅이다. DB연동은 MyBatis이다. 1. 빌드 추가 implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' testImplementation 'org.springframework.security:spring..
스프링 시큐리티 첫 적용하면서 뻘짓하며 시간을 날려먹은거에 대한 기록입니다. 1. custm login폼 사용시 name 설정 스프링 시큐리티는 로그인폼을 커스텀하여 사용하면 기본폼에서 사용하던 아이디가 username이 아닐수 있다. 나는 email을 사용해서 input태그도 아래 처럼 변경하였다. 하지만 로그인시 호출되는 매개변수 String email 값이 절대로 안넘어 오는 것이 었다. 그 이유는 스프링 시큐리티는 input 태그의 name이 꼭 username 이어야 위 파라미터 값을 가져오는 것이였고 간단하게 설정하려면 input type의 name만 username만 바꿔도 되지만 찜찜해서 email로 꼭 바꾸고 싶었다. 변경방법은 filterChain에서 formLogin 설정에서 user..
아래 Controller를 만들고 CreateAddressRequest 클래스에 boolean isDefault 필드를 만들어서 RequestBody 매핑을 시키려 하였다. 하지만 Postman 전송 시 "isDefault" 값을 아무리 true로 던져도 값은 false로 받아지고 이름도 isDefault가 아닌 default로 이름이 바뀌어있었다. 문제는 자바 클래스에서 boolean 필드는 앞에 자동으로 is를 붙여준다는 점이었다. 그리고 boolean 필드는 앞에 이름 get을 붙이지도 않는다. 앞에 is만 붙는다 여기서 이름의 혼선이 생겨 문제가 있었고 해결하기 위해 앞에 is를 빼고 이름을 바꿨다. 이름을 바꿨더니 잘 매핑이 된다.
Mock이란 어떤 행동을 했을 때 어떤 결과값을 줄 건지 정의한 가짜 객체를 뜻하며, Mockito는 Mock을 이용하여 테스트 코드를 작성할 수 있게 해주는 프레임워크이다. 아래 AddressController 파일이 있고 그 안에는 addrSave() 함수로 주소를 저장하는 Service 함수가 실행된다. @RestController @RequiredArgsConstructor public class AddressController { private final AddressService addressService; @PostMapping("/v1/members/{id}/address") public AddressResponse addrSave(@PathVariable("id") Long memberI..
Swagger는 API 문서를 생성하고 관리하는 도구인 API Docs 이다. Swagger가 springfox, springdocs 2종류가 있는데 springfox는 업데이트가 중단돼서 현재는 springdocs만 사용되고 있는 중이다. springfox를 사용해도 되긴 한데 springboot 버전 2점대에서만 사용 할 수 있다. springdocs는 그게 2버전으로 나뉘는데 1.x, 2.x 버전으로 나뉘는데, 1.x 버전은 springboot 버전 2.x 버전에서 사용되고 2.x 버전은 springboot 버전 3.x 버전에서 사용된다. 각 최신 버전은 아래 URL에서 확인할 수 있다. 1.x 버전 공식 문서는 URL : https://springdoc.org/v1/ 2.x 버전 공식 문서 URL..