본문 바로가기

spring

[일경험 / oracle] 프로시저 활용한 조회수 기능 구현 ✅ 프로시저를 구현하게 된 계기  일경험 프로그램에서 게시판 기본적인 기능 구현을 마친 뒤 새로운 기능을 하나 추가하는 과제를 진행하게 되었다.  바로 데이터베이스에서 비즈니스 로직을 수행할 수 있는 프로시저 기능을 활용하여 조회수를 카운트하는 기능이었다.  ✅ 프로시저가 뭔가? 프로시저프로시저는 PL/SQL 을 통해서 만들어짐.데이터 베이스 내에서 실행 가능한 저장된 프로그램프로시저는 SQL 쿼리와 제어구조를 포함할 수 있으며 데이터 베이스의 복잡한 작업을 수행하는 데 사용됨.프로시저는 코드의 재사용성, 유지 보수성, 성능 향상, 보안 등을 위해 사용됨.특징저장된 프로그램 : 프로시저는 데이터베이스 내에 저장. 한 번 작성된 후 여러번 호출할 수 있다.파라미터로 입력값을 받을 수 있고, 출력값을 반환받.. 더보기
[ Spring / Spring Boot ] 스프링 인터셉터 활용하여 인가작업 처리하기 ✅ 인터셉터를 활용하게 된 배경  게시판 프로젝트를 혼자서 공부하면서 만들던 중 드디어 로그인 이후 사용자의 요청을 구분해야하는 시기가 다가왔다!  로그인한 사용자들은 게시글 작성, 수정, 삭제 등을 할 수 있어야하고, 로그인하지 않은 사용자들은 게시글 조회 등의 작업을 할 수 있다.  그렇게 되면 게시글 작성, 수정, 삭제 로직마다 세션을 확인해서 세션을 갖고 있는 사용자인지 확인을 하는 로직을 아마 매번 넣어야할텐데매요청마다 이러한 로직을 작성하는 것은 코드의 중복을 초래한다.  이를 위해 따로 메서드를 작성하여 해당 메서드를 컨트롤러 단에서 처리할 수 있겠지만그러한 *공통 관심사는 다른 방법으로 해결하는 것이 바람직할 것 같다는 생각이 들었다.   사실 나는 부트캠프에서 프로젝트를 진행하면서 항상 .. 더보기
spring / mybatis 파일 업로드 게시글 저장 시 파일 업로드@Override public int insertBoard(BoardListDto dto) throws Exception { log.info("serviceImpl dto = {}", dto); BoardListDto board = BoardListDto.builder() .title(dto.getTitle()) .content(dto.getContent()) .files(dto.getFiles()) .uploadFileUrl(dto.getUploadFileUrl()) .commentCnt(dto.getCommentCnt()) .userId(dto.getUserId()) // 로그인한 // 이름 저장 .build(); log.info(.. 더보기
[ Spring Boot / thymleaf ] spring mvc 2 검증 내용 정리 ✏️ 오늘 새롭게 알게 된 내용 메모 타임 리프에서 map 을 꺼내는 코드 전체 오류 메시 Safe Navigater operator ?. : errors 가 null 이면 무시하라는 로직 등록 폼에 진입한 시점에는 errors 가 없다. 따라서 errors.containsKey 를 호출하는 순간 NullPointerException이 발생한다. errors?. 는 errors 가 null 일 때, NullPointerException 가 터지는 대신 null 을 반환하는 문법이다. th:if 에서 null은 실패로 처리되기 때문에 오류메시지를 출력하지 않는다. 이는 spring EL이 제공하는 문법이다. 필드 에러 처리 방법 1 ) 상품명 상품명 오류 방법 2 ) classappend 사용 상품명 상품.. 더보기
[Spring MVC] MVC 패턴 구현해보기 / Adapter 패턴 / 유연한 컨트롤러 구현 유연한 컨트롤러 1 - v5 여러가지 방식의 컨트롤러를 혼용하여 사용하고 싶을 경우! 어떻게 해야할까? 어댑터 패턴 지금까지 만들었던 컨트롤러는 한 가지 방식의 컨트롤러 인터페이스만 사용할 수 있다. ControllerV3, ControllerV4 는 완전히 다른 인터페이스인데... 따라서 호환이 불가능하다는 단점이 있다! 이럴때 서로 호환이 되도록 도와주는 것이 바로 어댑터이다. 어댑터 패턴을 사용하여 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 변경해보자. 핸들러 어댑터 : 중간에 어댑터 역할을 하는 어댑터가 추가되었는데 이름이 핸들러 어댑터이다. 여기서 어댑터 역할을 해주는 덕분에 다양한 종류의 컨트롤러를 호출할 수 있다. 핸들러 : 컨트롤러의 이름을 더 넓은 범위인 핸들러로 변경했.. 더보기
[Error] Execution failed for task ':ServletApplication.main()'.> Process 'command '/Users/gangminhui/Library/Java/JavaVirtualMachines/corretto-17.0.9/Contents/Home/bin/java'' finished with non-zero exit value 1 평온하게 개발 공부를 하던 중 에러가 발생했다. 갑자기 왜 애플리케이션을 작동시키지 못하는 것인가? 왜 빌드 실패를 하는 가? Execution failed for task ':ServletApplication.main()'. > Process 'command '/Users/gangminhui/Library/Java/JavaVirtualMachines/corretto-17.0.9/Contents/Home/bin/java'' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. >.. 더보기