비빕빱 재료들 40

[JPA] 3. 영속성 관리

자바 ORM 표준 JPA 프로그래밍 3장 요약입니다 > 한 개만 만들어서 애플리케이션 전체에서 공유 -- 여러 스레드가 동시에 접근해도 안전 -> 스레드끼리 공유 가능 엔티티 매니저 -- 엔티티 매니저 공장에서 만들어짐. 비용이 거의 안 든다. -- 동시성 문제 때문에 스레드 간에 공유하면 안 된다. -- 엔티티 매니저는 데이터베이스 연결이 꼭 필요한 시점까지 커넥션을 얻지 않는다. (보통 트랜잭션을 시작할 때 커넥션을 획득한다.) -- 매니저를 통해 영속성 컨텍스트에 접근 및 관리를 할 수 있다. 3.2 영속성 컨텍스트란? persistence context : 엔티티를 영구 저장하는 환경 -- persist() 엔티티 매니저를 사용해 회원 엔티티를 영속성 컨텍스트에 저장 3.3 엔티티의 생명 주기 엔..

[JPA] InteliJ + gradle + SpringBoot + h2 DB(or MySQL) 로 간단 CRUD 기능 구현하기 (2.JPA 시작)

자바 ORM 표준 JPA 프로그래밍 2장 실습+응용입니당 :3 책에 적힌 실습은 환경이 eclipse, maven 기반이라 내 환경에 맞춰 재구성해보았다. 내 환경 : MacOs + InteliJ + Gradle + H2 DB + SpringBoot (2021.06.29) MySQL로도 적용해보았다. 1. 프로젝트 생성 프로젝트명 : jpa-study 패키지 구성 : 2-1. H2 데이터베이스 설치 H2 Database Engine에서 OS에 맞는 버전을 다운받는다. 압축 파일을 풀면 아래와 같은 파일이 생긴다. h2 > bin 으로 들어가 jar 파일을 실행시킨다. h2 웹 브라우저 환경이 뜨면 아래와 같이 URL 경로를 변경하고 연결을 수행한다. 책에 적힌 경로를 먼저 입력하면 오류가 일어날 것이다...

[JPA] JPA는 왜 써야할까? (1. JPA 소개)

자바 ORM 표준 JPA 프로그래밍 1장 요약 정리본입니당 :3 JPA를 사용하기 전 문제점 CRUD SQL 반복 작성 데이터 중심 모델이 되기 쉬움 JPA를 사용하면서... CRUD SQL 자동 처리 객체 모델링과 관계형 데이터베이스 사이의 차이점 해결 객체 지향적 개발 -> 생산성, 유지보수 성능 향상 1.1 SQL을 직접 다룰 때 발생하는 문제점 1.1.1 수많은 반복 테이블마다 CRUD SQL 작성. 반복되는 코드.. 지루함 :( 1.1.2 SQL에 의존적인 개발 엔티티 : 비즈니스 요구사항을 모델링한 객체 SQL에 모든 것을 의존하는 상황에서, 개발자는 엔티티를 신뢰하고 사용할 수 없다.. 이건 진정한 의미의 계층 분할이 아니다. 논리적으로 엔티티와 JDBC&SQL이 아주 강한 의존 관계를 가지..

[Spring] @ConstructorProperties는 꼭 필요한가요? (feat.Lombok)

제목이 저런 건 코드 리뷰를 받던 중 이런 질문이 들어왔기 때문이다. 당시 내 코드는 이랬다. 음... 저걸 쓰지 않으면 에러가 나서요... 라고 답할 순 없었기에 적합한 이유를 찾아야 했다. 이유는 lombok 1.16.20 브레이킹 체인지 에서 찾을 수 있었다. 내 lombok 버전은 1.18.18 이었지만 Java8을 쓰고 있었기에 1.16.20 이전의 사용법이 적용된 듯 했다. 그렇다면 나중에 Java9 이상으로 업데이트를 하면 이 코드가 에러가 나겠구나, 싶어 다른 방법을 써보기로 했다. 먼저 해당 어노테이션을 없애기 위해 무슨 역할을 하는지 알아야했다. @ConstructorProperties ConstructorProperties 는 생성자의 속성 명칭을 지정해지주는 어노테이션으로 역직렬화를..

[JAVA] 스트림 소개

많은 요소를 포함하는 커다란 컬렉션은 어떻게 처리해야 할까? - 0. 스트림이란? 스트림 stream 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 값 요소 스트림은 쉽게 말하자면 데이터 컬렉션 반복을 멋지게 처리하는 기능이다. 멋지다는 게 무슨 의미인가? 아래 코드를 보자. 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 기능을 구현한 코드다. // 스트림 미사용 List lowCaloricDishes = new ArrayList(); for(Dish dish : menu) { if(dish.getCalories() < 400) { lowCalroicDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator (..

[JAVA] 스트림 활용

스트림 API 가 지원하는 다양한 연산을 살펴보자 1. 필터링 - filter : Predicate 로 필터링 List beverageMenu = menu.stream() .filter(Beverage::isTea) // 음료 종류가 차인지 확인하는 메소드 참조 .collect(toList()); Predicate boolean을 반환하는 함수 - distinct : 고유요소 필터링 List beverageMenu = menu.stream() .filter(Beverage::isTea) .distinct() // 중복을 '필터링' .collect(toList()); 2. 슬라이싱 - takeWhile, dropWhile : Predicate 를 이용한 슬라이싱 (JAVA 9) filter 는 전체 스트림..

[JAVA] 람다 표현식

더 간결하고 유연한 코드를 구현하는 방법이 있을까? 자바 8이 새로 선보인 기능, 람다 표현식을 소개해본다. 람다 표현식 lambda expression 메소드로 전달할 수 있는 익명 함수를 단순화한 것 람다 표현식은 코드 단순화에 존재 의의를 두고 있다. 즉, 동작 파라미터 형식의 코드를 더 쉽게 구현 및 전달할 수 있고 코드를 간결하고 유연해지게 만든다. 1. 특징 - 람다 표현식은... 익명 보통의 메소드와 달리 이름이 없다. 함수 메소드처럼 클래스에 종속되지 않는다. 하지만 메소드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다. 전달 인수로 전달하거나 변수로 저장할 수 있다. 간결성 자질구레한 코드를 구현할 필요가 없다. 2. 구조 및 문법 - 람다 사용하기 어떻게 사용하..

[JAVA] 동작 파라미터화 코드 전달하기

시시각각 변하는 사용자 요구사항에 어떻게 대응해야 할까? 엔지니어링적인 비용이 최소화되고 추가되는 기능을 쉽게 구현할 수 있으며 장기적으로 유지보수가 쉬워야 하는 방식으로! 자주 바뀌는 요구사항에 효과적으로 대응할 수있는 동작 파라미터화를 소개해본다. 동작 파라미터화 behavior parameterization 어떻게 실행할 것인지 결정하지 않은 코드 블록 풀어 설명하자면 어떤 동작을 할 수 있으나, 아직 안 하고 있는 코드 블록을 메서드의 파라미터로 넘기는 방법이다. 예시로 사과 농장을 보자. 농부는 수확한 사과 중 녹색 사과만 골라보려고 한다. 동작 파라미터화를 쓰지 않고 녹색 사과를 가져오는 방법은 다음과 같다. public List filterGreenApples(List inventory) {..

[디자인 패턴] 0. 들어가며

디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인 상의 문제를 정리해서, 상황에 따라 간편하게 적용해서 쓸 수 있는 패턴 형태로 만든 것이다. - Head First Design Patterns 에서 발췌 - Head First Design Patterns 저자 에릭 프리먼 외 3명. 번역 서환수 [ 차례 ] 01. 스트래지디 패턴 Strategy Pattern 02. 옵저버 패턴 Observer Pattern 03. 데코레이터 패턴 Decorator Pattern 04. 팩토리 패턴 Factory Pattern 05. 싱글턴 패턴 Single-Turn Pattern 06. 커맨드 패턴 Command Pattern 07. 어댑터 패턴과 퍼사드 패턴 Adapter Pattern & Fac..

기타 딩가딩가 2020.12.24

우아한 테크코스 3기 프리코스 후기

우아한 형제들에서 진행하는 우아한 테크코스 1차 전형을 통과하고 프리코스를 3주 동안 진행하였다. 프리코스가 마무리를 지어가고 코딩 테스틀 앞두며 여태껏 겪은 바와 공부한 것을 정리할 겸 후기를 써 본다. [ 차례 ] 0. 1차 전형 1. 프리코스 준비 2. 프리코스 진행 3. 오프라인 코딩 테스트를 앞두고 0. 1차 전형 이번 우아한 테크코스는 내게 있어 두 번째 도전이다. 우아한 테크코스 2기를 지원한 적이 있기 때문이다. 결과는 1차 심사에서 장렬하게 탈락. 프리코스의 'ㅍ'도 맛보지 못했다. 탈락 소식을 듣고 1년이 지났다. 그동안 바뀐 모습을 보여주겠다는 포부로 3기에 도전했다. (무엇이 바뀌었는지는 여백이 좁아 여기에 적지 않겠다. 어쨋든 공부를 많이 했다.) 제출 마감 2주 전에 자소서를 미..

카테고리 없음 2020.12.13