사이드 프로젝트를 앱스토어에 배포하기로 결정하면서, 애플로그인 구현이 필요하게 되었다. 과정이 생각보다 까다로워서 다음에 구현할 일이 있을 때 삽질하지 않기 위해 기록해둔다. 애플 공식문서에 나와있는 글을 보면, 타사 또는 소셜 로그인 서비스를 사용하는 앱은 특정 기능이 있는 기타 로그인 서비스를 함께 제공해야 한다. (https://developer.apple.com/kr/app-store/review/guidelines/#login-services)뭔말인지 잘 이해 안되는데, 이런 저런 글들을 찾아보니 여튼 소셜 로그인 쓸거면 애플로그인 달아야되는듯 하다. 1. 애플 개발자 사이트에서 애플 로그인에 필요한 설정 하기https://developer.apple.com/account/resources/id..
사이드 프로젝트를 하면서, 카카오 로그인을 구현하게 되어 다음에 또 헤매지 않도록 정리해 둔다.spring security는 사용하지 않고, spring boot 기반으로 구현하였다. 아래는 카카오 개발자 공식 문서에 나와있는 oauth 기반 인증 과정이다.https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api과정을 간단하게 요약해보면,1. 카카오 인증서버로부터 인가 코드를 받는다.2. 받은 코드로 access, refresh Token을 받는다.3. 받은 토큰으로 카카오 유저 정보를 가져온다.4. 유저정보를 이용해 내 서비스에서 로그인/회원가입을 처리한다. (선택) Resource Server - OAuth 2.0 서비스를 제공하고 Resour..
@PostMapping public ResponseEntity saveGame(@Validated @RequestBody GameDto.Request gameDto) { gameService.saveGame(gameDto); return ResponseEntity.status(HttpStatus.CREATED).build(); }위와같이 컨트롤러를 구현한 뒤 postman을 사용해 post request를 요청해 주었는데, 자꾸 데이터가 null로 나오는 문제가 발생했다. 도대체 왜이러나 하면서 빼먹은 부분이 있는지 생각해봤다. 이유는 바로 DTO에 setter가 없었던 것이였다. 데이터를 setter를 이용해 객체를 넣기 때문에 setter가 없으면 값을 할당하지 못해 null이 나오는 것으로 생각..
사용자에게 데이터를 받을 때 DTO의 필드에 ENUM이 존재하는 경우가 있다. ENUM을 이용해 동적쿼리를 작성하는 방법을 알아보자. 자동차를 갖고 있다면 자동차 종류를 ENUM으로 사용해 관련된 쿼리를 작성하고 싶을 수 있다. Mapper.java List selectCars(Car car); Car가 Enum이다. Car.java public enum Car { truck, racing, sport; } Mapper.xml ... ... ... ... 이런식으로 하면 된다. 쌍따옴표와 따옴표는 서로 위치가 바뀌어도 상관없다. name 대신 toString을 사용해도 된다. ENUM은 참고 https://stackoverflow.com/questions/12933813/using-enum-parame..
Mybatis를 사용하면서 Pageable을 사용할수는 없을지 알아보았다. 나도 찾아보기 전까지는 JPA에서만 사용할 수 있을줄 알았는데 그게 아니였다. Mybatis에서 Pageable을 사용하는 과정을 정리해 보았다. implementation 'org.springframework.data:spring-data-commons' JPA를 implementation 하지 않고 위 data commons를 이용하면 Pageable을 사용할 수 있다. 게시글 목록 조회에 Pageable을 적용해 보았다. Service public Page getBoards(Pageable pageable) { ... Page page = new PageImpl(ResponseDtoList, pageable, count); ..
mybatis를 사용하면서 검색을 구현하려다가 like쿼리에서 에러(Parameter index out of range)가 발생했다. 일반적으로 mybatis에서 인자로 받은 변수는 #{변수명}과 같이 사용한다. 이때 저 변수명은 "문자열"로 출력된다. 만약 문자열이 아니라 안의 글자 값 자체를 그대로 사용하고 싶다면 #대신 $를 사용하면 된다. LIKE "%#{param}%" // 오류 발생 LIKE "%${param}%" LIKE CONCAT('%',#{search},'%') ?(preparedStatement) 부분에 인자로 들어온 문자열이 들어간다. 문자열 안에 문자열을 넣어버려서 에러가 발생했다. 검색 그 자체가 바로 들어가는 것을 볼 수 있다. $를 사용할 경우 SQL Injection 공격을..