분류 전체보기 142

[디자인패턴] MVC, MVP, MVVM 개념과 비교

자바로 프로젝트를 할 때 가장 많이 사용했던 패턴이자 가장 유명한 패턴은 MVC패턴이었다. 그런데 MVC패턴 말고도 여기서 파생된 다른 패턴들이 있다. 오늘은 MVC, MVP, MVVM 패턴의 개념을 정리하고 비교해보기로 한다. MVC (Model+View+Controller) Model : 모델은 애플리케이션의 데이터와 비즈니스 로직을 담당한다. 데이터베이스와 상호 작용하거나 데이터를 조작하는 작업들이 이곳에서 처리된다. View : 뷰는 사용자에게 데이터를 시각적으로 표현하는 부분으로, 주로 사용자 인터페이스를 담당한다. 사용자의 입력을 받아 컨트롤러에 전달하거나 모델로부터 받은 데이터를 사용자에게 보여준다. Controller : 컨트롤러는 사용자 입력을 받아 해당하는 모델을 호출하고, 결과 데이터..

[JavaScript] input type=file 파일업로드 ajax로 전송하기

썸네일 업로드 기능을 구현하던 중에 문제가 발생했다. (또...) 썸네일 컬럼은 상품 게시글 테이블 내에 있었고, 이미지 업로드시 이미지 정보가 들어가는 테이블은 따로 만들었다. 그리고 이미지 테이블은 id, 파일명, 파일경로 (파일경로+uuid+파일명) 컬럼으로 이루어져 있다. 어제 구현한 대로 이미지경로+썸네일컬럼 으로 썸네일을 가져오기 위해서는 이미지 테이블에 있는 uuid+파일명이 필요했다. 그래서 아래 쿼리를 사용하여 이미지를 가져오는 것에는 성공했지만, 문제가 있었다. 이미지가 로컬에 업로드되고 db에 저장되는 것보다 쿼리가 먼저 실행되어 파일명을 찾지 못하는 것이었다. 이 친구도 썸머노트 이미지 업로드처럼 글 등록 버튼을 누르기 전에 비동기로 파일을 먼저 전송하면 될 것 같았다. 파일업로드 ..

Study/JavaScript 2023.07.13

[Spring Boot] 스프링부트 이미지 외부경로 설정하기

프로젝트에 상품 리스트 게시판을 만들었는데, 카드 형식으로 썸네일을 보이게 만들었다. 글 작성시 썸네일을 선택하면 메인화면에서 보이는 형식... 그리고 컨트롤러에서 enum파일에 있는 IMGPATH (=/img/)경로를 가져와 model.addAttribute로 전달해주었다. 그렇게 전달받은 경로+썸네일 파일명으로 로컬에 저장된 파일을 가져오려 했으나........ 정상적으로 이미지가 로컬경로에 저장되고 db에도 파일명이 잘 들어갔지만 게시글 업로드 후 리스트에 들어가보면 이미지가 엑박으로 나옴 -> 서버를 재실행하면 정상적으로 보임 이라는 문제가 생겼다... 찾아보니 타임리프에서 외부경로를 사용하지 않고 static폴더 내부에 있는 경로를 사용하면 이미지 변경사항이 바로 반영되지 않는다고 한다. 그럼 ..

Study/spring 2023.07.12

[JavaScript] JS파일 코드 변경사항이 반영되지 않는 문제

프로젝트를 진행하면서 생각보다 머리아프게 하는 부분이 자바스크립트의 변경사항이 제대로 반영되지 않는 문제였다. 이번 프로젝트에서는 게시글 CRUD부터 회원가입까지 AJAX를 사용해서 /api 경로로 넘겨주는 방식을 사용하는데, 새로 함수를 추가하거나 오타 등을 수정하거나 했는데 제대로 반영되지 않아 버튼을 눌러도 반응이 없거나 고치기 전 코드 내용으로 에러를 뱉곤 했다. 기존에 자바스크립트의 ajax를 불러올 때는 버튼의 id명을 통해 ajax를 실행시키는 방식이었다. 그래서 따로 js파일 경로를 가져와서 매핑할 필요는 없었다. 하지만 계속 변경사항이 제대로 반영되지 않아서 구글링을 했고... ajax가 들어있는 js파일의 경로를 입력해서 매핑한 후, 경로 뒤에 ?ver=버전명 을 사용해서 새롭게 캐시를..

Study/JavaScript 2023.07.08

[Spring Data JPA] Spring Data JPA의 구조와 흐름

Spring JPA로 프로젝트를 진행하면서 여러 자료를 참고하면서 기능을 만들고 있었지만, 어떤 흐름으로 기능이 동작하는지 확실히 알아두고 싶어서 간단하게 정리해보기로 한다. Spring Data JPA란? Spring Data JPA는 Spring 프레임워크에서 Java Persistence API (JPA)를 지원하는 기술이다. JPA는 자바 개발자들이 관계형 데이터베이스를 사용하는 애플리케이션을 개발하기 위한 표준 스펙이며, Spring Data JPA는 이를 더 편리하게 사용할 수 있도록 Spring의 기능과 통합한 것이다. Spring Data JPA의 구조 엔티티 클래스(Entity Class) JPA는 객체와 데이터베이스 간의 매핑을 위해 엔티티 클래스를 사용한다. 엔티티 클래스는 데이터베이..

Study/spring 2023.06.29

[Spring] No identifier specified for entity 에러

프로젝트 중 코멘트 뷰의 모양이 잘 나왔는지 서버를 켰는데 해당 에러가 발생했다. Spring문자도 뜨고 잘 실행되는 듯 하였으나 에러가 떴다. 어떤 문제인지, 왜 나는 것인지 확인해보았다. import org.springframework.data.annotation.Id; Entity 코드에 import를 이렇게 해놓아서 난 에러였다... 해결 방법은 import javax.persistence.Id; 이렇게 import를 바꿔주면 된다. : )

Study/spring 2023.06.27

[Git] Stash, Stash pop 사용하기

열심히 코드를 짜다가 슬슬 커밋을 하려던 때.... 어 git bash를 안켰었네 나는 다른 브랜치에서 작업중이었는데, 여기서 바로 Git pull origin main 을 해버리면 지금까지 썼던 것들이 그냥 날아가버린다.... 이럴 때 사용할 수 있는 것이 Stash 명령어이다. Stash를 사용하면 현재 진행중이던 내용들을 언제든지 저장해두고 다른 브랜치로 이동하여 작업한 뒤에 다시 돌아와 복구하여 작업을 계속할 수 있다. 나같은 경우가 아니더라도 A브랜치에서 작업하던 도중 급한 수정사항 등이 생겨 B브랜치로 옮겨가거나 할 때 사용하면 좋을 것이다. 그럼 사용법을 알아보자. 먼저 로컬저장소로 이동한다. (cd 경로 or 저장소 폴더에서 우클릭- git bash here 클릭) git stash 이 명..

[JPA] Error: 1364: Field 'id' doesn't have a default value 오류 해결

프로젝트를 진행하며 테스트코드를 작성하고 실행했는데 해당 에러가 발생했다. 열심히 찾아보니 자바 entity와 DB의 table이 일치하지 않아서 발생하는 문제라고 한다. @GeneratedValue(strategy = GenerationType.IDENTITY) 나는 id를 자동으로 생성하는 전략을 사용했고, spring.jpa.hibernate.ddl-auto=update ddl은 update로 작성해서 당연히 DB에도 반영될거라고 생각했지만...반영되지 않았다. 그래서 결론 : 직접 Auto Increment를 체크해주니 테스트가 잘 진행되었다.

Study/spring 2023.06.20

[Git] Git Bash 브랜치 사용법 + pr(Pull Request)하기

이번 프로젝트에서는 기능별로 브랜치를 분리해서 푸시할 예정이기 때문에 브랜치에 대해서도 공부한다. 기본적인 회원이 있는 게시판 create sql문을 만들었는데, sql브랜치를 생성해서 그쪽으로 푸시할 예정이다. 가보자고~~ 브랜치란? 브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념이다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 진행할 수 있다. 기본 branch는 main이고 다른 branch를 이용해 개발을 진행하고 병합하면 된다. 브랜치 기능을 사용하여 main 브랜치만을 관리하는 것이 아닌 여러가지 브랜치를 생성하여 다양한 방향으로 버전관리가 가능하다. 브랜치 생성 및 이동 먼저 내가 지금 어느 브랜치에 있는지 확인해보자. git bra..

[Git] Git Bash 사용법

이전 프로젝트를 진행할 때는 인텔리제이에서 git을 연동해 푸시하는 방식을 사용했었다. 이번에는 깃의 명령어를 더 잘 익히고자 Git Bash를 사용하기로 했다. 먼저 Git Bash를 사용해서 유저 정보 설정, 커밋, 푸시하는 방법을 올려본다. git bash를 실행한 첫 화면이다. 유저 정보 등록 유저 이름과 메일주소를 설정한다. git config --global user.name [유저이름] git config --global user.email [메일주소] *Git의 설정 범위는 아래와 같이 3가지이며 일반적으로 이름과 이메일은 global로 설정한다. 지역(local): 특정 저장소에만 한정되는 설정 전역(global): 현재 사용자의 모든 저장소를 포함하는 설정 시스템(system): 해당 ..