분류 전체보기 235

2장 JPA 시작

👣 개요 해당 게시물에선 실제로 JPA를 사용하는 방법에 대해 서술한다. 👣 엔티티 구조 @Entity @Table(name = "member") @Getter @Setter @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "name") private String name; } @Entity 이 어노테이션이 적용된 클래스는 테이블과 매핑할 것이라고 JPA에게 선언함. @Table 매핑할 테이블에 대한 정보를 알려준다. 만약 name 속성을 설정하지 않는다면 테이블 이름을 클래스 이름으로 ..

JPA 2023.08.27

1장 JPA 소개

👣 개요 해당 챕터는 JPA의 사용이유, 개선 포인트에 집중하는 부분이다. 👣 기존 문제점 - JDBC 만을 사용할 때의 문제점 JDBC는 Application과 DB 사이를 연결하는 추상화 인터페이스로서 DB 제조업체는 JDBC에서 명시한 API를 기준으로 자바와 연결하는 드라이버를 제작하고 Application 제작자 또한 JDBC에서 명시된 API를 기준으로 DB를 사용한다. 간단한 JDBC를 이용한 DB 통신 방법은 다음과 같다. GitHub - iksadNorth/Lab_JDBC Contribute to iksadNorth/Lab_JDBC development by creating an account on GitHub. github.com 간단하게 코드만 보여준다면 다음과 같이 메서드가 SQL에..

JPA 2023.08.27

8/26

👣 개요 어제 Lv.1 과제를 수행하고 테스트를 하던 도중, 잘못된 기술이 사용됨을 깨닫고 급하게 기술 스택을 바꿨다. Lv.1 과제에서는 JPA를 이용해 블로그 API 서버를 만들어야 했지만, 착각을 해 JDBC를 이용해 DB 통신을 했었다. 다행히도 기존에 사용하던 ArticleRepository가 JpaRepository에서 사용하는 메서드와 겹치는 부분이 많아 쉽게 JDBC에서 JPA로 바꿀 수가 있었다. 이런 경험을 통해 지금 당장 바꿀 예정에는 없지만 변경 가능성이 농후한 기술들에 대해서도 쉽게 바꿀 수 있도록 인터페이스를 구성해야 겠다는 생각을 했다. 결국, Lv.1에 대한 과제를 제출하고 다음 강의를 듣기 시작했다. 다음 강의는 주로 보안과 관련된 강의들이었다. 보안과 관련된 강의를 진행하..

TIL 2023.08.26

8/25

👣 개요 3주차가 시작되었다. 3주차는 주특기[Spring]을 익히는 주차로 강의를 듣고 각 과제를 해결해야 하는 주차였다. 우선 1주차 강의 내용은 다음과 같았다. Spring을 위한 기본적인 지식 Intellij에서의 Spring 프로젝트 시작 방법 Gradle 사용방법 HTTP 강의 테스트 코드 강의 MySQL 설치 방법 Spring MVC 패턴 Spring 라우팅 및 Path Variable, Request Param 간단한 Spring Project 수행 Spring Boot JDBC MySQL Thymeleaf DB와 SQL JDBC 강의를 듣고 1주차의 숙제를 수행했다. 그 이후, Lv.1의 과제를 수행했다. Lv.1 과제를 요약하면 다음과 같다. 간단한 게시글을 작성할 수 있는 블로그의 A..

TIL 2023.08.25

8/24

👣 개요 오늘은 2주차 알고리즘 풀이 시험을 치뤘다. 해당 알고리즘 풀이 시험을 수행한 뒤, '자바 ORM 표준 JPA 프로그래밍'라는 책을 읽고 게시물을 작성하고자 했다. 우선 JPA의 탄생 이유에 대해 설명하기 위해 JDBC로만 작성된 DB 조회 Application을 만들어보고자 하였다. 프로젝트를 생성할 때, 오로지 Spring web 관련 라이브러리와 JDBC, H2DB Driver 라이브러리만 추가했다. 해당 프로젝트에서는 Member 엔티티를 만들고 해당 엔티티를 DB에서 조회하는 상황을 연출했다. 하지만, JDBC를 많이 사용하지 못하다보니 코드 작성 속도가 많이 더뎠고 완성하지 못한 채로 하루를 마치게 되었다. 해당 코드가 정상 작동함을 확인하면 github에 올리고 해당 코드를 예시로 ..

TIL 2023.08.24

'자바 ORM 표준 JPA 프로그래밍' 읽기 전략

👣 개요 해당 책은 Java의 ORM인 JPA에 대한 내용이 담겨 있다. 해당 책은 실용적인 내용을 담고 있기 때문에 직접 코드를 타이핑하며 읽어 나갈 계획이다. 물론 모든 코드를 따라치지는 못할 것이다. 하지만 코드를 따라치면서 그동안 설정하지 못해봤던 것들. [Ex. 트랜잭션 고립 수준, 성능 테스트 등등]을 실험하면서 더 나은 코드를 생산할 수 있도록 공부할 계획이다.

JPA 2023.08.24

8/23

👣 개요 Effective Java를 전체적으로 다시 훑어 처음에 공부했던 부분을 다시 상기시키는 작업을 수행했다. 동시에 '자바 ORM 표준 JPA 프로그래밍'이라는 책을 구입해 조금 읽었다. 내일[8/24]에 알고리즘 문제를 푸는 시험을 보기 때문에 Java에서 자주 사용되는 문법들을 다시 정리하기도 했다. 정리한 내용은 다음과 같다. 1. 특정 범위 내에서만 증가하게 하기. newC = newC + n; newC = floor + (newC - floor) % (ceil - floor); 2. 특정 값으로 List 초기화 List copies = Collections.nCopies(3, "초기화할 값"); // copies : ["초기화할 값", "초기화할 값", "초기화할 값"] 3. Set의 교..

TIL 2023.08.23

8/22

👣 개요 Effective Java의 끝까지 공부하고 요약했다. 9장의 '일반적인 프로그래밍 원칙' ~ 12장의 '직렬화'까지 공부했으며 이 중 직렬화의 경우, 너무 난해해 2회독 때 다시 자세히 살펴보기로 하였다. 동시에 동시성에 대한 공부가 미흡함을 느끼고 java.util.concurrent 패키지를 공부해야 겠다는 생각을 했다. 원래 'Effective Java - 1회독 요약' 게시물에 모든 공부내용을 적었지만 이것을 chapter마다 소분해서 게시물을 작성했다. 그 내용을 'Effective Java - 1회독 요약'에 반영했다. 👣 공부 내용 Effective Java - 1회독 요약 👣 개요 빠르게 훑어보며 각 부분이 큰 그림 속의 어떤 위치에 있는지 파악하는 단계. Effective Ja..

TIL 2023.08.22

Effective Java 제 11장 - 동시성

공유 중인 가변 데이터는 동기화해 사용해라! Synchronized 키워드로 데이터 변경은 하나의 쓰레드만 수행할 수 있도록 만들어라. 최대한 동기화 블럭 크기를 줄여라! 동기화 블럭을 크게 잡아두면 교착 상태에 놓일 확률이 크다. 뿐만 아니라 성능도 크게 저하되므로 되도록 최소한 사용하고 적은 범위에 적용해라! wait, notify보다 동시성 유틸리티를 애용해라! wait, notify는 매우 저수준의 쓰레드 처리 메서드다. 때문에 사용하기 굉장히 까다롭고 위험하다. 이것들을 쉽고 안전하게 사용할 수 있게 고수준 동시성 유틸리티를 만들어 놓았다. java.util.concurrent에 이러한 고수준 유틸리티가 많이 구현되어 있으니 이러한 메서드를 사용해라! 스레드 안전성 수준을 문서화해라! 약간 난해..

Java 2023.08.22