작성하는 내용은 저의 주관적인 의견이 반영된 내용입니다. 1. Service class에서 return 값을 DTO 객체 대신 특정 값으로 보내기(int 등) 기존에 코드를 작성했던 방식 Service 코드 중 일부 /* 채팅방 생성 */ public CreateRoomSuccessDto createRoom(RoomDto roomDto) { // Dto -> Entity Room room = roomDto.toRoom(); // save db try { room.setRoomId(roomReqDto.getRoomId()); // Assign a value to the ID field manually roomRepository.save(room); } catch (Exception e) { throw ne..
0. 기본 조건 채팅은 일대일로 이루어진다. (일대다는 현재 고려하지 않음) A가 채팅방을 나간 경우, B는 대화 내용을 확인할 수 있다. 모든 채팅 데이터는 database에 저장된다. 챗봇이 응답하는 대화 내용 역시 채팅 데이터로 저장해야 한다. 1. 설계 1-1. 시나리오(기존에 채팅 내역이 존재하지 않는 경우) 브라우저(사용자-멘티): 멘토를 선택한 뒤, 대화 시작 버튼을 누른다. 클라이언트: roomId(UUID 사용), menteNickname, mentorNickname 정보를 json 형식으로 담아서 서버로 채팅방 생성 요청(POST 요청) 전송 서버: 채팅방 생성 요청을 받아 새로운 채팅방을 생성하고 db에 저장한다. 서버: 방 생성이 정상적으로 완료되었다는 응답을 클라이언트로 보낸다(만..
오류상황 Spring Boot 테스트 코드를 작성한 뒤, 전체 테스트 코드를 통합 테스트 할 때 아래와 같은 오류 메시지가 발생하였다. TokenRepositoryTest 해당 class를 단독으로 test할 때는 오류가 발생하지 않았으나, 전체 클래스를 통합 테스트 할 시에는 위 사진과 같은 오류가 발생함. 내가 생각한 오류 원인 TokenRepositoryTest class 이전에 AuthServiceTest.class 에서 이미 refresh_token table을 생성하고 데이터를 넣은 뒤 Rollback시킨다(@Transactional). 하지만 table에 적용된 Auto Increment 값은 이미 1에서 2로 증가한 상태라, TokenRepositoryTest에서 row 2개를 insert..
오류 상황 JwtTokenProvider에서, application-jwt.properties 파일에서 jwt.secret.token 값을 가져오도록 코드를 작성하였으나, 해당 값을 불러오지 못하였음 JwtTokenProvider 코드 중 일부 생성자에서 JWT_SECRET_TOKEN_KEY 값을 가져오지 못하는 상황. @Slf4j @RequiredArgsConstructor @Component public class JwtTokenProvider { private SecretKey JWT_SECRET_TOKEN_KEY; public JwtTokenProvider(@Value("${jwt.secret.token}") String tokenKey) { byte[] accessKeyBytes = Decode..
Line, 카카오톡, Slack, facebook 등 기존의 메신저 서비스와 연동하지 않고, 팀 프로젝트에서 ChatBot API를 사용하기로 하였다. 후보는 크게 세 가지였음. AWS: Amazon Lex Google Dialogflow NCP Chatbot 이 중 NCP Chatbot을 선택한 이유는 다음과 같다. Amazon Lex의 경우 레퍼런스가 많이 없다. Google Dialogflow의 경우 Node.js에서는 Google Credentials 인증이 편리한데, 스프링 부트의 경우 인증 절차가 너무 복잡하였다. 따라서 NCP Chatbot을 선택함. NCP Chatbot 1. NCP 계정을 생성한다 네이버 계정과 연동하였음. 2. Console에서, NCP Chatbot 사용 시작하기를 누..
Spring Boot 프로젝트에서 회원가입 및 로그인 이후 JWT 토큰을 사용해서 인증/인가 절차를 수행하려고 하는데, 해당 절차를 간단히 정리하고자 한다. 인증 vs 인가 인증: 유저가 누구인지 확인하는 절차, 회원가입하고 로그인 하는 것. 인가: 유저에 대한 권한을 허락하는 것. 인증 이후의 프로세스 HTTP의 stateless 특징 웹 사이트는 HTTP 통신 위에서 동작한다. 따라서 웹 사이트 내의 모든 요청과 응답은 stateless한 특성을 가진다. 즉, Stateless 구조에서 서버는 단순히 요청이 오면 응답을 보내는 역할만 수행하며, 상태 관리는 전적으로 클라이언트에게 책임이 있는 것이다. 즉, 클라이언트와 서버간의 통신에 필요한 모든 상태 정보들은 클라이언트에서 가지고 있다가 서버와 통신..