1. 영속성 컨텍스트: 엔티티를 영구 저장하는 환경눈에 보이지 않는 논리적 개념엔티티 매니저를 통해 영속성 컨텍스트에 접근환경J2SE (기본 자바)J2EE (프레임워크)엔티티 매니저 : 영속성 컨텍스트1:1N:1엔티티의 생명주기비영속: 객체를 생성한 상태, Member member = new Member();영속: 객체를 영속 컨텍스트에 저장한 상태 (JPA가 인식하고 관리해줄 수 있는 상태), em.persist(member);실제 DB 저장은 트랜잭션 커밋 시에 이루어짐준영속: 객체를 영속 컨텍스트에서 분리한 상태, em.detach(member);삭제: 객체를 삭제한 상태, em.remove(member);2. 영속성 컨텍스트 사용 이점 엔티티 조회1차 캐시 -> 같은 트랜잭션 내에서 이루어진 조회..
1. 환경 세팅 h2 database 사용 maven 설정 hibernate 버전은 사용하고자 하는 스프링 버전에 맞는 것으로 설정하면 좋다 spring.io -> projects -> spring boot -> Learn -> 스프링 버전에 맞는 doc -> 'org.hibernate'로 검색해 버전 확인 h2는 설치한 버전과 같아야 한다 JPA 설정: /META-INF/persistence.xml persistance-unit에 name속성으로 이름 지정 javax.persistence.~~ : JPA 표준 속성 hibernate.~~ : hibernate 전용 속성 DB 방언: DB마다 구문에 차이가 있기 때문에 어떤 방언을 사용할 것인지 알려주어야 한다 hibernate는 40가지 이상의 DB 방..
1. Spring 스프링 info level log 달기 @Slf4j log.info("게시물 이 삭제되었습니다.", post.getTitle()); 저번주 JPA 연관관계 정리 @Column에 name 속성을 따로 지정하지 않으면 그 필드명으로 자동 지정 @JoinColumn 외래키 매핑할 때 사용하는 어노테이션 1:N 관계인 경우 보통 N쪽에 외래키를 두므로 연관관계의 주인이 되며 해당 어노테이션을 붙힌다 연관관계의 주인 = 외래키 관리(등록, 수정, 삭제) 양방향인 경우 주인이 아닌 1쪽에 mappedBy를 사용하여 주인이 아님을 알려준다 // 댓글이 연관관계의 주인 // 게시글에서 댓글 객체를 불러와 사용 가능 @OneToMany(mappedBy = "article") private List co..
JAVA 진영에서의 ORM 표준 기술인 JPA의 필요성은 여러 자료를 통해 머리로는 대충 알고 있었지만, 영한님 설명을 통해 좀 더 와닿게 되었다 1. 상속 Item 객체를 상속받은 Album 객체를 RDB에 저장할 때 앨범을 필드단위로 분해하여 우측의 ITEM, ALBUM 테이블에 각각 적절하게 저장해주기 위해 INSERT SQL문도 각각 작성하여 두번 날려야 한다 DB에서 ALBUM 객체를 조회할 때는 우측의 ITEM, ALBUM 테이블을 JOIN SQL문으로 묶어주고 그것을 다시 객체로 매핑해준 후 반환한다 이렇게 SQL 의존적이고 복잡한 과정을 피하기 위해 DB에 저장할 객체에는 상속관계를 사용하지 않게 된다고 한다 2. 연관관계 객체 지향적으로 모델링하는 경우에 저장할 때는 크게 문제가 없다 대..
가장 에러를 많이 만났던 주차였다. 스스로의 힘으로 리팩토링에 성공해서 원하는 결과물을 만들어냈고, 금요일부터는 새로운 팀원들과 팀플 및 개인공부를 진행중이다. 다음 주차부터는 지금까지 배운 것들을 토대로 실제 서비스와 같은 것들을 만들어 나갈텐데, 지금 내 수준 정도로 괜찮은건가? 싶기는 하지만 앞으로 계속 배워나가면 된다라며 스스로를 다독이고 있는 것 같다. 1. ORM(Object Relational Mapping) 애플리케이션의 객체와 RDB(relational database)를 연결(mapping)하는 것이다 자바는 객체로 구성하여 프로그래밍하고, RDB는 테이블로 이루어져 있으며, 애초에 이 둘은 호환을 염두에 두고 만들어진 것이 아니기 때문에 객체와 테이블을 매핑하는 것에 문제가 생길 수 ..
언젠가부터 너무 적당히만 공부하는 것 같다. Git 공부, TDD, 코테 문제 등 할게 많은데도 사리면서 하는게 많이 느껴지는데, 좀 반전시키고자 오늘은 코테문제 하나 풀고 마무리하려고한다 ㅎ.. 또 다른 분위기 반전으로 김영한님의 JPA 기본 강의를 구매해서 다음주부터 들을 예정이기 때문에 또 열심히 달리게 되는 계기가 되지 않을까 싶다. 1. Spring 과제에 스케줄러를 구현해보았다 매일 오전 1시에 댓글 갯수가 0개인 게시글을 모두 삭제해주는 로직을 만들어야 했다 먼저 애플리케이션에 @EnableScheduling으로 인식하게 해주고 @EnableScheduling @EnableJpaAuditing @SpringBootApplication public class IntermediateApplica..
1. Spring Spring 주특기 마지막 주차에 예상치 못하게 팀플을 하게 되었는데 괜찮은 것 같다. 이번 기회에 많이 익숙치 않은 깃과 협업을 좀 더 연습하면 좋을 것 같다. GitHub Desktop에서 원격에 있는 repo 불러오기 -> clone repository IntelliJ에서 원격에 이미 만들어져 있는 repo 불러오기 -> get from version control (새로 생성은 share project on Github -> commit directory) find action (ctrl + shift + A) AWS S3 서비스를 이용해 게시글을 작성할 때 이미지를 업로드하고, 응답으로 이미지 url을 받는 기능을 배정받았다 https://devlog-wjdrbs96.tisto..
이노베이션 캠프 4주차를 수행하면서 배운 것 중 유용한 것을 정리한다. 스프링 어노테이션이 얼마나 큰 역할을 하는지 더욱 알게된 한 주였다. 1. MySql 먼저 오늘 배포하기 전에 H2에서 RDS MySql로 바꾸었을 때 JPA - Field 'id' doesn't have a default value 이런 에러가 자꾸나서 찾아본 결과 JPA와 DB의 save() 관련 sql문 차이가 있어 따로 설정해주어야 되는 부분이있었다. // User @GeneratedValue(strategy = GenerationType.IDENTITY) @Id private Long id; 유저 엔티티의 DB id값 설정에서 원래 GenerationType.AUTO에서 GenerationType.IDENTITY로 바꿨었는데..
새로운 개념들이 본격적으로 쏟아지기 시작하는 것 같다. 19일차부터 코드치고, 성질내고 하면서 계속 TIL도 안쓰고 코테 문제풀이도 안하다가 나름 여유가 생겨서 간단하게 적어보려 한다. 금요일에 학습자료를 활용해서 스프링 시큐리티를 이용한 회원가입, OAuth를 따라치며 배웠고, 그 다음날부터 JWT관련해서 엄청나게 헤맸다. 어제까지 계속 샘플 JWT코드로 내가 원하는대로 작동하게끔 시도했지만 계속 실패해서 그냥 동작하게끔 일단 세팅해놓고 오늘부터 회원 관련한 게시판, 댓글 등의 기능을 다 구현했다. 댓글 엔티티와 게시글 엔티티 사이의 DB 연관관계에서 막히는가 했지만 스프링 어노테이션의 엄청난 힘을 다시 한번 느끼면서 잘 극복했고, 예외처리까지 거의 마무리된 것 같다. 아직 refresh token 검..
1. Spring 코드를 개선하고 재배포할때 계속 8080포트가 이미 사용중이라는 에러가 떠서 git bash에서 제거해준 뒤 다시 배포하는데 성공했다 맨위 id에 해당하는 프로세스 종료했다 ps -ef | grep java kill -9 [process_id] 스프링 MVC의 내부 동작에 대해 좀 더 깊게 알게 되었고, 이는 17일차 TIL에 한꺼번에 작성해놓았다 테스트코드도 연습삼아 짜봤는데, 스프링 데이터 JPA를 사용하면서 단위테스트는 잘 되지 않아서 일단 통합 테스트로 진행해보았다. 서비스 계층의 게시글 등록에 대한 테스트 딱 한개만 진행했고, 단위 테스트로도 할 수 있는지 좀 더 공부해야 할 것 같다 17일차 TIL에 설명했던 것 중 Enum 사용과 ExceptionDto 요소 확장은 오늘 진..