본문 바로가기

김영한59

1/31 김영한님 온라인 밋업 LIVE 정리 .https://www.inflearn.com/course/30%EB%A7%8C-%EA%B9%80%EC%98%81%ED%95%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EC%84%B8%EC%85%98/dashboard [지금 무료] [30만 수강생 기념] 1/31 김영한님 온라인 밋업 Live 강의 - 인프런 1월 31일 저녁 7시에 진행되었던 밋업 영상입니다., [사진][사진]여러분들의 인생멘토가 될,김영한님의 첫 라이브 세션!😟 내가 개발자로 평생 일할 수 있을까?🤔 현 시점 개발자가 갖춰야 할 가 www.inflearn.com 내용 정리한 글입니다. 개발자의 역량 JPA의 미래 - JPA는 오래전부터 사용되어온 완성형 기술이다. - RDB(관계형 데이터베이스)가 망하지 않는 이상 계속 .. 2024. 3. 9.
자바 예외 이해 Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 상위 예외를 catch 로 잡으면 그 하위 예외까지 함께 잡는다. 애플리케이션 로직에서는 Throwable 예외도 잡으면 안되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문에다. 애플리케이션 로직은 이런 이유로 Exception 부터 필요한 예외로 생각하고 잡으면 된다. Exception : 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. Exception 과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단 RuntimeException 은 예외로 한다 RuntimeException : 언.. 2022. 7. 28.
트랜잭션의 개념과 이해 우리가 데이터를 파일이 아닌 데이터베이스에 저장하는 이유는 데이터베이스는 트랜잭션이라는 개념을 지원한다. 트랜잭션은 데이터베이스 안에서 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 예를 들어 A가 B에게 5000원을 계좌이체 하는 상황에서 1. A의 잔고 5000원 감소 2. B의 잔고 5000원 증가 이 두가지 작업이 하나의 작업처럼 진행되어야 한다. 트랜잭션이 없다면 1이 성공했을때 2는 실패하거나 2가 성공했을 때 1이 실패하면 큰 문제를 야기할 수 있다 트랜잭션 기능을 사용하면 둘 다 성공해야 결과를 저장(Commit)하고 하나라도 실패하면 그 전의 상황으로 롤백(Rollback)한다. 트랜잭션은 ACID를 보장해야한다. 원자성 (Atomicity) - 트랜잭션 내에서 실행한 작업들.. 2022. 7. 24.
Querydsl 소개 기존에 스프링 데이터 jpa를 사용하면서 JPQL을 사용하여 query를 진행하였다. JPQL은 복잡한 로직의 경우 그 길이가 길어져 복잡하고 반복적으로 사용하게 된다. Querydsl을 사용하면 1. java 코드를 작성하듯 쿼리를 작성하여 컴파일 시점에 오류 체크가 가능 2. IDE의 자동완성 기능의 도움을 받을수 있음 3. 동적인 쿼리 작성 편리 이 외에도 수많은 장점이 있다. @Test public void startJPQL() { //member1을 찾아라. String qlString = "select m from Member m " + "where m.username = :username"; Member findMember = em.createQuery(qlString, Member.clas.. 2022. 7. 19.
스프링 데이터 JPA 소개 그동안 JPA CRUD를 직접 작성하였다. 그런데 스프링 데이터 JPA를 이용하면 가장 기본적인 CRUD - save, delete, find, findAll, count 등 (그 이외에도 정말 많은) 다양한 기능들이 구현되있는 인터페이스를 상속받아 사용할 수 있다. 직접 사용해보았는데 신세계다. @Repository public class MemberJpaRepository { @PersistenceContext private EntityManager em; public Member save(Member member) { em.persist(member); return member; } public void delete(Member member) { em.remove(member); } public M.. 2022. 7. 15.
API 개발 고급 - 지연 로딩과 조회 성능 최적화 실무에서 매우 중요함. 100% 이해를 목표로 공부할 것. 간단한 주문 조회 V1: 엔티티를 직접 노출 엔티티를 노출하면 양방향 연관관계 있는 부분에서 무한루프에 빠질 위험이 있다. (@JsonIgnore로 해결가능하긴함) 엔티티를 직접 노출하면 엔티티가 변경되었을 때 API의 스펙이 모두 바뀐다. 성능상에도 문제가 생긴다. 따라서, DTO로 변환해서 반환하는 것이 좋은 방법이다. 간단한 주문 조회 V2: 엔티티를 DTO로 변환 DTO를 생성하여 반환하는 값들을 선언하고 반환한다. 엔티티가 바뀌어도 API 스펙이 바뀔리가 없다. 그런데 V1과 V2 모두 LAZY_Loading으로 인한 쿼리가 너무 많이 호출된다는 문제가 있다. -> N+1 문제가 발생함 간단한 주문 조회 V3: 엔티티를 DTO로 변환 -.. 2022. 7. 10.