자바 개발자 취업을 위한, 학습 순서 👉blog.hongparkedu.com/웹-개발자-취업을-위한-비전공-백엔드-학습-순서 자바 프로그래밍 입문 서적 👉product.kyobobook.co.kr/detail/S000001743842 강의 정리 시, 출처와 링크를 꼭 남겨주세요🙏 (저작권 위반 이슈를 방지하기 위함입니다)
혹시 data.sql이 불러와지지 않는 분들 계시면 제가 구글링 해서 찾아본 내용으로 해보시면 어떨까 싶어서 남겨봅니다. application.properties에서 spring.datasource.data=classpath:/data.sql를 spring.sql.init.data-locations=classpath:data.sql로 바꾸고 spring.datasource.initialization-mode=always를 spring.sql.init.mode=always로 바꿔보니 data.sql문이 잘 불러와졌습니다. 이제 막 배우는 중이라 정확한 이유는 모르겠지만 찾아본 곳에서 말씀해주시길 스프링부트 2.7 이상부터는 이렇게 작성해서 사용한다고 하네요.
홍팍님 게시글을 삭제할 때 해당 게시글에 댓글이 있으면 FK 때문에 에러가 나는데 게시글이 삭제 됐을 때 해당 게시글에 있는 댓글까지 같이 삭제되게 하는 방법이 스프링 부트 자체에서 따로 존재 하는 건가요 ? Jpa의 cascade 속성을 쓰면 된다고 하는 것 같긴 한데 주의해야 할 사항들이 좀 있더라구요 이런 경우에 cascade 속성을 써서 해결이 가능 한 건지 궁금합니다.
=== JPA의 캐스캐이딩을 사용하여 게시글 삭제와 동시에 하위 댓글을 함께 지울 수 있을까요? === Yes === 해당 기능이 스프링 부트 자체에 따로 존재하는 건가요? === No - 해당 기능은 DB에서 제공합니다. "sql delete cascade" === JPA 캐스캐이딩 사용시 주의점이 있을까요? === JPA는 이러한 캐스캐이딩 옵션을 어노테이션으로 줄 수 있습니다. "jpa remove cascade" 주의점으로 "삭제" 대상 또는 그 하위 엔티티가 여러 엔티티에 걸쳐 연관된 경우 사용해선 안됩니다. "jpa remove cascade 주의사항"
@@hongpark 답변 감사합니다. DB를 아직 제대로 공부해보지 않아서 이런 부분에서 좀 약하네요 몇 가지 더 궁금한 점이 있는데 CascadeType.REMOVE를 사용하면 부모가 삭제될 때 자식도 삭제된다고 하는데 CascadeType 옵션은 부모 쪽에서 지정해줘야 부모가 삭제 될 때 자식도 같이 삭제 되는거 아닌가요 ?? 강의에서는 @ManyToOne로 Comment에서 매핑을 했으니 Article엔 @OneToMany 어노테이션이 없어서 Cascade 옵션을 추가할 수가 없는데 Entity 클래스의 구조를 바꿔야 되는 걸까요? 아니면 자식 쪽에서도 Cascade 옵션을 지정하여 부모와 같이 삭제되게 할 수 있는지 궁금합니다.
=== CascadeType Remove 옵션은 부모 쪽에서 지정해야하는데, 엔티티 연결 구조를 바꿔야할까요? === A. Remove 옵션을 줘서 물리적 삭제(hard delete)를 해야한다면, 질문주신대로 엔티티의 연결 구조를 바꿔야합니다. B. 구조의 변경 없이 처리하는 방법으로 논리적 삭제(soft delete)도 있겠습니다. delete flag를 두고 삭제된것으로 보이게 마킹함으로써 실 DB 삭제로 인한 FK 제약조건을 회피할 수 있습니다.
안녕하세요 홍팍님..! 11:00 에 나온 설정으로 서버를 돌려 댓글 작성하기를 하면, SQL Error: 0, SQLState: 23505 org.postgresql.util.PSQLException: 오류: 중복된 키 값이 "comment_pkey" 고유 제약 조건을 위반함 이라는 문구로 에러가 뜨는데요ㅠ (h2로 했을때는 문제없이 잘 돌아갑니다.) 찾아보니 무결성 위반으로, 동일한 데이터key가 이미 존재하기에 발생하는 에러라 하는데 갑자기 왜 이러는거죠?ㅠㅠ(해결방법도 잘 모르겠습니다..)
댓글을 작성하면, 어느 게시물에 달던지 " Detail: (id)=(1) 키가 이미 있습니다. " 라고 뜨고, 댓글 등록 실패 알림창을 끄고 또 다시 댓글 작성버튼을 누르면 id값이 1씩 계속 증가합니다. 더미데이터에서 댓글 id를 9까지 넣어줘서인지, id=10일때부터는 댓글 작성이 잘 되는데요, 어떻게 해결핤 ㅜㅇ있을까요?
안녕하세요 홍팍님. 국비과정 수강중에 강사님 스프링부트 이해가 힘들어서 찾아보다가 앞의 무료강의 듣다가 회원결제로 여기까지 열심히 듣고 있습니다. 질문이 있어서 댓글 남겨요. Q1. 솔직히 돌아보면, 지금은 그냥 클론만들기 처럼 따라쓰는 정도인데(+약간의 이해? 잡힐 듯 말듯...), 다 듣고 반복해서 홍팍님 강의를 돌리는게 나을까요? 아니면 무언가를 더 해야할까요...? Q2. 그리고 저는 Oracle DB를 사용했었는데요. Oracle MySQL PostgreSQL 중에 이게 실무에서 더 많이 쓰인다라는게 있나요? 그리고 강의 잘 듣고 있습니다. 감사합니다.
= 1회차 학습 = 처음에는 클론코딩하듯 따라쳐본다 = 2회차 학습 = 다음번엔 내가 홍팍이다 생각하고 셀프 강의롤 해본다 = 3회차 학습 = 앞서 배운 내용을 가지고 나만의 웹서비스를 만들어본다 = 더 나아가기 = 다음 두 가지 학습을 추천 "JPA"와 "스프링 시큐리티"
안녕하세요 홍팍님 DB를 MySQL로 연동했는데, 그 이후로 RepositoryTest를 통과하지 못하네요 실제로 데이터가 있음에도 불구하고 테스트에서 findByArticleId()나 findByNickname()가 null 값을 반환합니다. 웹 브라우저를 통해서 /api/articles/{articleId}/comments로 직접 접속하면 데이터가 화면에 띄어지는건 확인됩니다. 데이터베이스를 연동했더니 테스트가 실패하는 이유가 궁금합니다
오류 메시지connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "postgres" 이것이 계속뜨는데 해결할 방법 없을까요? 분명히 제대로 비밀번호 입력했는데도 뜹니다
Postgres설치 후 서버 안에 테이블 들어가는 과정에서 자꾸 비밀번호 틀렷다면서 오류 메시지connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "postgres"가 계속 뜨네요 지우고 다시 해봐도 똑같은데 해결법이 있을까요?사용 노트북은 맥북입니다.
게시글을 삭제시키려면 먼저 해당 게시글에 포함된 댓글들을 먼저 삭제해야 합니다. 게시글을 삭제하게되면, 해당 게시글에 포함된 댓글 레코드에서 더이상 참조가 불가능하게 되기 때문인데요. 다시말해, 존재하지 않는 FK를 댓글이 가지게 되는거죠. 이러한 문제를 막기 위해, DB차원에서 삭제할 수 없게 에러를 발생시킨다능.
홍팍님 안녕하세요. 기존에는 Comment entity에만 @ManyToOne 어노테이션을 추가했는데, @OneToMany를 함께 사용하는 방식에 대해서도 궁금하여 댓글 남깁니다. Article entity에 @OneToMany(mappedBy = "article") private List commets; + 생성자를 추가하여 기존과 동일하게 동작하는 것은 확인했는데요. 이 경우 연관관계를 명시하는 것 외에 차이점이 있나요? 또한 실제로는 어떤 방식이 선호되는지 궁금합니다.
두 어노테이션 @OneToMany와 @ManyToOne은 방향성의 차이일뿐 개념이 같습니다 차이점은 기준 엔티티가 무엇인지 즉, 연관 데이터를 어느쪽으로부터 찾아들어갈 것인지에 차이가 있습니다 저는 개인적으로 @ManyToOne을 선호합니다 더 자세한 내용은 "스프링 JPA"을 학습 또는 관련 키워드로 구글링해보세요
자바 개발자 취업을 위한, 학습 순서
👉blog.hongparkedu.com/웹-개발자-취업을-위한-비전공-백엔드-학습-순서
자바 프로그래밍 입문 서적
👉product.kyobobook.co.kr/detail/S000001743842
강의 정리 시, 출처와 링크를 꼭 남겨주세요🙏
(저작권 위반 이슈를 방지하기 위함입니다)
혹시 저처럼 오라클로 연동하신분들 출력할때 정렬 이렇게하시면 됩니다.
List articleEntityList=articleRepository.findAll(Sort.by(Sort.Direction.ASC,"id")); 내림차순은 DESC
혹시 data.sql이 불러와지지 않는 분들 계시면 제가 구글링 해서 찾아본 내용으로 해보시면 어떨까 싶어서 남겨봅니다.
application.properties에서 spring.datasource.data=classpath:/data.sql를 spring.sql.init.data-locations=classpath:data.sql로 바꾸고 spring.datasource.initialization-mode=always를 spring.sql.init.mode=always로 바꿔보니 data.sql문이 잘 불러와졌습니다. 이제 막 배우는 중이라 정확한 이유는 모르겠지만 찾아본 곳에서 말씀해주시길 스프링부트 2.7 이상부터는 이렇게 작성해서 사용한다고 하네요.
감사합니다.
강사님과 똑같이 작성했는데 왜 안되는걸까 싶어서 적잖이 당황하고 있었는데 덕분에 잘 해결했습니다.
감사합니다. 즐거운 하루 되세요 :)
감사합니다!
홍팍님
게시글을 삭제할 때 해당 게시글에 댓글이 있으면 FK 때문에 에러가 나는데
게시글이 삭제 됐을 때 해당 게시글에 있는 댓글까지 같이 삭제되게 하는 방법이 스프링 부트 자체에서 따로 존재 하는 건가요 ?
Jpa의 cascade 속성을 쓰면 된다고 하는 것 같긴 한데 주의해야 할 사항들이 좀 있더라구요
이런 경우에 cascade 속성을 써서 해결이 가능 한 건지 궁금합니다.
===
JPA의 캐스캐이딩을 사용하여
게시글 삭제와 동시에
하위 댓글을 함께 지울 수 있을까요?
===
Yes
===
해당 기능이
스프링 부트 자체에
따로 존재하는 건가요?
===
No - 해당 기능은 DB에서 제공합니다.
"sql delete cascade"
===
JPA 캐스캐이딩 사용시
주의점이 있을까요?
===
JPA는 이러한 캐스캐이딩 옵션을
어노테이션으로 줄 수 있습니다.
"jpa remove cascade"
주의점으로 "삭제" 대상 또는
그 하위 엔티티가
여러 엔티티에 걸쳐 연관된 경우
사용해선 안됩니다.
"jpa remove cascade 주의사항"
@@hongpark 답변 감사합니다.
DB를 아직 제대로 공부해보지 않아서 이런 부분에서 좀 약하네요
몇 가지 더 궁금한 점이 있는데
CascadeType.REMOVE를 사용하면 부모가 삭제될 때 자식도 삭제된다고 하는데
CascadeType 옵션은 부모 쪽에서 지정해줘야 부모가 삭제 될 때 자식도 같이 삭제 되는거 아닌가요 ??
강의에서는 @ManyToOne로 Comment에서 매핑을 했으니 Article엔 @OneToMany 어노테이션이 없어서 Cascade 옵션을 추가할 수가 없는데
Entity 클래스의 구조를 바꿔야 되는 걸까요? 아니면 자식 쪽에서도 Cascade 옵션을 지정하여 부모와 같이 삭제되게 할 수 있는지 궁금합니다.
===
CascadeType Remove 옵션은
부모 쪽에서 지정해야하는데,
엔티티 연결 구조를 바꿔야할까요?
===
A. Remove 옵션을 줘서 물리적 삭제(hard delete)를 해야한다면,
질문주신대로 엔티티의 연결 구조를 바꿔야합니다.
B. 구조의 변경 없이 처리하는 방법으로
논리적 삭제(soft delete)도 있겠습니다.
delete flag를 두고 삭제된것으로 보이게 마킹함으로써
실 DB 삭제로 인한 FK 제약조건을 회피할 수 있습니다.
@@김동현-q4w6k 이거 혹시 해결하셨을까요?
@@pearlmoon3768
Comment 엔티티에
@ManyToOne 아래
@OnDelete(action = OnDeleteAction.CASCADE) 옵션 추가하면 해결됩니당
강의 수강중 댓글에 연습으로 긴 문자를 넣었을 때 다음과 같이 문제가 발생 합니다 어떻게 해결 할 수 있을 까요?
character varying(255) 자료형에 너무 긴 자료를 담으려고 합니다
다음 키워드로 구글링해보세요
"jpa String 길이 변경"
좋은 질문 감사합니다🙏
@@hongpark 감사합니다 스트링 길이변경을 검색해 보았는데 어디에 어떻게 변경을 해야할지,, 잘모르겠습니다ㅠ
엔티티의 필드에
다음과 같이 길이를 지정할 수 있습니다!
@Column(length = 1000)
private String body;
홍팍님 5:51 이부분 reinstall 해도 오류가 떠서 어떻게 하면 좋을까요 ㅠㅠ mac brew 도 해봤고 / 홈페이지 다운로드로도 시도해봤씁니다.
비밀번호 오류말씀이실까요?
한글이나 캡슬락 눌린건 아닌지 꼭 확인해보세요
비번 틀리는건 재설치밖에 답이 없.. 😱
@@hongpark 비밀번호 오류가 아니라 서버 포트 오류였습니다 ..
pgAdmin 4 접속 하신뒤 -> 오류나는 DB 오른쪽 클릭 -> Properties -> connection -> 설치시 포트입략( ex : 5432)
안녕하세요 홍팍님..!
11:00 에 나온 설정으로 서버를 돌려 댓글 작성하기를 하면, SQL Error: 0, SQLState: 23505 org.postgresql.util.PSQLException: 오류: 중복된 키 값이 "comment_pkey" 고유 제약 조건을 위반함 이라는 문구로 에러가 뜨는데요ㅠ (h2로 했을때는 문제없이 잘 돌아갑니다.)
찾아보니 무결성 위반으로, 동일한 데이터key가 이미 존재하기에 발생하는 에러라 하는데 갑자기 왜 이러는거죠?ㅠㅠ(해결방법도 잘 모르겠습니다..)
댓글을 작성하면, 어느 게시물에 달던지 " Detail: (id)=(1) 키가 이미 있습니다. " 라고 뜨고, 댓글 등록 실패 알림창을 끄고 또 다시 댓글 작성버튼을 누르면 id값이 1씩 계속 증가합니다. 더미데이터에서 댓글 id를 9까지 넣어줘서인지, id=10일때부터는 댓글 작성이 잘 되는데요, 어떻게 해결핤 ㅜㅇ있을까요?
===
"data.sql" 파일의
INSERT INTO에서
PK인 id값 명시를 제거해주세요.
===
PK의 시퀀스가
자동 증가 되지않아 생기는 문제입니다
좋은 질문 감사합니다 🐯
안녕하세요 홍팍님. 국비과정 수강중에 강사님 스프링부트 이해가 힘들어서 찾아보다가 앞의 무료강의 듣다가 회원결제로 여기까지 열심히 듣고 있습니다. 질문이 있어서 댓글 남겨요.
Q1. 솔직히 돌아보면, 지금은 그냥 클론만들기 처럼 따라쓰는 정도인데(+약간의 이해? 잡힐 듯 말듯...), 다 듣고 반복해서 홍팍님 강의를 돌리는게 나을까요? 아니면 무언가를 더 해야할까요...?
Q2. 그리고 저는 Oracle DB를 사용했었는데요. Oracle MySQL PostgreSQL 중에 이게 실무에서 더 많이 쓰인다라는게 있나요?
그리고 강의 잘 듣고 있습니다. 감사합니다.
= 1회차 학습 =
처음에는
클론코딩하듯 따라쳐본다
= 2회차 학습 =
다음번엔 내가 홍팍이다
생각하고 셀프 강의롤 해본다
= 3회차 학습 =
앞서 배운 내용을 가지고
나만의 웹서비스를 만들어본다
= 더 나아가기 =
다음 두 가지 학습을 추천
"JPA"와 "스프링 시큐리티"
= DB 관련 답변 =
오라클이나 Postgres나 둘다
코어 컨셉은 같습니다만,
중견기업 이상은 오라클을
스타트업 계열은 Postgres 를 선호합니다
글로벌에서는
Postgres가 트렌디합니다
@@hongpark 답변 너무 감사합니다! 열심히 해보겠습니다!
홍팍님 교재에 없는 aop,관점지향,object 부분만 무료로 풀수는 없을까요?
말씀주신 컨텐츠는 프리미엄 강의로
유료로만 수강하실 수 있습니다만,
여러 상황을 조합하여
주신 의견도 고려해보도록 하겠습니다
감사합니다 🙇♂️
안녕하세요 홍팍님
DB를 MySQL로 연동했는데, 그 이후로 RepositoryTest를 통과하지 못하네요
실제로 데이터가 있음에도 불구하고 테스트에서 findByArticleId()나 findByNickname()가 null 값을 반환합니다.
웹 브라우저를 통해서 /api/articles/{articleId}/comments로 직접 접속하면 데이터가 화면에 띄어지는건 확인됩니다.
데이터베이스를 연동했더니 테스트가 실패하는 이유가 궁금합니다
바로 떠오르는게 없군요 😱
정보가 부족한 상황입니다.
해결하게 되면 공유부탁드려요!
application properties에서 spring.datasource.data과 spring.datasource.initialization-mode 추가할 때 해당 코드에 글이 그어져 있는데 그게 무슨 의미일까요??
음.. 정보가 부족하군영
마우스를 올려보시면 모가 나오지 않을까 싶네요
오류 메시지connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "postgres" 이것이 계속뜨는데 해결할 방법 없을까요? 분명히 제대로 비밀번호 입력했는데도 뜹니다
비밀번호 입력시
시프트등의 오타가 있을 확률이 큽니다
postgres를 재설치해보세요
재설치 시, 비밀번호 꼭 다시 확인 필수
@@hongpark 맥인데 똑같이 재설치해봐야 할까요?
@@김지홍-e9v 관리자 비밀번호 변경이 가능하다면 재설치하지않고도 가능합니다
구글링 ㄱ ㄱ
@@hongpark 혹시 맥 링크알고있으시면 알려주실수있으실까요?
"postgres 관리자 비밀번호 변경 맥북"
정도로 구글링 또는 빙챗해보세요
initialization-mode를 never , ddl-auto를 update 해도 데이터가 텅텅 안비는데 어떻게 해야할까요..?
웹페이지에서 하나씩 지우셔도 되고,
DBMS 쿼리로 날려보십셩
Postgres설치 후 서버 안에 테이블 들어가는 과정에서 자꾸 비밀번호 틀렷다면서 오류 메시지connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "postgres"가 계속 뜨네요 지우고 다시 해봐도 똑같은데 해결법이 있을까요?사용 노트북은 맥북입니다.
pgAdmin 으로 먼저 접속해보시고
잘 접속 된다면,
DB 설치시 입력한 비밀번호와 포트번호가
application.properties 에
잘 입력되었는지 확인해보세요
@@hongpark pgAdmin에 Server 안의 PostgreSQL 14 이곳이 위에 쓴 오류가 발생하며 들어가지지 않습니다. 재설치하고 정확히 비밀번호를 설정하였는데도 동일한 오류가 발생합니다.
한글 변환을 잘못 했거나,
대소문자 키가 눌렸거나,
혹은 설치시 포트번호를 변경하진 않았는지
한번 확인해보세요
(이것 말고는 예상되는게 없네요 😱)
@@hongpark 전혀 그런거 없이 천천히 썻는데도 그러네요 ㅠㅠ 혹시 몰라 postgres말고 다른 비밀번호로 설치할 때 설정도 해봤는데 똑같은 오류네요 ㅠㅠ
혹시 비밀번호가
pgAdmin 비밀번호 따로,
PostgreSQL 14 따로 인데,
pgAdmin 비밀번호를
PostgreSQL 14 에 입력한건 아닌지도 확인해보십셩
pgAdmin 비번은
ResetPassword 버튼으로 초기화하심 됩니다
댓글이 있는 게시글은 삭제하려하면 오류가 뜨네요. 저희가 따로 설정을 한 것도 아닌데 왜그런건가요?
게시글을 삭제시키려면
먼저 해당 게시글에 포함된 댓글들을 먼저
삭제해야 합니다.
게시글을 삭제하게되면,
해당 게시글에 포함된 댓글 레코드에서
더이상 참조가 불가능하게 되기 때문인데요.
다시말해, 존재하지 않는 FK를
댓글이 가지게 되는거죠.
이러한 문제를 막기 위해,
DB차원에서 삭제할 수 없게 에러를 발생시킨다능.
@@hongpark 아하 jpa에서 쓰려면 찾아보니CASCADE_REMOVE 쓰면 되겠네요. 감사합니다. 오히려 관계 매핑 해놔도 저희가 설정안해서 무난하게 삭제될줄알았거든요 ㅋㅋ
홍팍님 이 영상 멤버전용이 풀렸습니다.
이번에
스프링부트 입문서 출간으로 인해
해당 영상을 공개하게되었습니다
신경써주셔서 감삼다 🙇♂️
홍팍님 안녕하세요.
기존에는 Comment entity에만 @ManyToOne 어노테이션을 추가했는데, @OneToMany를 함께 사용하는 방식에 대해서도 궁금하여 댓글 남깁니다.
Article entity에
@OneToMany(mappedBy = "article")
private List commets;
+ 생성자를 추가하여 기존과 동일하게 동작하는 것은 확인했는데요.
이 경우 연관관계를 명시하는 것 외에 차이점이 있나요?
또한 실제로는 어떤 방식이 선호되는지 궁금합니다.
두 어노테이션
@OneToMany와 @ManyToOne은
방향성의 차이일뿐 개념이 같습니다
차이점은
기준 엔티티가 무엇인지
즉, 연관 데이터를 어느쪽으로부터
찾아들어갈 것인지에 차이가 있습니다
저는 개인적으로
@ManyToOne을 선호합니다
더 자세한 내용은
"스프링 JPA"을 학습
또는 관련 키워드로 구글링해보세요