프로젝트
-
영속성 컨텍스트 분리로 인한 비밀번호 수정 불가프로젝트/법잘알 2024. 2. 11. 18:10
UserController @PreAuthorize("hasRole('ROLE_USER')") @PatchMapping("/change/password") public ResponseEntity updatePassword( @AuthenticationPrincipal PrincipalDetails principal, @RequestBody ChangePasswordRequestDto request) { userService.updatePassword(principal.getUser(), request.getPassword(), request.getNewPassword()); return ResponseEntity.ok().build(); } UserService @Transactional public v..
-
클린코드와 관심사의 분리프로젝트/법잘알 2024. 2. 4. 14:30
이번 프로젝트를 할 때 이전의 3개의 프로젝트를 보며 느낀점이 있다. 코드가 복잡하고 내가 다시 봐도 이해가 잘 안되는 것이었다. 코드의 중복이 굉장히 많았으며 관심사의 분리도 잘 이루어지지 않아서 service 계층에서 있어야 하는 비즈니스 로직이 컨트롤러에 있는 등 코드도 알아보기 힘들었으며 관심사의 분리도 잘 이루어지지 않았다. 나날이 코드 @GetMapping public GarmentResponseDto Garment(@RequestParam Double temp, @RequestParam Double uv, @RequestParam Double rain, @RequestParam Sex sex) { List outers = garmentService.findOuters(temp, uv, rai..
-
ai 활용 - 텍스트 분석 라이브러리와 생성형 ai의 사용프로젝트/법잘알 2024. 2. 2. 22:29
국회 공공데이터 활용 공모전 공고를 보고 프론트엔드 개발자인 과 동기와 바로 해보자는 얘기가 나왔다.하지만 공고를 늦게 확인해서 시간이 한 달밖에 남지 않았었고, 짧은 시간안에 ai 개발자를 구하기 힘들어서 백엔드 개발자인 내가 동시에 ai까지 구현해보게 되었다. 내가 ai 개발자가 아니기 때문에 유튜브와 구글링, 공식 문서등을 참고하며 개발을 해서 어려운 라이브러리의 코드를 한 줄 한 줄 이해하고 코딩한 것은 아니지만 최대한 원리를 이해하고 사용했다. 요즘은 많은 서비스에 ai 기술을 도입하는데, 백엔드와 ai 간의 호출이 어떻게 이루어지는지도 궁금했었는데 이번 기회에 직접 구현해보면서 백엔드 개발자로서 조금이나마 ai 기술을 이해하게 되었다. chanhee01/LawSearch_AI: 국회 공공데이..
-
스프링 bean 순환참조 에러프로젝트/법잘알 2024. 1. 28. 17:47
like와 suggestion 엔티티가 존재하는데, 프론트엔드 개발자가 suggestion/list에 조회되는 각각의 정책 건의 글마다 로그인된 사용자가 좋아요를 눌렀는지, 안 눌렀는지 상태를 반환해달라고 요청을 했다. public List findAllByUser(User user) { List suggestionList = suggestionRepository.findAllByUser(user); List suggestionIds = suggestionList.stream() .map((suggestion -> suggestion.getId())) .collect(Collectors.toList()); List likes = likeService.likeListBySuggestion(user, sug..
-
인하대학교 SOCIAL IMPACT 해커톤 우수상 - 피료해프로젝트/피료해 2023. 12. 30. 21:01
여름 방학 때 학교에서 해커톤을 진행했지만 관련 포스팅이 하나도 없어서 지금이라도 포스팅을 하게 되었다. 피료해 피료해 서비스는 헌혈이 필요한 사용자가 있을 시 긴급 대응할 수 있도록 만든 어플리케이션이다. 기존에 수혈 관련 어플리케이션이 존재했지만 긴급 상황에 대비할 수 있는 방법이 없었다. 피료해는 실시간 알림 문자 발송을 이용해서 긴급 환자가 발생했을 시 혈액형이 같은 다른 사용자들에게 긴급 문자를 발송한다. 또한, 헌혈의 집 공식 사이트에서 헌혈의 집 위치 데이터를 받아와서 사용자가 회원가입을 할 때 입력한 주소를 기반으로 근처에 있는 헌혈의 집의 정보까지 알려준다. 백엔드 개발자가 나를 포함해서 2명이었고, 서로 같이 백엔드 개발을 했지만 내가 중점적으로 했던 것은 위에서 말한 문자 자동 발송 ..
-
나날이 백엔드 CI-CD 구축의 과정프로젝트/나날이 2023. 11. 20. 22:17
이전 2번의 프로젝트 Trend_Pick, 피료해에서는 수동으로 배포를 했다. ec2 서버에 연결한 다음에 로컬에서 JAR 파일을 보낸 뒤 직접 자바 파일을 실행시켰다. 배포를 한 후에도 계속해서 변경사항이 생겼고, 생길 때마다 ec2 서버에 JAR 파일을 보내고 기존의 실행되는 애플리케이션을 kill 한 다음에 다시 자바를 실행시키는 일이 매우 번거로웠다. 계속 CI-CD를 구축해봐야지라고 생각만 하고 다른거 하기 바빠서 안했었는데 이번에는 시간을 들여서 제대로 해봤다. (물론 계속 안돼서 10시간은 넘게 썼다. 구글링해도 다 달라서 잘 안되더라......) scripts/deploy.sh #!/usr/bin/env bash REPOSITORY=/home/ubuntu/nanali cd $REPOSITO..
-
Get 요청에서는 Body로 데이터를 받으면 안된다프로젝트/나날이 2023. 11. 17. 19:08
@GetMapping public GarmentResponseDto Garment(@RequestBody GarmentRequestDto request) { // 코드 생략 } 처음 설계를 할 때에는 Garment를 조회하는 함수에서 데이터를 받을 때 @RequestBody로 temp, uv, rain, sex등의 데이터를 받았다. postman으로 테스트 했을 때에도 문제가 없어서 괜찮은줄 알았다. 그런데 프론트엔드 개발자에게서 GetMapping을 할 때 body로 통신을 할 수 있냐는 질문을 받았다. 찾아보니 Http Get Method에는 body가 없는게 표준 스펙이라고 했다. 아주 예외적으로 현업에서 파라미터가 너무 많으면 post method를 열어두고 body로 받기는 하지만 선호하는 방식..
-
옷 사진 데이터 설계 방식에 대한 고민프로젝트/나날이 2023. 10. 29. 00:08
이번 프로젝트에서 팀장을 맡게 되었다. 기획자가 따로 없어서 기획자의 역할을 같이 했기 때문에 '나날이' 프로젝트에서 가장 시간 투자를 많이하고 고민을 많이 한 부분이 기획과 백엔드 설계에 대한 방식이다. 그렇기 때문에 기획과 설계에 대한 내용을 정리하려고 한다. 옷 데이터를 저장하는 방법 처음에는 공공데이터를 활용하려고 했으나 생각보다 데이터가 좋지 않아보여서 무신사에서 크롤링을 해서 그 사진들로 추천하는 방식으로 변경하였다. 사진 데이터를 어떻게 저장할지에 대한 고민이 있었다. 옷 사진은 전체 코디 사진, 아이템별 사진으로 저장된다. 옷은 db에 저장해서 필요한 상황에 맞게 select 해오기로 했다. 옷을 저장할 때 저장되는 테이블에는 사진 url과 이름, id라는 기본적인 값과 온도, 강수량, 자..