본문 바로가기

전체 글335

[Spring] SpringBoot의 JPA 1) SpringBoot의 JPA 1. SpringBoot환경에서의 JPA Hibernate 설정 show_sql, foramt_sql, use_sql comments 옵션 Hibernate가 DB에 요청하는 모든 SQL을 보기좋게 출력해줌 ddl-auto create : 기존 테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop : create와 같으나 종료시점에 테이블 DROP update : 변경된 부분만 반영 validate : Entity와 테이블이 정상 매핑되었는지만 확인 none : 아무것도 하지 않음 SpringBoot 환경에서는 EntityManagerFactory와 EntityManager를 자동으로 생성해줌 application.properties에 DB 정보를.. 2023. 11. 7.
[Spring] Entity의 상태 Entity의 상태 비영속(Transient) new 연산자를 통해 인스턴스화 된 Entity 객체 아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않음 JPA가 관리하지 못하기 때문에 해당 객체의 데이터를 변경해도 변경 감지가 이루어지지 않음 영속(Managed) persist(entity) : 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만듦 em.persist(memo);​ 관리받은 상태(영속 상태)인 MANAGED상태가 됨. 준영속(Detached) 영속성 컨텍스트에 저장되어 관리되다가 분리된 상태 영속상태 ➡️ 준영속 상태로 바꾸는 법 (3가지) detach(entity) : 특정 Entity만 준영속 상태로 전환 em.. 2023. 11. 7.
[Spring] Entity / Persistence Context / Transaction 1) Entity : JPA에서 관리되는 클래스. 즉, 객체를 의미 Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리됨. Annotation @Entity : JPA가 관리할 수 있는 Entity 클래스로 지정하는 annotaion @Table : 매핑할 테이블 지정 @Id : table의 기본키를 지정해주는 annotation 영속성 컨텍스트에서 entity를 구분할 때 사용 기본키를 넣어주지 않으면 오류 발생 @GeneratedValue : 기본 키 생성을 DB에 위임 가능 (strategy = GenerationType.IDENTITY) : DB가 자동으로 ID를 생성하도록 함 @Column nullable : null 허용 여부 (default : true) unique : 중복 .. 2023. 11. 7.
[Spring] ORM / JPA / Hibernate DB를 직접 다룰 때의 문제점 SQL에 의존적이라 변경에 취약함. => ORM이 없는 환경에서는 백엔드 개발자가 비즈니스 로직 개발보다는 SQL 작성 및 수정에 더 많은 노력을 들였어야 함. 1) ORM : 객체와 DB를 mapping 해주는 도구 (Object-Relational Mapping의 약자.) 반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해 등장 2) JPA (Java Persistence API) : 자바 ORM 기술의 대표적인 표준 명세 (ORM 기술 중 표준적인 기술) JPA는 애플리케이션과 JDBC 사이에서 동작 JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해줌 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB작업.. 2023. 11. 7.
[Spring] IoC / DI / Bean IoC는 설계원칙, DI는 디자인 패턴에 해당. 스프링은 좋은 코드를 위해 IoC, DI를 제공 Spring Docs 발췌 내용 >> " DI패턴을 사용해 IoC 설계원칙을 구현하고 있다. " ❓ 좋은 코드란 무엇일까? - 논리 간단 - 중복 제거 & 표현 명확 - 이해하기 쉽고 수정에 용이 - 의존성 최소화 - 새로운 기능 추가시 크게 구조 변경 없어야 함. 의존성이 높으면 강한 결합. 강한 결합은 수정이 많이 필요함. 🤔 그럼 의존성을 어떻게하면 떨어뜨릴 수 있을까? ➡️ 다형성의 원리(ex; 인터페이스를 사용)를 통해 강하게 결합되어 있는 것을 바꾸고 의존성을 낮출 수 있음. 🤔 강한 결합을 해결할 수 있는 방법이 있을까? 1️⃣ 각 객체에 대한 객체 생성은 1번만 2️⃣ 생성된 객체는 모든 곳에서.. 2023. 11. 7.
[TIL] #54. 231106 어제 목표 & 오늘 완료한 한 일 알고리즘 문제 스프링 입문 강의 (2주차) 스프링 입문 개인과제 내일 목표 알고리즘 문제 자바 종합 문법 복습 (3주차) 스프링 입문 강의 (2주차) 스프링 숙련 강의 (1주차) 오늘 배운 내용 @JsonInclude(JsonInclude.Include.NON_NULL) 을 통해 null 값인 필드를 제외시킬 수 있다. 발생한 문제와 해결 1️⃣. 게시물을 수정하여도 수정이 되지 않는 문제가 발생하였는데 코드를 다시 보니 PostService에서 @Transactional annotation을 붙이지 않아 발생한 에러였다. 해당 annotation을 붙여주니 해결이 되었다. 2️⃣. deletePost() 메서드관련해서 exception 부분 구현 중 아래와 같은 에러가.. 2023. 11. 6.
[WIL] #8. 231030 ~ 231105 이번주 목표 달성 여부자바 강의 복습 끝내기 요일별 공부 내용월- 알고리즘 문제 - 팀 프로젝트화- 알고리즘 문제 - 스프링 입문 강의 (1주차)수- 알고리즘 문제 - 스프링 입문 강의 (1주차)목- 알고리즘 문제 - 스프링 입문 강의 (1주차) 금- 알고리즘 문제 - 스프링 입문 강의 (1주차) - 스프링 입문 개인 과제 - 스프링 입문 강의 (2주차) 토- 알고리즘 문제 - 스프링 입문 강의 (2주차) 일- 알고리즘 문제 개선할 점 & 아쉬운 점현재는 알고리즘 코드 작성시 비효율적이고 가독성이 떨어지는 코드를 작성하는 편이기 때문에 이 부분을 개선해야 한다.알고리즘 문제를 풀 때 항상 사용하는 메서드만 사용하는 편인데, 여러 메서드를 익히고 응용해보면 좋을 것 같다. 새롭게 알게 된 점 & 느낀점자바.. 2023. 11. 5.
[TIL] #53. 231105 어제 목표 & 오늘 완료한 한 일 알고리즘 문제스프링 입문 강의 (2주차) 내일 목표알고리즘 문제스프링 입문 강의 (2주차) 스프링 입문 개인과제 느낀점지금까지는 항상 내가 원하는 레벨에 맞춰서 그에 따른 문제를 풀었는데 오늘은 한 번 추천 문제 뜨는 걸 풀어봤다. 요즘 레벨1문제를 풀고 있어서 그런지 오늘 푼 문제는 정말 쉽게 해결되었다. 그런데 코드가 더 짧고, 반복문을 사용하지 않고도 문제를 해결했으면 좋았을 것 같다. 오늘도 다른사람의 코드를 보면서 공부를 했다. 해당 문제를 반복문 없이 푼 사람이 되게 많던데 나는 반복문을 사용했다는 사실이 나의 부족함을 한 번 더 느끼게 해준다. 2023. 11. 5.
231105 개미 군단 문제 설명 개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요. 제한사항 hp는 자연수입니다. 0 ≤ hp ≤ 1000 입출력 예 입출력 예 설명 입출력 예 #1 hp가 23이므로, 장군개미 네마리와 병정.. 2023. 11. 5.