본문 바로가기

분류 전체보기

(189)
[JavaScript] Ajax에 대해 (JQuery) Ajax(Asynchronous Javascript And Xml) Ajax를 이용하면 전체 페이지를 새로고침하지 않고도 페이지의 데이터를 서버와 클라이언트 간 통신할 수 있다. 이를 비동기 처리라고 하며 예를들면 우리가 사용하는 댓글 기능도 비동기 처리 방식이다. Ajax는 JavaScript의 라이브러리이며 그중 JQuery는 Ajax에 관련된 여러 편리한 기능들을 제공해주는 프레임워크이다. 그래서 보통 Ajax는 JQuery와 함께 사용하게된다. 예시 - JQuery를 사용하지 않는 Ajax 구문 (순수 자바스크립트) // This function gets invoked when server sends the response function reqListener (e) { console.log(e...
[MYSQL] 정렬된 행 중간에 새로운 행 삽입과 삭제하기 프로젝트의 DB 구현 중 정렬된 행 사이에 새로운 행을 삽입하거나 삭제해야 하는 기능의 구현이 필요했다. 예를 들어 위와 같은 테이블에서 일련번호가 꼬이지 않게 하면서 점심식사와 낮잠 사이에 행 간식 행을 넣으려고 한다. 우선 정렬할 기준 필드로 일련번호를 삽입할 rowNo 필드를 생성했다. AUTO_INCREMENT로 필드를 만들면 기본키이기 때문에 중간삽입같은 정렬에 사용할 수 없어서 직접 로직을 작성하여야 한다고 생각했다. INSERT INTO schedule (planNo, userId, startDate, descript, planDay, rowNo) VALUES ('1', 'member1', '2021-05-10', '숙소 도착', '1', (SELECT COUNT(*) FROM schedul..
[Spring] JUnit 단위테스트 요령 개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드, 웹 환경에서는 컨트롤러를 통해서 해당 기능을 실행할 수 있다. 이러한 방법은 준비 실행 과정이 너무 오래걸리고, 반복 실행하기 어렵고, 여러 테스트를 한번에 실행하기 어려운 단점이 있다. 그렇기 때문에 자바는 JUnit이라는 프레임 워크로 테스트를 실행해서 이러한 문제를 해결한다. public class MemoryMemberRepository implements MemberRepository { private static Map store = new HashMap(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++s..
[Spring] Gradle build 중 JDK Version 문제 해결 김영한님의 스프링 인강을 보고 따라하는데 명령 프롬프트에서 gradlew build 명령어를 입력하면 계속 저 오류가 떴다. 내용은 즉 Java11로 빌드해야하는데 지금 세팅이 JDK 8에 물려있다고 하는거 같다. 구글에 검색해서 블로그부터 Q&A사이트 , Gradle doc 등등 찾아봐도 해결되지 않았다. 이클립스에서 인텔리J로 갈아타보고, 환경변수 세팅, 레지스토리 세팅, 자바 컨피그 세팅, IDE 세팅, JAVA 재설치 등등 할 수 있는 모든걸 다했는데도 안고쳐졌다. 최후의 방법으로 그냥 기존에 사용하던 Java1.8을 싹다 지워주었다. 그랬더니 해결됐다. 덕분에 오늘 반나절을 날려보냈다. 올바른 해결방법은 아닌 것 같아, 기존의 프로젝트들의연동이나 설정이 어떻게 꼬일지는 모르겠지만 일단 해결됐으니..
[Spring] 'POST' not supported 에러 Spring으로 연습용 게시판을 구현하는 프로젝트를 작업하다가 댓글 작성 기능 테스트 중 아래와 같은 에러를 만났다. 컨트롤러와 View단에서 코드를 잘못 짜서 생긴 오류 같은데 아무리 살펴봐도 데이터를 주고받는 부분에서는 잘못된 부분을 못 찾았다. 긴 시간 삽질 끝에 문제를 해결했다. 넣은 기억도 안나는 post 호출 코드 한 줄이 엉뚱한데 들어가 있다. 단순한 구문 오류였다. 해당 부분을 지워주니까 댓글이 잘 작성된다. 오류중의 대부분은 단순 오타나 구문 오류 같은 실수인 거 같다. 에러가 났을 때 이를 상기하는 습관을 들여놓으면 더 빠르게 해결할 수 있을 것 같다. (나머지 에러의 주범은 메이븐..) 위와 같은 HTTP Method 에러가 발생 했을 때는 view와 controller 사이에서 전송..
이클립스 와 깃 연동시 .gitignore가 적용 안되던 문제 이클립스와 git 연동 시 불필요한 로컬 파일도 같이 올라가서 개인 컴퓨터 환경이 노출되거나 필요치 않는 파일이 같이 올라가서 문제가 생길 수 있다. 이를 해결하기 위해 .gitigore로 룰을 만들어서 git이 특정 파일을 track하지 않게 할 수 있는데 문제는 정보는 많고 제대로된 해결책을 찾기가 힘들다. 여러 번 삽질을 해야했다. 우선 gitignore파일은 적당히 구글에 검색해서 찾거나 만들 수 있다. www.toptal.com/developers/gitignore gitignore.io Create useful .gitignore files for your project www.toptal.com 위와 같은 사이트에서 키워드를 입력해서 만들 수도 있다. 생성된 텍스트 파일의 이름을 .gitig..
디버그 시 System.out.println()을 사용하지 않는 이유 System.out.println은 예제 프로그램 등 간단한 것에는 무관하나, 실제로 사용자가 있는 프로젝트 환경에서는 사용을 지양하여야 한다. 표준 프레임워크 퍼스트북에 설명이 나와있다. System.out.println()을 호출하게 되면 디스크 I/O 동기화 처리가 되기 때문에 전체적인 시스템의 성능이 저하 될 수 있고, System.out.println() 으로 디버그 처리한 부분을 일일이 주석처리, 해제하는 것은 개발 및 운영의 효율을 떨어트릴 수 있다. 이해가 안되서 더 찾아보고 정리해보았다. System.out.println()으로 디버그 정보를 출력하면 인자 값만 출력해준다. 최소한의 로그 정보가 없다는 것이다. 로깅 라이브러리(log4j, slf4j 등)를 사용하면 날짜/시간/로그 생성자..
[Spring] DI를 사용하는 이유 종속성 때문에? 그걸 해결하기 위해 인터페이스와 추상화가 있는게 아닌가 → 기존의 자바 프로그래밍 방식은 코드에 의존성이 강하다. // Programmer.java class Programmer { private Coffee coffee; public Programmer() { this.coffee = new Coffee(); } public startProgramming() { this.coffee.drink(); // 일단 마시고 시작하자 ... } } 위 startProgramming 메소드를 호출하기 위해선 Coffee 클래스를 사용하여야 한다. 이 때 Coffee 클래스가 수정되면 Programmer 클래스도 수정되어야 한다. 즉 결합도(coupling)가 높다. 이점은? Unit Test가 용..