반응형 Project80 [코스모스] : 04 : 진도 월요일부터 3일간 학교에서 모여서 회의하고 이슈파고 개발을 진행하고 서로 모르는 부분을 물으면서 보완해 나가는 중이다. 다른 팀원은 지금 데이터 베이스 테이블 설계 후 엔티티 생성과 테스트를 진행하다 마무리를 했고, 또 다른 팀원은 JWT를 적용하기 위해 공부하고 있고, 또 다른 팀원은 잘 하는 팀원이라 다른 사람 코드를 봐주고 있다. 나는 지금 Validation을 진행하고 있다. 아직 JWT가 완성되지 않아 로그인 로직을 보류하고 회원가입 부분 부터 진행 중이다. git flow 전략으로 git을 사용하고 있고 이슈를 파서 처리해 나가는 식으로 프로젝트를 관리하고 있다. 지금 검증 로직이 거의 다 되었고 테스트만 하면 된다. 기능이 완성되면 테스트를 해 보고 나와 가까이서 코드를 본 팀원 1명과 나와.. 2022. 7. 6. [코스모스] : 03 : 회의 오늘 팀 프로젝트가 뭔가 부진해서 오늘 오프라인 만남으로 프로젝트를 진행했다. 간단하게 회의를 진행했고 회의 내용은 앞으로 어떻게 할 것인지에 대한 내용이었다. 결론을 말 하면 앞으로 7일간 무조건 만나서 진행하고 이슈를 사전에 미리 파보기로 했다. 다음 주 화요일에 만나서 데이터 베이스를 짜기로 했다. 2022. 7. 2. [CRUD프로젝트] : thymeleaf list로 값 받아오기 (번외) View에서 List로 값을 뿌려주고 수정한 뒤 값을 받아서 다시 Controller로 값을 가져오는 방법에 대해 적어본다. public class UpdateUserDto { private List updateUserList; }List로 받을 값을 먼저 DTO를 통해 List로 받아준다. List userDtoList = userService.readAllUser(); UpdateUserDto updateUserDto = new UpdateUserDto(); updateUserDto.setUpdateUserList(userDtoList); model.addAttribute("updateUserDto", updateUserDto);전체 유저 정보를 조회한 userDtoList를 위에서 만들어준 Upda.. 2022. 7. 1. [CRUD프로젝트] : create, 유저 등록하기 간단하게 CRUD 프로젝트를 만들었다. 이번에는 만들면서 다시 공부도 해보고 이제 막 Spring을 시작하는 후배한테 알려줄 겸해서 만들고 있다. https://github.com/ohju96/crudTest GitHub - ohju96/crudTest: crud Test crud Test. Contribute to ohju96/crudTest development by creating an account on GitHub. github.com 깃 허브에도 코드를 올려두었다. INSERT INTO USER(id, pw) VALUES (#{userId}, #{userPw}) SELECT COUNT(*) FROM USER WHERE id = #{userId} 매퍼에서는 등록하는 코드와 중복 체크를 위한 코드.. 2022. 6. 30. [코스모스] : 02 : 팀 프로젝트에서 application.properties 관리하기 팀 프로젝트를 관리하는데 application.properties를 깃허브에 올릴 수는 없다. 여기에는 메일 주소나 개인 정보가 들어갈 수 있고 노출되면 안 되는 api key나 중요 정보가 들어갈 수 있어서 숨겨놓고 진행하기로 했다. 여러 방법이 있겠지만 노션에 잠금 페이지를 만들고 해당 페이지에서 service 별로 공유하기로 했다. 간단하게 중요 정보가 없는 부분만 보자면 위 처럼 페이지를 잠궈놓고 안에서 얌 파일을 따로 토글 형식으로 서비스마다 관리하기로 했다. 해당 토글 안에서는 얌 파일 정보가 공유되고 있다. 개인이 작업하면서 얌 파일에 추가 사항이 있다면 풀리퀘를 날리고 노션에 들어와 얌 코드에 본인 코드를 추가하면 다른 사람은 데브 브런치를 풀 받고 application.yml 파일을 업데.. 2022. 6. 27. [코스모스] : 01 : 프로젝트 시작 및 이슈와 기능 구현 오늘부터 본격적으로 팀 프로젝트를 시작하기로 했다. 먼저, git flow 전략을 사용해 버전을 잘 관리하면서 진행하기로 했고 동기가 레포지토리를 팠다. https://ohju96.notion.site/01-323dd1bc3c264f8fb64ca02f51dc72bc 01 기타 ohju96.notion.site 노션 페이지에 회의 기록을 남겨보기로 했다. 첫 회의는 아니지만 오늘부터 회의를 기록해 본다. 먼저, 오늘은 이메일 유틸을 구현했다. 이메일 전송하는 것을 자주 사용해야 하는데 따로 유틸로 빼서 끌어다 사용할 수 있게 구현했다. 테스트까지 완료하고 풀리퀘를 올렸다. 기능을 구현하고 풀리퀘를 날리면서 리뷰어 2명을 선정하기로 했다. 선정 기준은 같이 작업한 사람이 있다면 그 사람 + 같이 작업하지 않.. 2022. 6. 27. [MSA-Test-Project] : gateway 구현해보기 gateway에 각 서비스의 포트를 꼽아 묶어주는 작업을 했다. 여러 예제를 찾아보면서 하고 있었는데 zuul을 사용하려고 하다 이게 지원이 꽤 오래 전에 중단 된 것 같아서 Spring cloud에서 지원하는 gateway로 바꿔주었다. implementation 'org.springframework.cloud:spring-cloud-starter-gateway' build.gradle에 dependencies를 추가해주고 사용할 수 있다. @RestController @RequestMapping("/api/user") public class news { @RequestMapping("/") public String getUser() { return "User Information"; } } 여러 서비.. 2022. 6. 21. [MSA-Test-Project] : MSA, ServiceDiscovery Setting MSA 토이 프로젝트를 간단하게 진행해 보기로 했다. 곧 있으면 팀 프로젝트로 MSA 프로젝트를 진행하는데 적어도 어떻게 구성되고, 데이터가 어떻게 왔다갔다 하는지는 알아야 될 것 같아서 시작했다. implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:3.1.3' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:3.1.3' eureka-client와 eureka-server를 의존성 주입을 받는다. server에 client를 꼽아서 사용하는 느낌으로 보면 된다. 기준이 되는 서비스에 server를 주입받.. 2022. 6. 19. [소경관] : 로직에서 if문 지양하기 도전.. 로직을 짜면서 if문을 남발하다 보니 알아보기 어려운 코드가 되가고 수정하기가 어려워지고 있다. 일단, 로직 자체가 길어지는 문제도 있는 것 같아 줄여보고자 여러 방법을 찾아봤다. 그 중에서 제일 간단한 따로 메소드를 만들어 빼보는 코드를 먼저 구현했다. 사실 이게 맞는지 모르겠지만 일단 뭐라도 해보자는 생각에 함수로 빼는 것을 했지만 다시 enum을 사용해 보는 것을 고려하고 있다. 우선 코드를 적어본다. // 파싱 데이터 뺴기 List list = new ArrayList(); // list에 JSON -> String으로 타입 변경해서 담기 for(int i=0 ; i 2022. 6. 18. [소경관] : 프로젝트 발표와 실패 오늘 프로젝트 발표가 있었다. 마감은 다음주인데 미리 완성한 사람은 먼저 발표하고 통과를 하거나 매를 맞거나 할 수 있는 기회가 있어서 다 완성한 김에 발표를 했는데 결론을 먼저 말하면 실패했다. 처음에 발표 할 때에는 alert를 따로 설정해 주지 않아서 유저 친화적이지 않다는 이유로 빠꾸당해서 오후까지 싹 프로젝트 갈아 엎어서 만들었는데 두 번째 발표 때는 하필.. 문자 API를 보내는 곳에 요금이 다 떨어져서 오류를 터트렸다. 따로 오류 잡아주는 코드가 없어서 실패했고 지금은 restController로 바꾸면서 catch로 오류를 다 잡아준 상태이다. 다음주 월요일에 발표하고 마무리를 하게 될 것 같다. 2022. 6. 17. [소경관] : Spring Boot, Gradle jar 배포하기 오늘은 프로젝트 마무리를 하면서 배포까지 진행했다. 중간에 막히는 부분이 있었는데 아직 코드를 다 정리하지 못 해서 적을 수 없다. 배포하는 방법은 찾아보니 Git을 클론해서 gradle를 빌드해서 사용하는 방법이 보통인 것 같은데 일단 나는 인텔리제이에서 jar로 빌드해서 서버에 직접 넣어 사용했다. 아직 몇 가지 오류를 못 잡았지만, 빨리 해결해서 가능하면 내일 마무리할 예정이다. 2022. 6. 16. [소경관] : 카카오 OCR 사용 카카오 OCR을 사용해서 차량 번호판 인식을 구현하는데 성공하긴 했다. 하지만 이게 약간 편법으로 성공한거라서 애매하다. 아직 로직 정리를 하지 않아서 올리지는 못 한다. 일단 깃 허브에 올려두고 마지막 완성 후에 다시 로직 정리를 할 예정이다. 2022. 6. 15. [소경관] : 인식률 안 좋은 테서렉트 대체 방안을 마련하다. 이미지를 불러와서 차량 번호판을 인식해 해당 차량을 주차 표기해주는 기능에 테서렉트를 사용했는데 인식률이 진짜 너무 안 좋다. 사용을 못 할 정도여서 다른 방안을 찾던 중 카카오 비전 api를 찾았다. https://developers.kakao.com/product/vision Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 역시 카카오에서 미친걸 만들어낸 것 같다. 얼굴 나이 체크부터 별게 다 된다. 이 중에 ocr 기능도 포함이 되어 있는데 한국에서 만든 ocr 기능이다 보니 한글 인식이 좋지 않을까..하는 기대에 개발 문서와 후기를 들여다.. 2022. 6. 13. [소경관] : try / catch문에서 if문 다루기 try { JSONObject obj = (JSONObject) message.send(params); log.debug("### obj : {}", obj); System.out.println(obj.toString()); JSONObject jsonObject = (JSONObject) obj; log.debug("### jsonObject : {}", (JSONObject) obj); log.debug("### jsonObejct - success_count : {}" , (Long) jsonObject.get("success_count")); // TODO: 2022-06-11 alert로 전송 성공 및 실패 결과 띄워주기 // {"group_id":"dkdlelrkqt","success_coun.. 2022. 6. 11. [소경관] : 아이디 찾기 및 RestAPI로 문자 사용하기 및 남은 기능 체크 당장 오늘 코딩한 파일만 봐도 수두룩하다. WBS를 100% 구현해야 한다고 해서 안 만들려던 아이디 찾기를 만들었다. 비밀번호 찾기랑 사실 크게 다르지 않다. 비밀번호 찾기할 때 아이디도 입력 받아서 메일하고 아이디랑 같은 user인지 체크하는 로직을 추가할까 했는데 일단은 돌아가게 만들고 나중에 리팩토링할 때 체크해 볼 예정이다. 그거 말고 위기가 하나 왔는데 프로젝트 평가 내용 중 Open API 사용이 있었다. 나는 API를 사용하긴 했는데 JSON 왔다갔다 하지 않았다고 인정이 안 된다고 해서 방문자에게 양식을 보내는 문자 기능을 RestController를 통해 JSON으로 변환해 받고, 주는 것을 하려고 한다. 일단 JSON 형태로 변환해서 문자를 보내주는 것 까지는 성공했고, 이제 뭐 내역.. 2022. 6. 10. [소경관] : Validator와 공지사항 전파 오늘은 Validator의 헷갈리는 부분을 잡고 공지사항 전파를 구현하면서 적용해 봤다. Validator를 사용하면서 여러 DTO를 한 번에 검증을 받을까 고민을 했지만 따로 하는 게 좋을 것 같다는 답변을 받아 따로 구현해 봤다. 문제는 오늘 공지사항 전파를 구현했는데 email 기준으로 공통 메시지를 보내는 것을 원하고 만들었는데 생각해 보니까 주민을 등록할 때 email을 받지 않았다.. 뭐에 빠졌는지 중요한 것을 깜빡하고 진행해서 오늘 구현한 것들 다 롤백 시켰다. 그리고 email 대신에 문자 api를 사용해서 문자로 전송하는 방안을 고민하고 있다. 일단 문자 api를 제공하는 싸이트에 회원가입하고 key까지 발급 받았다. 문서를 참고해서 내일 문자 기능을 완성시키는 것이 목표다. 2022. 6. 8. [소경관] : 비밀번호 찾기 구현하기 오늘은 비밀번호 찾기를 구현했다. 딱히 찾는다기 보다는 임시비밀번호 설정해서 이메일로 날려주고, JPA로 유저 정보 읽어와서 업데이트 해주는 게 전부인데 JPA로 처음 해 보다보니 빌더나.. 이메일 라이브러리 사용이나.. 익숙하지 않아 찾아보면서 내 프로젝트에 맞게 변경하여 적용하였다. private String address; private String title; private String message; MailDTO에서 메일 주소와 제목, 내용을 담을 파라미터를 만들어주었다. 이메일을 입력해주세요. 임시 비밀번호 전송 View에서는 이렇게 이메일 값을 입력하고 String userEmail = request.getParameter("address"); MailDTO mailDTO = userSer.. 2022. 6. 7. [소경관] : 상세보기 구현하기 오늘은 근무일지의 상세보기를 구현해봤다. 저번에 이렇게 저장 목록(컬렉션 명)을 쭉 리스트로 가지고 와서 뿌려주었는데 여기서 각 목록을 클릭하면 상세보기 가능한 페이지로 이동이 되도록 구현했다. 결과를 먼저 보면 아래와 같다. 이렇게 주차 차량과 미주차 차량을 확인할 수 있다. 먼저 컬렉션 네임을 기준으로 코딩해주었다. 찾아보니까 seq나 리스트 id값을 기준으로 가져와서 url이 이쁘게 /1 /2 /3 /4이렇게 남긴 하던데 나는 그냥 컬렉션 명을 기준으로 해주었다. 위 코드는 근무 일지 목록을 뿌려주는 코드인데 a태그를 넣어 href를 먹여주었다. 경로는 컬렉션 명으로 넣어주어 각 탭에 접근이 가능하도록 해주었다. @GetMapping("/detail/{checkCollectionName}") pub.. 2022. 6. 6. [소경관] : 완료 항목 보기 리팩토링하기 체크를 마치고 완료 항목 리스트를 볼 때 모든 컬렉션 리스트가 아니라 로그인 사용자의 컬렉션 리스트만 보이도록 바꿔주었다. for (String colNm : mongo.getCollectionNames()) { if (colNm == null) { colNm = new String(); } // 컬렉션 명을 _ 기준으로 잘라 String 배열에 담는다. String res[] = colNm.split("_"); // String 배열 중 ID값이 있는 부분과, 세션의 id값을 각 String 변수에 담는다. String result = res[0]; String sessionId = userDTO.getUserId(); // 두 String을 비교하여 같을 시 리스트에 담아준다. if (result.e.. 2022. 6. 5. [소경관] : 로그인 로직 오류 수정 저번에 구현한 로그인 로직에서 오류를 발견했다. 로그인 했을 때 세션 값을 사용하려고 했는데 여러 아이디로 로그인을 해도 세션 값이 갱신되지 않고 있었다. @GetMapping("/session-info") public String sessionInfo(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session == null) { return "세션이 없습니다."; } session.getAttributeNames().asIterator() .forEachRemaining(name -> log.info("session name = {}, value = {}", name, session.getAttrib.. 2022. 6. 4. [소경관] : JPA 회원 탈퇴 구현하기 및 회원 탈퇴 Session 처리하기 기능 중 회원에 관한 기능을 이번 휴일 내로 다 구현하기로 해서 천천히 만들고 있다. 이번에는 회원 탈퇴를 구현해야 하는데 일단, JPA를 사용하는 것이 처음이라 여러 예시를 찾아보고 몇 가지를 테스트한 뒤에 구현하고 성공했다. @GetMapping("deleteUser") public String deleteUserPage() { return "myInfo/deleteUser"; } 먼저 탈퇴 페이지를 보여주는 Controller는 간단하게 만들어주었다. 따로 처리해 줄 필요가 없다. 회원 탈퇴 경고나 재확인 등을 처리하지 않고 바로 페이지에 경고 문구와 함께 클릭 시 바로 탈퇴 처리가 되도록 설정해주었다. 때문에 View에서 뭔가 받아 올 필요는 없고 버튼을 눌렀을 때 바로 회원탈퇴 로직을 타도록 해.. 2022. 6. 4. 이전 1 2 3 4 다음 반응형