전체 글

전체 글

    [디자인 패턴] SOLID 원칙

    컴퓨터 프로그래밍에서 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것이다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다. SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. SOLID의 다섯 가지 원칙을 살펴보자. SOLID 원칙 단일 책임 원칙(SRP: Single Responsibility Principle) 개방-폐쇄 원칙(OCP: Open-Closed Principle) 리스코프 치환 원칙(L..

    Java의 volatile 키워드

    Java의 volatile 키워드

    ※ 이 글은 블로그 주인 본인의 volatile 공부를 위해 Jakob Jenkov 님의 Java Volatile Keyword 글을 번역해본 글입니다. Java의 volatile 키워드는 Java 변수를 "메인 메모리에 저장 중"으로 표시하기 위해 사용된다. 더 정확히 말하자면 휘발성 변수의 모든 읽기는 CPU 캐시가 아닌 컴퓨터의 메인 메모리에서 읽혀지며 휘발성 변수에 대한 모든 쓰기도 CPU 캐시뿐만 아니라 메인 메모리에 기록된다. 사실, Java 5 이후로 volatile 키워드는 단순히 휘발성 변수가 메인 메모리에 기록되고 읽히는 것 그 이상을 보장한다. 이것은 뒤에 이어지는 섹션에서 확인해보자. 변수의 가시성 문제 Java volatile 키워드를 사용하면 쓰레드에 걸쳐 변수의 변경사항을 확인..

    JPA에서 지연로딩(LAZY LOADING)이란

    JPA 공부를 하다가 아래와 같은 오류를 만났다. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.study.chapter05.entity.Ch05Team.memberList, could not initialize proxy - no Session 팀과 회원 객체의 양방향 연관관계 테스트를 하다가 만난 오류인데 팀을 조회할때 팀에 소속된 회원 리스트까지 함께 조회를 하는 과정에서 발생하였다. // 팀 엔티티 @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Table(name = "Ch05_TEAM") public c..

    JPA에서 save할때 select 쿼리가 먼저 실행되는 이유

    스프링 데이터 JPA의 JpaRepository로 save를 해보다가 이상한 점을 발견했다. MEMBER 테이블에 회원 객체를 저장하는 테스트 코드를 작성했다. @Test @DisplayName("회원 객체 등록 테스트") void insertMemberTest() { // given Member member = Member.builder().id("id1").username("초원").age(26).build(); // when Member saveMember = memberRepository.save(member); // then assertEquals(saveMember.getUsername(), "초원"); } 쿼리 로그를 출력해보니 insert 쿼리 전에 select 쿼리가 선실행되고 있었다. ..

    mac에 H2 데이터베이스 설치하기

    mac에 H2 데이터베이스 설치하기

    구글링하면 보편적으로 나오는 H2 사이트 접속하여 zip파일 풀어 실행하는 방법을 따라하니 브라우저에서 아래와 같은 에러가 나왔다. (ㅇㅅㅇ...?) 찾아보니 맥이 카탈리나(Catalina, 10.15.5ver)로 올라가면서 권한 문제에 따른 에러라고 한다. 맞다, 현재 내 맥 OS는 카탈리나다!!! 그래서 위에 방법 싹 다 무시... 새로운 방법을 찾아나섰다. 🌈내가 성공한 H2 데이터베이스 설치하기⭐️ 1. homebrew로 h2를 설치한다. kimchowon@gimchowon-ui-MacBookPro ~ % brew install h2 2. h2를 실행한다. kimchowon@gimchowon-ui-MacBookPro ~ % h2 -web Web Console server running at htt..

    QueryDSL + multi data source 연동하기

    1.QueryDSL + single data source 인 경우 DataSourceConfiguration - entityManagerFactory 생성 메서드 - 데이터소스 클래스를 생성하는 것이 주 내용이 아니기 때문에 entityManagerFactory 생성 메소드만 올린다. @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory( @Qualifier("dataSource") DataSource dataSource) { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); en..

    [프로그래머스] 합승 택시 요금 - JAVA

    [프로그래머스] 합승 택시 요금 - JAVA

    [문제] 2021 KAKAO BLIND RECRUITMENT 문제 https://programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr [풀이] 사용 알..

    webflux + reactive redis cache 적용하기

    webflux + reactive redis cache 적용하기

    webflux + reactive redis cache redis는 캐시로 사용할 수 있음. AOP에서 redis에 원하는 데이터가 있으면 바로 get, 없으면 set하는 로직. 기존 mvc 모델에서는 캐시 어노테이션과 AOP로 캐시를 쉽게 구현할 수 있음. 그런데 webflux 모델에서는 캐시를 구현할 수 가 없었다. mvc 모델 @RedisCacheable(DEAL) public Deal getDeal(final long dealNo, ...) { // 실제 데이터를 리턴 } webflux 모델 webflux는 데이터를 get하면 Mono/Flux 체인이 리턴된다. Mono/Flux는 Reactive Streams에서 데이터를 제공하는 발행자 역할을 하는 Publisher의 구현체이다. 구독자가 su..

    [프로그래머스][Level2][JAVA] [1차]뉴스 클러스터링

    [문제 설명] programmers.co.kr/learn/courses/30/lessons/17677 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr [풀이 과정] 1. 매개변수로 주어진 2개의 문자열을 각각 list로 만든다. (메서드를 생성) 1-1) 문자열을 매개변수로 가지고 String 리스트를 반환하는 메서드 생성 (List getStrArray(String str)) 1-2) 문자열 길이 처음 ~ 마지막-1 까지 for문을 돌면서 해당 문자가 영어인지 확인(아스키 코드 이용) ..