전체 글 56

[Spring] 댓글과 댓글 수에 대한 처리

※ 본 글은 교재 [코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단]을 바탕으로 작성되었습니다. 🧙‍♂️ 안녕하세요 코딩법사입니다. 이어서 게시판 프로젝트의 댓글 처리입니다. 게시판을 사용할 때 보면, 제목 옆에 댓글 수가 뜨는 것을 심심치 않게 볼 수 있습니다. 이번 포스팅에서는 그 부분을 만져줄 것입니다. 그렇다면 먼저 댓글 수를 의미하는 칼럼을 추가해야 합니다. alter table tbl_board add (replyCnt number default 0); 그리고 기존에 댓글이 존재했다면 replyCnt에 반영해야 하기 때문에 update를 사용한 쿼리를 실행합니다. update tbl_board set replyCnt = (select count(rno) from tbl_reply wher..

Backend/Spring 2024.03.08

[Spring] AOP와 트랜잭션(@Transactional)

※ 본 글은 교재 [코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단]을 바탕으로 작성되었습니다. AOP 기능은 주로 일반적인 Java API를 이용하는 클래스들에 적용합니다. Controller에는 인터셉터나 필터 등을 이용하고, 서비스 계층에 AOP를 적용할 것입니다. 서비스 계층의 메서드 호출 시 모든 파라미터들의 로그를 기록하고 메서드들의 실행 시간을 기록하겠습니다. 실습 1. 예제 프로젝트 생성 및 설정 2. 서비스 계층 설계 Service 인터페이스와 ServiceImpl를 생성합니다. ServiceImpl는 문자열을 변환해서 더하기 연산을 하는 단순 작업으로 작성합니다. 작성 시에는 반드시 @Service라는 어노테이션을 추가해 스프링에서 빈으로 사용될 수 있도록 설정합니다. 3. Adv..

Backend/Spring 2024.03.08

[Error 스프링] Junit 테스트 시 java.lang.NoClassDefFoundError 오류 해결

java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig AOP를 공부하던 중 @Test를 돌렸는데 위와 같은 오류가 계속 떴습니다. 이는 스프링에서 서블릿 API를 읽지 못해 발생하는데, 이는 라이브러리가 누락되었거나, 존재한다고 해도 런타임 시 라이브러리를 읽지 못할 때 발생합니다. 그래서 pom.xml 파일에 서블릿과 관련된 코드를 확인해 보아야 합니다. 저 같은 경우는 xml 파일에 서블릿 라이브러리가 존재했지만 런타임 때 라이브러리를 읽지 못하는 케이스였습니다. 이 때는 서블릿 버전 3.1 이하에서는 SessionCookieConfig 클래스를 찾지 못하기 때문에 서블릿의 버전을 업그레이드 해 주어야 합니다. 결론 1. 서블릿 API가..

Error 2024.03.07

[Spring] AOP에 대하여

※ 본 글은 교재 [코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단]을 바탕으로 작성되었습니다. AOP는 관점 지향 프로그래밍이라고 번역할 수 있습니다. 이 때 '관점'은 '관심사(concern)'로 생각하면 의미를 이해하기 좀 더 쉽습니다. 관심사는 개발자가 코드를 작성하면서 어떤 것에 염두를 두는 것인데, 1. 파라미터가 올바르게 들어왔는지 2. 이 작업을 하는 사용자가 적절한 권한을 가진 사용자인지 3. 이 작업에서 발생할 수 있는 모든 예외는 어떻게 처리해야 하는지 위의 고민들을 하면서 코드에 반영하는 것입니다. AOP는 이런 관심사들을 분리합니다. 관심사가 핵심이 되는 비즈니스 로직은 아니기 때문입니다. 그래서 관심사를 사전 조건이나 사후 조건이라고 간주하면 됩니다. 개발자가 작성한 코드와..

Backend/Spring 2024.03.07

[Spring] 댓글 처리(REST와 Ajax...스압주의)

※ 본 글은 교재 [코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단]을 바탕으로 작성되었습니다. REST 방식을 가장 많이 사용하는 형태는 브라우저나 모바일 App 등에서 Ajax를 이용해서 호출하는 것입니다. Ajax( Asynchronous JavaScript and XML)란, 비동기적인 웹 애플리케이션의 제작을 위해 다음과 같은 조합을 이용하는 웹 개발 기법입니다. *비동기적이란 어떤 작업이 순차적으로 실행되지 않고, 다른 작업과 독립적으로 병행적으로 실행될 수 있는 것을 말합니다. - 표현 정보를 위한 HTML과 CSS - 동적인 화면 출력 및 표시 정보와의 상호작용을 위한 DOM, 자바스크립트 - 웹 서버와 비동기적으로 데이터를 교환하고 조작하기 위한 XML, XSLT, XMLHttpRe..

Backend/Spring 2024.03.07

[Error 스프링] JSON parse error: Unrecognized token

JSON parse error: Unrecognized token '???': was expecting ('true', 'false' or 'null'); 스프링에서 REST 방식을 다루던 중 Controller 파일에 메서드를 적고 서버 구동 후 REST 테스트 프로그램에 경로를 입력했는데 에러가 나버렸습니다. 콘솔을 확인해 보니, JSON parse error: Unrecognized token '???': was expecting ('true', 'false' or 'null'); 이런 에러 메시지가 떠 있는 것이 아니겠습니까('???'는 사용자마다 넣는 값이 다르므로 나오는 값도 다릅니다). 해당 에러 메시지는 JSON 파서가 "???"라는 토큰을 인식할 수 없다는 것을 나타냅니다. 보통 이런 오..

Error 2024.03.06

[단축키] Windows 단축키 모음집

유용하게 쓰이는 키보드 단축키입니다. 동작 키 텍스트 전체 선택 Ctrl + A 복사 Ctrl + C 붙여넣기 Ctrl + V 잘라내기 Ctrl + X 실행 애플리케이션 전환 Alt + Tab 탭 닫기 Ctrl + W 새 탭 열기 Ctrl + T 새 브라우저 열기 Ctrl + N 북마크 추가 Ctrl + D 저장 Ctrl + S 다른 이름으로 저장 Ctrl + Shift + S 뒤로 가기 Ctrl + Z 앞으로 가기 Ctrl + Y 페이지 확대 Ctrl + + 페이지 축소 Ctrl + - 현재 페이지 인쇄 Ctrl + P 방문 기록 Ctrl + H 다운로드 기록 Ctrl + J 단어 검색 Ctrl + F / Ctrl + G 진하게 Ctrl + B 기울임꼴 Ctrl + I 밑줄 긋기 Ctrl + U 커서 ..

etc 2024.03.06

[Spring] MyBatis의 페이징 처리

※ 교재 [코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단]을 바탕으로 작성되었습니다. MyBatis는 SQL을 그대로 사용할 수 있기 때문에 인라인뷰(In-line View)를 이용하는 SQL을 작성하고 필요한 파라미터를 지정하는 방식으로 페이징 처리를 하게 됩니다. 인라인뷰는 SELECT FROM(SELECT FROM)으로 이해하면 됩니다. 페이징 처리를 할 때는 SQL을 실행할 때 몇 가지 파라미터가 필요합니다. 1. 페이지 번호(pageNum) 2. 한 페이지 당 띄울 데이터 개수(amount) 이것들을 별도의 파라미터로 전달할 수도 있겠지만, 아싸리 하나의 객체로 묶어 전달하면 확장성면에서 좋습니다. domain 패키지에 Criteria(검색 기준) 클래스를 생성합니다. @Getter //..

Backend/Spring 2024.03.05

[Spring] 의존성 주입 테스트

※ 교재 [코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단]을 바탕으로 작성되었습니다. 스프링의 개념과 특징들을 알아보았습니다. 그럼 이제 스프링의 가장 큰 특징인 의존성 주입 기능을 작성하고 테스트해 보겠습니다. 사용할 클래스: Restaurant.java / Chef.java * Restaurant 클래스에 Chef 클래스를 주입할 것입니다(Restaurant 클래스가 Chef 타입의 객체를 필요로 함). 왜냐하면 식당에 요리사가 있어야 장사를 할 수 있기 때문이지요. 스프링에서 의존성 주입을 구현하는 방법은 총 두 가지입니다. 1. 생성자를 이용한 주입 2. Setter 메서드를 이용한 주입 설정 방식은 주로 XML 또는 어노테이션(@)으로 처리합니다. 0. pom.xml에 라이브러리 추가 예..

Backend/Spring 2024.02.26

[Spring] 스프링의 개념과 특징 총정리

※ 본 글은 교재 [코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단]을 바탕으로 작성되었습니다. 프레임워크 프레임워크란 뼈대나 근간을 이루는 코드들의 묶음을 말합니다. 그렇다면 이것이 필요한 이유는 무엇일까요? 개발자 특성상, 개인의 능력 차이가 큰 직종이기 때문에 개발자 구성에 따라 프로젝트의 결과는 큰 차이를 낳는데 이 부분을 극복하기 위해 프레임워크가 필요합니다. 프로그램의 기본 흐름과 구조를 정하면 팀원들이 이 구조에 맞게 자신이 만드는 코드를 추가하여 개발하게 됩니다. 라이브러리도 마찬가지로 미리 만들어져있는 기능이기는 하지만 개발자가 그 흐름을 직접 결정합니다. 프레임워크의 장점은 구조를 미리 코드로 만들어 놓았기 때문에 이미 시작이 반입니다. 일정한 품질이 보장되는 결과물을 얻고 개발 ..

Backend/Spring 2024.02.22