1.개발 진행 및 완료상황
- application.properties와 build.gradle을 설정
- 데이터베이스와 Spring Boot와의 연결 작업
- 본격적인 코딩작업 시작
2. 업무, 개발 중 발생한 이슈
There was an unexpected error (type=Internal Server Error, status=500).
java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
리플렉션 기능이 parameter를 인식을 못하고 있다... 개인정보를 확인하는 메소드에서 String user_id 참조했는데 이런 문제가 발생했다.
3. 해결과정
@RequestParam("user_id") String user_id로 수정하니 user_id가 바인딩이 되었다.
그런데
회원가입을 하는 과정에서 또 오류가 생겼다. user_id가 primary key로 설정되어 있는데 처음에 메소드를 실행할때 user_id가 없으니 발생하는 문제였다. 이를 해결하기 위해 jsp파일에 hidden타입도 넣어보고 Mapper파일에서 @Param이노테이션을 써서 참조하게했지만 그래도 같은 상황이 반복되었다. 지금 이 글을 작성하면서 다시 생각해보니 애초에 회원가입이 되어있지 않은상태니 당연히 user_id가 없고 RequestParam을 해도 null인 상태여서 오류가 발생할 수 밖에 없었다.
따라서
@RequestParam(value="user_id", required=false)
과 같이 required=false 속성을 추가하여 해당 필드와 쿼리스트링이 존재하지 않아도 예외가 발생하지 않게 하여 해결하였다.
4.레퍼런스
@RequestParam :: Spring Framework
Method parameters that use the @RequestParam annotation are required by default, but you can specify that a method parameter is optional by setting the required flag of a @RequestParam to false or by declaring the argument with a java.util.Optional wrapper
docs.spring.io
6.회고
프로젝트를 시작할때 규모를 명확히 잡고 들어가는 것이 중요한 거 같다. 예상보다 데이터베이스 작업에 시간이 많이 걸렸고, 이에 더하여 중간에 기능을 더 추가하는 과정이 있다보니 결과적으로 소요된 시간에 비해 구현한 기능이 다양하지는 않았다.
특히 이력서와 채용공고부분에 이미지파일을 삽입할수있도록 하게 하고 싶었는데 그 부분이 좀 아쉬움으로 남는다. 데이터베이스에는 파일이름과 파일 경로만 저장하고 spring boot에서 서버에 파일을 BOLB데이터 형식으로 저장하여 구현하면 되긴 하는데 현재 우리 프로젝트의 진행속도로는 이것까지 포함시키기에는어려움이 있어 제외시켰다.