- 1인 개발
- 개발 기간 : 23.11 ~ 24.06 (실개발 2달반)
- 잃어버린 물건의 주인을 찾아주는 게시판 형태의 분실물 서비스 입니다.
- AWS(EC2, RDS, S3)환경으로 배포했습니다.
- JAVA : 17
- Spring Boot : 3.1.5
- JPA
- MySQL
- QueryDSL
- Thymeleaf
- 게시판 CRUD
- S3에 이미지 저장
- Session 방식 로그인
- QueryDSL 사용한 검색 기능
- WebSocket을 활용한 1:1 채팅 기능
- 관리자 페이지
- Pagination 적용으로 Post 10000개 기준 단위 시간 감소 50s -> 0.18s
- Interceptor를 활용해 비로그인 시 페이지 접근 제한
- AOP를 사용해, 16개 method 중복 코드 제거
- BDDMockito를 사용한 단위 테스트 작성
- WebSocket을 이용한 실시간 1:1 채팅 기능이 로컬에선 정상작동되지만, 운영환경에선 동작하지 않음.
-
// chattingJSScript.html let socket = new WebSocket("ws://" + [[${url}]] + "/ws");
-
# application-prod.yml websocket: url: wanna-find.com
-
# application-local.yml websocket: url: localhost:8080
- WebSocket은 hop-by-hop 프로토콜이기 때문에, Nginx에서 적절한 헤더를 추가해주어야 했음.
- WebSocket 핸드셰이크는 HTTP 업그레이드 기능을 사용해 호환할 수 있다.
-
//nginx.conf server { server_name wanna-find.com www.wanna-find.com; # managed by Certbot ... location /ws { proxy_pass http://localhost:8080/ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; ... } ... } - HTTP 버전은 1.1이상 이어야 하며,
Upgrade header와Connection header를 명시해주어 수신하는 웹서버가 해당 요청이 WebSocket 요청임을 알 수 있게한다.
- 아래와 같은 추가적인 문제 발생
-
Mixed Content: The page at 'xxx' was loaded over HTTPS, .. - HTTPS 사이트에서 HTTP 사이트 요청 시 발생하는 보안 문제
- WebSocket 생성시
wss가 아닌ws여서 발생한 문제같다. - header에 아래 코드 추가해서 해결
-
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
- Controller에서 로그인 유저 객체를 사용하는 상황
- AOP를 사용해 Session에 저장된 loginUser 객체를 model에 전달
- 포인트컷을 통해 AOP 적용 범위를 제한
- 결과적으로, 총 16개 method의 중복 코드를 제거
- Member 객체 삭제시 error 발생
-
Cannot delete or update a parent row: a foreign key constraint fails cascade
- 다른 테이블에 해당 데이터를 참조하고 있는 외래키가 있어서 발생했다고 판단
- 연관관계의 부모에
cascade = CascadeType.ALL, orphanRemoval = true을 모두 추가 - 결국 실패
- JPQL로 쿼리를 날려서 delete한 것이 원인이었다. 그러면, cascade가 적용안된다.
em.remove를 통해 삭제해줘서 해결

