새로운 게임을 시작하고 싶지만, 어떤 게임을 해야 할지 모르는 사람들을 위한 게임 리뷰 공간 🎁
http://whatsyg.com
- 2022.02.03 ~ 2022.04.06
- 개인 프로젝트
- Thymeleaf
- Java 11
- Spring Boot 2.6.3
- Gradle
- Spring Data JPA
- MySQL 8.0
- Lombok
- Spring Security
- OAuth2.0
- AWS (EC2, RDS, S3, CodeDeploy)
- Travis CI
- 회원가입, 로그인, 소셜 로그인
- 리뷰 등록, 수정, 삭제, 추천
- 게임 찜하기
서비스의 핵심 기능은 리뷰 기능입니다.
사용자는 이용 경험이 있는 게임에 리뷰를 등록, 수정, 삭제할 수 있고,
다른 사용자의 리뷰를 추천할 수 있습니다.
핵심 기능 설명 펼치기
프로젝트는 Model2 구조 기반의 MVC 패턴으로 개발하였으며,
객체 지향적인 프로그래밍을 위해 서버 처리 과정을 Controller, Service, Repository로 분리하여 작업하였습니다.
-
입력 체크 📌 코드 확인
- 사용자가 작성한 리뷰를 등록하기 전에 별점과 내용이 입력되었는지 확인합니다.
-
Ajax 비동기 요청 📌 코드 확인
- 사용자는 한 게임에 리뷰를 하나만 작성할 수 있으므로 리뷰 작성 여부를 확인하는 요청을 보내고,
성공적으로 처리되었을 경우 리뷰를 등록하는 POST 요청을 비동기로 날립니다.
- 사용자는 한 게임에 리뷰를 하나만 작성할 수 있으므로 리뷰 작성 여부를 확인하는 요청을 보내고,
- 요청 처리, 결과 응답 📌 코드 확인
- Controller에서는 화면단에서 넘어온 요청을 받고, Service 계층에 로직 처리를 위임합니다.
- Service 계층에서 넘어온 로직 처리 결과를 화면단에 응답해줍니다.
-
리뷰 작성 여부 확인 📌 코드 확인
- 요청 시 전달받은 game_id와 user_id를 조건으로 하여 Review를 조회하고,
기존 등록된 리뷰 여부에 따라 로직 처리 결과를 전달합니다.
- 요청 시 전달받은 game_id와 user_id를 조건으로 하여 Review를 조회하고,
-
리뷰 등록 처리 📌 코드 확인
- 추천수, created_at, updated_at 등의 기본값을 설정해주고 리뷰를 등록합니다.
- 리뷰 수정 📌 코드 확인
- DB에 update 쿼리를 날리지 않고, Entity에 구현한 update 메서드를 호출하여 객체의 값을 변경합니다.
SpringBootApplication 종료 시 발생하는 오류
- 에러 메시지
- Execution failed for task ':server-basic-test:BasicTestApplication.main()'.
> Build cancelled while executing task ':server-basic-test:BasicTestApplication.main()'
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
- Execution failed for task ':server-basic-test:BasicTestApplication.main()'.
gradle
대신IntelliJ
를 사용해서 빌드하고 실행하도록 설정을 변경하여 해결
dependencies 추가 시 compile 키워드 build 오류 문제
- 에러 메시지
- No candidates found for method call compile
- dependencies 추가 시
compile
을implementation
으로 수정하여 해결 gradle 3.0
부터는compile
키워드가deprecated
됨
css, js 파일에 대한 권한이 허용되지 않아 적용이 안되는 문제
- 정적 파일에 대한 security 권한을 허용하여 해결
.antMatchers("/css/**", "/fonts/**", "/images/**", "/js/**", "/sass/**").permitAll()
security 구성 custom 시 configure(http) 호출 오류
- 에러 메시지
- java.lang.IllegalStateException: Can't configure anyRequest after itself
- WebSecurityConfigurerAdapter 클래스의 configure() 메서드를 오버라이딩하며 자동 생성된
super.configure(http)
메서드를 삭제하여 해결
BCryptPasswordEncoder 암호화된 패스워드 비교
- 패스워드 인코더의 matches() 메서드 사용하여 해결
getPasswordEncoder().matches(getPasswordEncoder().encode(user.getPassword()), actUser.getPassword());
세션 저장소를 DB로 변경할 때 발생하는 문제
- DB에 spring session 관련 테이블 생성하여 해결
- spring github의 session schema.sql 파일 참고
JPQL 쿼리 파라미터 name 지정 오류
- 에러 메시지
- org.springframework.dao.InvalidDataAccessApiUsageException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.;
- Preferences(Command + ,) > Build, Execution, Deployment > Compiler > Java Compiler 에서
Additional command line parameters
부분에-parameters
추가하여 해결
FetchType 쿼리 실행시점 지정 문제
- 즉시 로딩이 필요하지 않은 컬럼의 경우, 호출할 때 쿼리를 생성하도록 FetchType을
LAZY
타입으로 지정