
https://product.kyobobook.co.kr/detail/S000213381878 Node.js를 제대로 공부한 적도 없고, node 개발자도 아니었지만 갑자기 Node.js로 프로젝트를 진행해야하는 상황에서 초보 개발자에게 어느정도 길잡이가 되어주고 도움이 된 책인거 같다. 결과적으론 PoC 이슈로 노드가 아닌 파이썬을 쓰게 되었지만, 백엔드에서 스프링과 함께 양대산맥인 노드를 찍먹해볼 수 있는 계기가 되었다. 자바스크립트를 잘 모르는 사람을 위해 간단한 문법도 함께 다뤄주니 도움이 됬다. 뒷 챕터까지 모두 읽어보지는 못했지만, 처음 만나는 Node.js에 대해 약간의 개발 흐름과, 특징들(싱글 스레드, 이벤트 루프 등)에 대해 일부 알게되었고, 특히 프론트엔드와 백엔드가 자바스크립트라는 ..

https://product.kyobobook.co.kr/detail/S000211817103 간단하게 말하자면 초보 개발자가 어떻게 챗 gpt를 사용해서 서비스를 쉽고 간단하게 만들 수 있는지 가볍게 볼 수 있는 책인것 같다. 나도 사이드 프로젝트나 개인적인 미니 프로젝트를 만들때, 챗 gpt는 그저 코드 작성에만 도움을 받을뿐이었지, 제대로 활용하고 있었던건 아닐지도 모르겠다는 생각이 들었다. 챗 gpt를 서비스에 어떻게 녹여낼 수 있는지, 작은 프로젝트여도 수익화도 생각할 수 있다는 점이 흥미로웠다. 다음에 개인적인 서비스를 개발할 때 참고하여 간단하고 재미있는 요소를 추가하여 개발해보고싶다. 또한, 지금까지 "내 작고 소중하고 하찮은 서비스에 수익화라니?!" 라는 생각으로, 아직은 수익화단계까지 ..

트랜잭션과 락 트랜잭션은 ACID (원자성, 일관성, 격리성, 지속성을 보장해야 함) 원자성 : 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것처럼 모두 성공 또는 모두 실패여야 한다. 일관성 : 모든 트랜잭션은 일관성있는 데이터베이스르 상태를 유지해야 한다. 예) DB에서의 무결성 제약 조건 항상 만족 격리성 : 동시에 실행되는 트랜잭션은 서로에게 영향이 미치치 않도록 격리해야한다. 동시에 같은 데이터를 수정하지 못하게 해야한다. 지속성 : 트랜잭션이 성공적으로 끝나면 항상 결과가 기록되어야 하고, 문제가 생겨 중간에 실패하면 로그 등을 통해 복구해야 한다. 문제는 격리성으로, 격리성을 완전히 보장하려면 트랜잭션을 순서대로 실행해야 하고, 그러면 동시성 처리 성능이 너무 나빠진다. 따라서 ANSI 표..

15.1 예외 처리 (JPA를 사용할 때 발생하는 다양한 예외와 예외에 따른 주의점) JPA 표준 예외들은 javax.persistence.PersistenceExpection의 자식 클래스이며, 이 예외 클래스는 RuntimeException의 자식이다. 따라서 JPA예외는 모두 언체크 예외이다. JPA 표준 예외는 크게 "트랜잭션 롤백을 표시하는 예외"와 "트랜잭션 롤백을 표시하지 않는 예외"로 나뉜다. "트랜잭션 롤백을 표시하는 예외"는 심각한 예외이므로 복구해서는 안되며, 강제로 커밋해도 대신에 예외가 발생한다. 반면 "트랜잭션 롤백을 표시하지 않는 예외"는 심각한 예외가 아니므로 개발자가 트랜잭션을 커밋할지 롤백할지를 판단하면 된다. 트랜잭션 롤백 시 주의사항 - 트랜잭션 롤백은 데이터베이스의 ..

컬렉션 JPA는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다. 자바 컬렉션 인터페이스의 특징 - Collection : 자바가 제공하는 최상위 컬렉션. 하이버네이트는 순서를 보장하지 않고 중복을 허용한다고 가정한다. - Set : 순서를 보장하지 않고 중복을 허용하지 않는 컬렉션. - List : 순서를 보장하고 중복을 허용한다. - Map : Key, Value 구조로 되어있는 특수한 컬렉션. * 순서가 있는 컬렉션은 데이터베이스에 순서 값도 함께 관리한다. JPA와 컬렉션 하이버네이트는 엔티티를 영속 상태로 만들때 컬렉션 필드를 하이버네이트에서 준비한 컬렉션으로 감싸서 사용한다. (원본 컬렉션을 감싸고 있는 내장 컬렉션을 생성해서 이 내장 컬렉션을 사용..

[Section3 - Spring MVC] 트랜잭션(Transaction) - 트랜잭션이 뭐였는지 기억이 안난다면? 트랜잭션 범위의 영속성 컨텍스트 스프링이나 J2EE 컨테이너 환경에서 JPA를 사용하면 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 이 전략은 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다(트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다는 의미). 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 이 전략은 트랜잭션이라는 단위로 영속성 컨텍스트를 관리하므로 트랜잭션을 커밋하거나 롤백할 때 문제가 없다. 유일한 단점은 프리젠테이션 계층에서 엔티티가 준영속 상태가 되므로 지연 로딩을 할 수 없다는 점이다. ..

9주~10주차 통합 (아직 무슨 내용인지 잘 몰라 나중에 다시 공부하기) 10.1 객체지향 쿼리 소개 JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리기술을 지원한다. 쿼리기술에는 JPQL(가장 중요한 객체지향 쿼리 언어), Criteria, QueryDSL 등이 있다. Criteria, QueryDSL은 결국 JPQL을 편리하게 사용하도록 도와주는 기술이다. 10.2 JPQL (Java Persistence Query Language) 테이블이 아닌 엔티티 객체를 조회하는 객체지향 쿼리이다. SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. SQL보다 코드가 간결하다. JPQL은 결국 SQL로 변환된다. 데이터베이스 방언(Dialect)만 변경하면 JPQL을..

JPA의 데이터 타입 2가지 1) 엔티티 타입 2) 값 타입 - 기본값 타입(basic value type) : 자바기본타입(예:int, double), 래퍼클래스(예:Integer), String - 임베디드 타입(embeddedtype, 복합 값 타입) : JPA에서 사용자가 직접 정의한 값 타입. 자바의 기본타입이 아닌 객체 타입이다. - 컬렉션값 타입(colection value type) : 하나 이상의 값 타입을 저장할 때 사용. 엔티티 타입 특징 식별자(@id)가 있다. 엔티티 타입은 식별자가 있고 식별자로 구별 할 수 있다. 생명 주기가 있다. 생성, 영속화, 소멸하는 생명 주기가 있다. em.persist (entity)로 영속화한다. em. remove(entity)로 제거한다. 공유할..

프록시 (Proxy) 요약 : 지연로딩을 위해 사용되는 대리 객체 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 프록시는 실제 객체에 대한 대리자나 대리 객체 역할을 수행하며, 클라이언트가 실제 객체에 직접 접근하는 것 대신에 프록시를 통해 접근할 수 있도록 한다. 프록시 클래스는 실제 클래스를 상속 받아 만들어지므로 실제 클래스와 겉모양이 같다. 프록시 객체는 실제 객체에 대한 참조(target)을 보관한다. 프록시 객체의 메소드를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시객체의 특징 처음 사용할 때 한 번만 초기화된다. 프록시객체를 초기화한다고 프록시객체가 실제 엔티티로 바뀌는 것은 아니다. ..